Skip to content

Commit b15b5b9

Browse files
authored
Do not copy paths, rects, and rrects when layer offset is zero (flutter#34587)
1 parent 5d3efbd commit b15b5b9

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

packages/flutter/lib/src/rendering/layer.dart

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ class TextureLayer extends Layer {
330330

331331
@override
332332
ui.EngineLayer addToScene(ui.SceneBuilder builder, [ Offset layerOffset = Offset.zero ]) {
333-
final Rect shiftedRect = rect.shift(layerOffset);
333+
final Rect shiftedRect = layerOffset == Offset.zero ? rect : rect.shift(layerOffset);
334334
builder.addTexture(
335335
textureId,
336336
offset: shiftedRect.topLeft,
@@ -370,7 +370,7 @@ class PlatformViewLayer extends Layer {
370370

371371
@override
372372
ui.EngineLayer addToScene(ui.SceneBuilder builder, [ Offset layerOffset = Offset.zero ]) {
373-
final Rect shiftedRect = rect.shift(layerOffset);
373+
final Rect shiftedRect = layerOffset == Offset.zero ? rect : rect.shift(layerOffset);
374374
builder.addPlatformView(
375375
viewId,
376376
offset: shiftedRect.topLeft,
@@ -449,7 +449,8 @@ class PerformanceOverlayLayer extends Layer {
449449
@override
450450
ui.EngineLayer addToScene(ui.SceneBuilder builder, [ Offset layerOffset = Offset.zero ]) {
451451
assert(optionsMask != null);
452-
builder.addPerformanceOverlay(optionsMask, overlayRect.shift(layerOffset));
452+
final Rect shiftedOverlayRect = layerOffset == Offset.zero ? overlayRect : overlayRect.shift(layerOffset);
453+
builder.addPerformanceOverlay(optionsMask, shiftedOverlayRect);
453454
builder.setRasterizerTracingThreshold(rasterizerThreshold);
454455
builder.setCheckerboardRasterCacheImages(checkerboardRasterCacheImages);
455456
builder.setCheckerboardOffscreenLayers(checkerboardOffscreenLayers);
@@ -1018,8 +1019,10 @@ class ClipRectLayer extends ContainerLayer {
10181019
enabled = !debugDisableClipLayers;
10191020
return true;
10201021
}());
1021-
if (enabled)
1022-
builder.pushClipRect(clipRect.shift(layerOffset), clipBehavior: clipBehavior);
1022+
if (enabled) {
1023+
final Rect shiftedClipRect = layerOffset == Offset.zero ? clipRect : clipRect.shift(layerOffset);
1024+
builder.pushClipRect(shiftedClipRect, clipBehavior: clipBehavior);
1025+
}
10231026
addChildrenToScene(builder, layerOffset);
10241027
if (enabled)
10251028
builder.pop();
@@ -1097,8 +1100,10 @@ class ClipRRectLayer extends ContainerLayer {
10971100
enabled = !debugDisableClipLayers;
10981101
return true;
10991102
}());
1100-
if (enabled)
1101-
builder.pushClipRRect(clipRRect.shift(layerOffset), clipBehavior: clipBehavior);
1103+
if (enabled) {
1104+
final RRect shiftedClipRRect = layerOffset == Offset.zero ? clipRRect : clipRRect.shift(layerOffset);
1105+
builder.pushClipRRect(shiftedClipRRect, clipBehavior: clipBehavior);
1106+
}
11021107
addChildrenToScene(builder, layerOffset);
11031108
if (enabled)
11041109
builder.pop();
@@ -1176,8 +1181,10 @@ class ClipPathLayer extends ContainerLayer {
11761181
enabled = !debugDisableClipLayers;
11771182
return true;
11781183
}());
1179-
if (enabled)
1180-
builder.pushClipPath(clipPath.shift(layerOffset), clipBehavior: clipBehavior);
1184+
if (enabled) {
1185+
final Path shiftedPath = layerOffset == Offset.zero ? clipPath : clipPath.shift(layerOffset);
1186+
builder.pushClipPath(shiftedPath, clipBehavior: clipBehavior);
1187+
}
11811188
addChildrenToScene(builder, layerOffset);
11821189
if (enabled)
11831190
builder.pop();
@@ -1414,7 +1421,8 @@ class ShaderMaskLayer extends ContainerLayer {
14141421

14151422
@override
14161423
ui.EngineLayer addToScene(ui.SceneBuilder builder, [ Offset layerOffset = Offset.zero ]) {
1417-
builder.pushShaderMask(shader, maskRect.shift(layerOffset), blendMode);
1424+
final Rect shiftedMaskRect = layerOffset == Offset.zero ? maskRect : maskRect.shift(layerOffset);
1425+
builder.pushShaderMask(shader, shiftedMaskRect, blendMode);
14181426
addChildrenToScene(builder, layerOffset);
14191427
builder.pop();
14201428
return null; // this does not return an engine layer yet.
@@ -1590,7 +1598,7 @@ class PhysicalModelLayer extends ContainerLayer {
15901598
}());
15911599
if (enabled) {
15921600
engineLayer = builder.pushPhysicalShape(
1593-
path: clipPath.shift(layerOffset),
1601+
path: layerOffset == Offset.zero ? clipPath : clipPath.shift(layerOffset),
15941602
elevation: elevation,
15951603
color: color,
15961604
shadowColor: shadowColor,

0 commit comments

Comments
 (0)