Make animating opacity cheaper. (#13583)
No need to update the compositing bits all the time.
diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart
index 0404171..5271c16 100644
--- a/packages/flutter/lib/src/rendering/proxy_box.dart
+++ b/packages/flutter/lib/src/rendering/proxy_box.dart
@@ -736,11 +736,15 @@
assert(value >= 0.0 && value <= 1.0);
if (_opacity == value)
return;
+ final bool didNeedCompositing = alwaysNeedsCompositing;
+ final bool wasVisible = _alpha != 0;
_opacity = value;
_alpha = _getAlphaFromOpacity(_opacity);
- markNeedsCompositingBitsUpdate();
+ if (didNeedCompositing != alwaysNeedsCompositing)
+ markNeedsCompositingBitsUpdate();
markNeedsPaint();
- markNeedsSemanticsUpdate();
+ if (wasVisible != (_alpha != 0))
+ markNeedsSemanticsUpdate();
}
int _alpha;
@@ -1354,8 +1358,10 @@
assert(value != null);
if (elevation == value)
return;
+ final bool didNeedCompositing = alwaysNeedsCompositing;
_elevation = value;
- markNeedsCompositingBitsUpdate();
+ if (didNeedCompositing != alwaysNeedsCompositing)
+ markNeedsCompositingBitsUpdate();
markNeedsPaint();
}