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