Add debug disable flags for various performance affecting layers (#15548)
diff --git a/packages/flutter/lib/src/rendering/debug.dart b/packages/flutter/lib/src/rendering/debug.dart
index e907991..4d6aa48 100644
--- a/packages/flutter/lib/src/rendering/debug.dart
+++ b/packages/flutter/lib/src/rendering/debug.dart
@@ -111,6 +111,26 @@
/// * The discussion at [RendererBinding.drawFrame].
bool debugProfilePaintsEnabled = false;
+/// Setting to true will cause all clipping effects from the layer tree to be ignored.
+///
+/// Can be used to debug whether objects being clipped are painting excessively
+/// in clipped areas. Can also be used to check whether excessive use of clipping
+/// is affecting performance.
+bool debugDisableClipLayers = false;
+
+/// Setting to true will cause all physical modeling effects, such as shadows
+/// from elevations, from the layer tree to be ignored.
+///
+/// Can be used to check whether excessive use of physical models is affecting
+/// performance.
+bool debugDisablePhysicalShapeLayers = false;
+
+/// Setting to true will cause all opacity effects to be ignored.
+///
+/// An optimization to not paint the child at all when opacity is 0 will still
+/// remain. Can be used to check whether excessive use of opacity effects is
+/// affecting performance.
+bool debugDisableOpacityLayers = false;
void _debugDrawDoubleRect(Canvas canvas, Rect outerRect, Rect innerRect, Color color) {
final Path path = new Path()
diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart
index d46e011..9a83448 100644
--- a/packages/flutter/lib/src/rendering/layer.dart
+++ b/packages/flutter/lib/src/rendering/layer.dart
@@ -10,6 +10,8 @@
import 'package:flutter/painting.dart';
import 'package:vector_math/vector_math_64.dart';
+import 'debug.dart';
+
/// A composited layer.
///
/// During painting, the render tree generates a tree of composited layers that
@@ -531,9 +533,11 @@
@override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
- builder.pushClipRect(clipRect.shift(layerOffset));
+ if (!debugDisableClipLayers)
+ builder.pushClipRect(clipRect.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
- builder.pop();
+ if (!debugDisableClipLayers)
+ builder.pop();
}
@override
@@ -559,9 +563,11 @@
@override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
- builder.pushClipRRect(clipRRect.shift(layerOffset));
+ if (!debugDisableClipLayers)
+ builder.pushClipRRect(clipRRect.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
- builder.pop();
+ if (!debugDisableClipLayers)
+ builder.pop();
}
@override
@@ -587,9 +593,11 @@
@override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
- builder.pushClipPath(clipPath.shift(layerOffset));
+ if (!debugDisableClipLayers)
+ builder.pushClipPath(clipPath.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
- builder.pop();
+ if (!debugDisableClipLayers)
+ builder.pop();
}
}
@@ -664,9 +672,11 @@
@override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
- builder.pushOpacity(alpha);
+ if (!debugDisableOpacityLayers)
+ builder.pushOpacity(alpha);
addChildrenToScene(builder, layerOffset);
- builder.pop();
+ if (!debugDisableOpacityLayers)
+ builder.pop();
}
@override
@@ -778,13 +788,15 @@
@override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
- builder.pushPhysicalShape(
- path: clipPath.shift(layerOffset),
- elevation: elevation,
- color: color,
- );
+ if (!debugDisablePhysicalShapeLayers)
+ builder.pushPhysicalShape(
+ path: clipPath.shift(layerOffset),
+ elevation: elevation,
+ color: color,
+ );
addChildrenToScene(builder, layerOffset);
- builder.pop();
+ if (!debugDisablePhysicalShapeLayers)
+ builder.pop();
}
@override