New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 692614 link

Starred by 5 users

Issue metadata

Status: Fixed
Owner:
Closed: Mar 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 1
Type: Bug-Regression



Sign in to add a comment

SlimmingPaintInvalidation performance regression because of cost of GeometryMapper

Project Member Reported by wangxianzhu@chromium.org, Feb 15 2017

Issue description

This is separated from bug 667370.

Open https://www.scirra.com/labs/bugs/containlayoutperf-workaround/, capture a trace for the animation after clicking the first item in the page.

with --disable-slimming-paint-invalidation:
  FrameView::invalidateTree: about 17ms

with --enable-slimming-paint-invalidation:
  FrameView::prePaint: about 24ms


  
 
trace_spi.json.gz
1.3 MB Download
trace_nonspi.json.gz
1.4 MB Download
Labels: -Type-Bug -Pri-2 M-58 Pri-1 Type-Bug-Regression
Raising priority because the prePaint performance becomes dominant with a workaround for layout performance (https://bugs.chromium.org/p/chromium/issues/detail?id=667370#c7).
Cc: wangxianzhu@chromium.org
I wonder if CSS containment causes a full-subtree walk for non-slimming-paint.
If that's true, then the problem is a higher per-element cost.

Yes, CSS containment also cause full-subtree walk for non-slimming-paint-invalidation.
Owner: wangxianzhu@chromium.org
Proposal: don't recurse into LayoutText objects for paint invalidation.
Instead:

* If setMayNeedPaintInvalidation is set on a LayoutText, force-invalidate
the containing object.

* Adjust visual rects for LayoutText to delegate to their parents.

This may improve performance.

Prototype (not quite working correctly) CL: https://codereview.chromium.org/2697193011

Anecdotally in local traces, it seems to help significantly on https://www.scirra.com/labs/bugs/containlayoutperf/.
Cc: e...@chromium.org

Comment 6 by a...@scirra.com, Feb 18 2017

Please note that test case only uses text as a placeholder, our real production web app uses a complex layout with lots of non-text elements.
Cc: chrishtr@chromium.org
Besides some micro optimizations (that optimizes per-element performance but still keeps the full subtree walk), we should consider global optimizations to avoid unnecessary full subtree walk in the following situations:

- Clip change what won't affect descendants (e.g. for overflow clip when the clip rect is bigger than the layout overflow);

- Paint offset change on a big subtree (perhaps we can automatically convert some paint offset change into a paintOffsetTranslation change?)

Description: Show this description
Another thought:

We currently invalidate display item clients regardless of
the reason for paint invalidation. This means that we invalidate them when their
visual rect changed, even if their contents did not. Can we stop doing that in
cases were we know it's safe? In particular, it seems it could be avoided when we
know clips don't change culling. This would improve display item caching.
 crbug.com/694609  and https://codereview.chromium.org/2702883002/ brought this
question to mind. In such cases, we could issue a raster invalidation, and invalidate
subsequences, but not the display items themselves.
We don't invalidate display item clients if the object changes visual rect just because of ancestor clip change and is not marked for paint invalidation for any other reasons. This is achieved by ForcedSubtreeInvalidationRectUpdate which won't cause either raster invalidations or object invalidations. The ancestor with clip property changed issues raster invalidation.

I see. And for the non-clip-changed cases, can we avoid invalidating the
display item clients also?
I feel that most visual rect changes caused by non-clip changes will cause display item client change. Do you have cases that we should not invalidate display item clients?

Comment 13 Deleted

Comment 14 Deleted

Labels: RegressionFound-58 PaintTeamTriaged-20170215 BugSource-Team Regressed-58
Project Member

Comment 16 by bugdroid1@chromium.org, Mar 1 2017

Oh, I had overlooked that paint offset is baked into DrawingDisplayItems...
Summary: SlimmingPaintInvalidation performance regression because of cost of GeometryMapper (was: SlimmingPaintInvalidation performance regression about css containment)
Owner: chrishtr@chromium.org
I think https://codereview.chromium.org/2729243002/ is the root cause of this bug. Assigning to chrishtr@ for verification.
We'll use other bugs ( bug 697081 , bug 685179) to track other reasons of performance issues.
Are you saying GeometryMapper is also causing a regression in Paint Invalidation
time? Or is paint a lot slower on these pages also?
For now I see two causes of regression of spinvalidation:
- The extra work for paint property update (tracked by other bugs)
- GeometryMapper (I would like to track using this bug).

These are the differences between spinvaliation and non-spinvalidation.

Other aspects (e.g. LayoutText paint invalidation) of spinvalidation are just the same as non-spinvalidation, so they should not cause the regression. Optimization of them will benefit both spinvalidation and non-spinvalidation, and will also help reduce or fix the regression, given that the extra cost of paint property update is unavoidable.
The attachments are profiling results with modified [1] version of PerformanceTests/Paint/containinment-resize.html (which is based on https://www.scirra.com/labs/bugs/containlayoutperf-workaround/).

* containment.dot: ToT
  PrePaintTreeWalk::walk: 61.3%
  PrePaintTreeWalk::invalidatePaintLayerOptimizationsIfNeeded(): 7.87%
  Total GeometryMapper cost: 11%

* containment-opt.dot: with https://codereview.chromium.org/2729243002/.
  PrePaintTreeWalk::walk: 63.21%
  PrePaintTreeWalk::invalidatePaintLayerOptimizationsIfNeeded(): 8.15%
  Total GeometryMapper cost: 11.69%


[1] The modification is:
diff --git a/third_party/WebKit/PerformanceTests/Paint/containment-resize.html b/third_party/WebKit/PerformanceTests/Paint/containment-resize.html
index 387bd17d1011..227cc8479892 100644
--- a/third_party/WebKit/PerformanceTests/Paint/containment-resize.html
+++ b/third_party/WebKit/PerformanceTests/Paint/containment-resize.html
@@ -35,7 +35,11 @@ for (let i = 0; i < 20000; ++i)
 var target = container.firstElementChild.firstElementChild;
 PerfTestRunner.measureFrameTime({
   run: function() {
-    target.style.height = (target.offsetHeight - 1) + 'px';
+    var newHeight = target.offsetHeight - 1;
+    if (newHeight < 0)
+      newHeight = 60;
+    target.style.height = newHeight + 'px';
   },
+  iterationCount: 10000,
 });
 </script>

containment.dot
48.0 KB Download
containment-opt.dot
49.2 KB Download
Awesome, thanks! That information is a big help.
With https://codereview.chromium.org/2729243002/#ps240001 I moved the caching onto
the clip and transform nodes directly. The new stats are:

Total GeometryMapper cost (sourceToDestinationClipRect + sourceToDestinationVisualRect):

* before CL 2729243002: 11.30%
* after CL 2729243002 ps240001: 9.13%

Also, after CL 2729243002:
 PrePaintTreeWalk::walk: 67.88%
 PrePaintTreeWalk::invalidatePaintLayerOptimizationsIfNeeded: 7.55%

It seems that optimizing GeometryMapper skewed onto those other stats for the remaining cost.

I ran it twice and got similar results the second time.
Labels: ReleaseBlock-Stable
Project Member

Comment 28 by bugdroid1@chromium.org, Mar 8 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc

commit ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc
Author: chrishtr <chrishtr@chromium.org>
Date: Wed Mar 08 22:52:03 2017

Improve performance of GeometryMapper cache.

1. Store clips and transforms in vectors attached to the clip and transform nodes.
This avoids all hash map lookups. Invalidation uses a global cache generation id
(currently we don't support anything other than global invalidation of the
GeometryMapper caches).

2. Return clips and transforms by reference, to avoid copying.

#1 is expected to be a good optimization because we almost always compute clips
and transforms relative to the same ancestor, so the vectors are short and hash
lookups are reduced.

BUG= 692614 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2729243002
Cr-Commit-Position: refs/heads/master@{#455571}

[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/BUILD.gn
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/ClipPaintPropertyNode.h
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[add] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.cpp
[add] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.h
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp
[add] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.cpp
[add] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.h
[modify] https://crrev.com/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h

Project Member

Comment 29 by bugdroid1@chromium.org, Mar 9 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b0ef4258b2832480c9086fac69210b3338a38198

commit b0ef4258b2832480c9086fac69210b3338a38198
Author: machenbach <machenbach@chromium.org>
Date: Thu Mar 09 09:13:51 2017

Revert of Improve performance of GeometryMapper cache. (patchset #39 id:690001 of https://codereview.chromium.org/2729243002/ )

Reason for revert:
Breaks msan:
https://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20Trusty%20MSAN/builds/781

Original issue's description:
> Improve performance of GeometryMapper cache.
>
> 1. Store clips and transforms in vectors attached to the clip and transform nodes.
> This avoids all hash map lookups. Invalidation uses a global cache generation id
> (currently we don't support anything other than global invalidation of the
> GeometryMapper caches).
>
> 2. Return clips and transforms by reference, to avoid copying.
>
> #1 is expected to be a good optimization because we almost always compute clips
> and transforms relative to the same ancestor, so the vectors are short and hash
> lookups are reduced.
>
> BUG= 692614 
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
>
> Review-Url: https://codereview.chromium.org/2729243002
> Cr-Commit-Position: refs/heads/master@{#455571}
> Committed: https://chromium.googlesource.com/chromium/src/+/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc

TBR=pdr@chromium.org,wangxianzhu@chromium.org,chrishtr@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 692614 

Review-Url: https://codereview.chromium.org/2738113003
Cr-Commit-Position: refs/heads/master@{#455706}

[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/BUILD.gn
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/graphics/paint/ClipPaintPropertyNode.h
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[delete] https://crrev.com/72f3c9b47d08185135faeab172c1130f34f1ca66/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.cpp
[delete] https://crrev.com/72f3c9b47d08185135faeab172c1130f34f1ca66/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.h
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp
[delete] https://crrev.com/72f3c9b47d08185135faeab172c1130f34f1ca66/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.cpp
[delete] https://crrev.com/72f3c9b47d08185135faeab172c1130f34f1ca66/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.h
[modify] https://crrev.com/b0ef4258b2832480c9086fac69210b3338a38198/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h

Project Member

Comment 30 by bugdroid1@chromium.org, Mar 9 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/890521e5189ff65fb2c16f67c837cc09bcf503c9

commit 890521e5189ff65fb2c16f67c837cc09bcf503c9
Author: chrishtr <chrishtr@chromium.org>
Date: Thu Mar 09 20:22:24 2017

Reland: Improve performance of GeometryMapper cache.

New version initializes m_cacheGeneration in GeometryMapperClipCache and
GeometryMapperTransformCache constructors. Verified it fixes the msan
layout test failures.

1. Store clips and transforms in vectors attached to the clip and transform nodes.
This avoids all hash map lookups. Invalidation uses a global cache generation id
(currently we don't support anything other than global invalidation of the
GeometryMapper caches).

2. Return clips and transforms by reference, to avoid copying.

and transforms relative to the same ancestor, so the vectors are short and hash
lookups are reduced.

BUG= 692614 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2729243002
Cr-Commit-Position: refs/heads/master@{#455571}
Committed: https://chromium.googlesource.com/chromium/src/+/ee72c4b5d2fd1e4882bddca66e0f89fe8784a7fc

patch from issue 2729243002 at patchset 690001 (http://crrev.com/2729243002#ps690001)

Review-Url: https://codereview.chromium.org/2741803002
Cr-Commit-Position: refs/heads/master@{#455850}

[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/BUILD.gn
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/ClipPaintPropertyNode.h
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[add] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.cpp
[add] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperClipCache.h
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp
[add] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.cpp
[add] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTransformCache.h
[modify] https://crrev.com/890521e5189ff65fb2c16f67c837cc09bcf503c9/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h

Project Member

Comment 31 by bugdroid1@chromium.org, Mar 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/05c00d2035047fa9d210d95afedf8bd063bccc33

commit 05c00d2035047fa9d210d95afedf8bd063bccc33
Author: chrishtr <chrishtr@chromium.org>
Date: Fri Mar 10 06:50:31 2017

Reduce copying of local data structures in GeometryMapper and PaintLayerClipper.

In particular, changes return values from FloatClipRect to const FloatClipRect&,
to avoid extra data structure copies.

In local testing, this CL produces up to a 10% improvement on the
rasterize_and_record_micro.partial_invalidation benchmark.

BUG= 692614 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2745563004
Cr-Commit-Position: refs/heads/master@{#456011}

[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/ClipRect.h
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/platform/graphics/paint/FloatClipRect.h
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[modify] https://crrev.com/05c00d2035047fa9d210d95afedf8bd063bccc33/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp

Project Member

Comment 32 by bugdroid1@chromium.org, Mar 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a2c9dcac6e64411adf0b6f047125d5ba415cce54

commit a2c9dcac6e64411adf0b6f047125d5ba415cce54
Author: kinuko <kinuko@chromium.org>
Date: Fri Mar 10 09:46:29 2017

Revert of Reduce copying of local data structures in GeometryMapper and PaintLayerClipper. (patchset #10 id:170001 of https://codereview.chromium.org/2745563004/ )

Reason for revert:
Speculative revert, it doesn't look related but am trying changes in the blame range.

Will update if the revert has changed things / will revert the revert otherwise.

https://build.chromium.org/p/chromium.win/builders/Win10%20Tests%20x64/builds/9030

Test: SitePerProcessHighDPIExpiredCertBrowserTest.InterstitialLoadsWithCorrectDeviceScaleFactor

Original issue's description:
> Reduce copying of local data structures in GeometryMapper and PaintLayerClipper.
>
> In particular, changes return values from FloatClipRect to const FloatClipRect&,
> to avoid extra data structure copies.
>
> In local testing, this CL produces up to a 10% improvement on the
> rasterize_and_record_micro.partial_invalidation benchmark.
>
> BUG= 692614 
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
>
> Review-Url: https://codereview.chromium.org/2745563004
> Cr-Commit-Position: refs/heads/master@{#456011}
> Committed: https://chromium.googlesource.com/chromium/src/+/05c00d2035047fa9d210d95afedf8bd063bccc33

TBR=pdr@chromium.org,wangxianzhu@chromium.org,chrishtr@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 692614 

Review-Url: https://codereview.chromium.org/2743733004
Cr-Commit-Position: refs/heads/master@{#456032}

[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/ClipRect.h
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/platform/graphics/paint/FloatClipRect.h
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[modify] https://crrev.com/a2c9dcac6e64411adf0b6f047125d5ba415cce54/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp

Project Member

Comment 33 by bugdroid1@chromium.org, Mar 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/22a37f49e50636144bbae9d5c391d9efbf9c90a6

commit 22a37f49e50636144bbae9d5c391d9efbf9c90a6
Author: kinuko <kinuko@chromium.org>
Date: Fri Mar 10 10:34:41 2017

Reland of duce copying of local data structures in GeometryMapper and PaintLayerClipper. (patchset #1 id:1 of https://codereview.chromium.org/2743733004/ )

Reason for revert:
Was likely a false alarm.

Original issue's description:
> Revert of Reduce copying of local data structures in GeometryMapper and PaintLayerClipper. (patchset #10 id:170001 of https://codereview.chromium.org/2745563004/ )
>
> Reason for revert:
> Speculative revert, it doesn't look related but am trying changes in the blame range.
>
> Will update if the revert has changed things / will revert the revert otherwise.
>
> https://build.chromium.org/p/chromium.win/builders/Win10%20Tests%20x64/builds/9030
>
> Test: SitePerProcessHighDPIExpiredCertBrowserTest.InterstitialLoadsWithCorrectDeviceScaleFactor
>
> Original issue's description:
> > Reduce copying of local data structures in GeometryMapper and PaintLayerClipper.
> >
> > In particular, changes return values from FloatClipRect to const FloatClipRect&,
> > to avoid extra data structure copies.
> >
> > In local testing, this CL produces up to a 10% improvement on the
> > rasterize_and_record_micro.partial_invalidation benchmark.
> >
> > BUG= 692614 
> > CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
> >
> > Review-Url: https://codereview.chromium.org/2745563004
> > Cr-Commit-Position: refs/heads/master@{#456011}
> > Committed: https://chromium.googlesource.com/chromium/src/+/05c00d2035047fa9d210d95afedf8bd063bccc33
>
> TBR=pdr@chromium.org,wangxianzhu@chromium.org,chrishtr@chromium.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG= 692614 
>
> Review-Url: https://codereview.chromium.org/2743733004
> Cr-Commit-Position: refs/heads/master@{#456032}
> Committed: https://chromium.googlesource.com/chromium/src/+/a2c9dcac6e64411adf0b6f047125d5ba415cce54

TBR=pdr@chromium.org,wangxianzhu@chromium.org,chrishtr@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 692614 

Review-Url: https://codereview.chromium.org/2741103005
Cr-Commit-Position: refs/heads/master@{#456036}

[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/layout/compositing/CompositingInputsUpdater.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/ClipRect.h
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/platform/graphics/paint/FloatClipRect.h
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h
[modify] https://crrev.com/22a37f49e50636144bbae9d5c391d9efbf9c90a6/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp

Pls apply appropriate OS labels. Thank you.
Labels: OS-All
Labels: Merge-Request-58
Requesting merge of

https://chromium.googlesource.com/chromium/src/+/d6782e3f3ea554066b359c025cb6dc41fc3c3d3f

to fix this bug as well as others that block M58.
Project Member

Comment 37 by sheriffbot@chromium.org, Mar 14 2017

Labels: -Merge-Request-58 Merge-Review-58 Hotlist-Merge-Review
This bug requires manual review: Reverts referenced in bugdroid comments after merge request.
Please contact the milestone owner if you have questions.
Owners: amineer@(Android), cmasso@(iOS), bhthompson@(ChromeOS), govind@(Desktop)

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 38 Deleted

Before we approved merge to M58,  could you please confirm change listed at #36 is well baked/verified in Canary, having enough automation coverage and safe to merge to M58?
Friendly ping - can you please look at questions in #39 - we'll need to merge before 5PM tomorrow (Wednesday), since we're promoting Beta on Thursday. 
Yes it is well enough tested. The CL has a full complement of paint invalidation tests
that must pass for it to commit.
Ping - Let me know if I can merge now in advance of the deadline, thanks.
This CL will re-enable the code that was present in M57 BTW.
Labels: -Hotlist-Merge-Review Merge-Approved-58
Thanks - Please go ahead and merge. Branch: 3029
Labels: -Merge-Review-58 Hotlist-Merge-Review
Project Member

Comment 45 by bugdroid1@chromium.org, Mar 15 2017

Labels: -merge-approved-58 merge-merged-3029
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/bf8d0b1e3ef35de8a57953fa30f0a4c509f393c9

commit bf8d0b1e3ef35de8a57953fa30f0a4c509f393c9
Author: Chris Harrelson <chrishtr@chromium.org>
Date: Wed Mar 15 18:15:32 2017

SPInvalidation -> experimental

We decided to delay launch until M59.

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2752673002
Cr-Commit-Position: refs/heads/master@{#456857}
(cherry picked from commit d6782e3f3ea554066b359c025cb6dc41fc3c3d3f)

BUG= 692614 

Review-Url: https://codereview.chromium.org/2752883002 .
Cr-Commit-Position: refs/branch-heads/3029@{#206}
Cr-Branched-From: 939b32ee5ba05c396eef3fd992822fcca9a2e262-refs/heads/master@{#454471}

[modify] https://crrev.com/bf8d0b1e3ef35de8a57953fa30f0a4c509f393c9/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5

Labels: -M-58 M-59
Retargeting as releaseblock-stable for M59 instead of M58.
Project Member

Comment 47 by bugdroid1@chromium.org, Mar 25 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8bdfbdcc61b8235fc912bd7981bdc60f227a739c

commit 8bdfbdcc61b8235fc912bd7981bdc60f227a739c
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Sat Mar 25 04:41:15 2017

Disable SPInvalidation by default

We decided to delay launch until M59.

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

TBR=chrishtr@chromium.org
BUG= 692614 
NOTRY=true
NOPRESUBMIT=true

Review-Url: https://codereview.chromium.org/2772833003
Cr-Original-Commit-Position: refs/heads/master@{#459201}
Review-Url: https://codereview.chromium.org/2777673002
Cr-Commit-Position: refs/branch-heads/3029@{#417}
Cr-Branched-From: 939b32ee5ba05c396eef3fd992822fcca9a2e262-refs/heads/master@{#454471}

[modify] https://crrev.com/8bdfbdcc61b8235fc912bd7981bdc60f227a739c/content/child/runtime_features.cc
[modify] https://crrev.com/8bdfbdcc61b8235fc912bd7981bdc60f227a739c/content/public/common/content_features.cc

Project Member

Comment 48 by bugdroid1@chromium.org, Mar 30 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20

commit 65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20
Author: chrishtr <chrishtr@chromium.org>
Date: Thu Mar 30 17:18:35 2017

Optimize the pre-paint tree walk and ClipRects.

1. Avoid malloc for ClipRects objects. This trades reduced malloc for
a somewhat larger PaintLayer.
2. Get rid of now-unnecessary logic to check clipping ancestors (GeomteryMapper
now checks for transforms on infininte rects instead).
3. ALWAYS_INLINE on some helper methods of PrePaintTreeWalk.

Local runs showed pre-paint time improvements in about:tracing for
Paint/containment-resize.html of up to 5%.

I am also running a CT analysis with and without SPInvalidation on to see effect
on paint times. Early data suggests no strong change either way. (though note that
this CL is mainly aimed at reducing time in pre-paint).

BUG= 692614 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2784963002
Cr-Commit-Position: refs/heads/master@{#460808}

[delete] https://crrev.com/b5acc4c7976d45ace977c14019593c9413d0841d/third_party/WebKit/Source/core/layout/ClipRects.h
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/ClipRects.h
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/ClipRectsCache.h
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h

Status: Fixed (was: Assigned)
I'm not sure what else is actionable about GeometryMapper right now. Will watch
the bots, but close this bug in the meantime.

Please comment/reopen if there is something I am missing.
Project Member

Comment 50 by bugdroid1@chromium.org, Apr 2 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e51c85fe536c1a2810a6a08904c08935b7020e5f

commit e51c85fe536c1a2810a6a08904c08935b7020e5f
Author: chrishtr <chrishtr@chromium.org>
Date: Sun Apr 02 18:30:16 2017

Revert of Optimize the pre-paint tree walk and ClipRects (patchset #3 id:40001 of https://codereview.chromium.org/2784963002/ )

Reason for revert:
On further investigation, found that this patch introduces too much inefficiency by
making all PaintLayers pay the cost of a ClipRects object, rather than just ones that
induce subsequences.

Original issue's description:
> Optimize the pre-paint tree walk and ClipRects.
>
> 1. Avoid malloc for ClipRects objects. This trades reduced malloc for
> a somewhat larger PaintLayer.
> 2. Get rid of now-unnecessary logic to check clipping ancestors (GeomteryMapper
> now checks for transforms on infininte rects instead).
> 3. ALWAYS_INLINE on some helper methods of PrePaintTreeWalk.
>
> Local runs showed pre-paint time improvements in about:tracing for
> Paint/containment-resize.html of up to 5%.
>
> I am also running a CT analysis with and without SPInvalidation on to see effect
> on paint times. Early data suggests no strong change either way. (though note that
> this CL is mainly aimed at reducing time in pre-paint).
>
> BUG= 692614 
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
>
> Review-Url: https://codereview.chromium.org/2784963002
> Cr-Commit-Position: refs/heads/master@{#460808}
> Committed: https://chromium.googlesource.com/chromium/src/+/65b5d60ab86950a42ade9f0aee9e5e67d8c3ff20

TBR=pdr@chromium.org,wangxianzhu@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG= 692614 

Review-Url: https://codereview.chromium.org/2792833002
Cr-Commit-Position: refs/heads/master@{#461345}

[add] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/layout/ClipRects.h
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/ClipRects.h
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/ClipRectsCache.h
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/e51c85fe536c1a2810a6a08904c08935b7020e5f/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h

Project Member

Comment 51 by bugdroid1@chromium.org, Apr 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ca2623e17b5c45400485a2ceb08545baa9f09c4f

commit ca2623e17b5c45400485a2ceb08545baa9f09c4f
Author: chrishtr <chrishtr@chromium.org>
Date: Mon Apr 03 18:25:35 2017

Optimize ClipRects in the PrePaintTreeWalk.

1. Get rid of now-unnecessary logic to check clipping ancestors (GeomteryMapper
now checks for transforms on infininte rects instead).
2. ALWAYS_INLINE on some helper methods of PrePaintTreeWalk.

This is https://codereview.chromium.org/2784963002 without the change to
remove RefPtrs for ClipRects.

BUG= 692614 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2791883002
Cr-Commit-Position: refs/heads/master@{#461478}

[modify] https://crrev.com/ca2623e17b5c45400485a2ceb08545baa9f09c4f/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/ca2623e17b5c45400485a2ceb08545baa9f09c4f/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/ca2623e17b5c45400485a2ceb08545baa9f09c4f/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h

Project Member

Comment 52 by bugdroid1@chromium.org, Apr 7 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/256619b40e56be177620efb04b57086b2f6bcbed

commit 256619b40e56be177620efb04b57086b2f6bcbed
Author: chrishtr <chrishtr@chromium.org>
Date: Fri Apr 07 01:29:21 2017

Remove begin/end subseq. display items, and store on PaintController instead.

Subsequence display items cause complications for the SPv2 compositing algorithm
because they confuse the PaintChunker. Also, they are the last remaining
paired display item in SPv2 that blocks simplifying the display list format.

BUG= 692614 

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2793233002
Cr-Commit-Position: refs/heads/master@{#462735}

[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/core/paint/PaintControllerPaintTest.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/core/paint/TablePainterTest.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/BUILD.gn
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/compositing/PaintChunksToCcLayer.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.h
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/DisplayItemListTest.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/PaintChunkTest.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/PaintController.h
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
[delete] https://crrev.com/5cba6a6eeb7463afbc2445f05914f26a66874454/third_party/WebKit/Source/platform/graphics/paint/SubsequenceDisplayItem.h
[modify] https://crrev.com/256619b40e56be177620efb04b57086b2f6bcbed/third_party/WebKit/Source/platform/graphics/paint/SubsequenceRecorder.cpp

Project Member

Comment 53 by bugdroid1@chromium.org, Apr 14 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d1cf31c84ed81fce3a5033e601afafd402fee87f

commit d1cf31c84ed81fce3a5033e601afafd402fee87f
Author: chrishtr <chrishtr@chromium.org>
Date: Fri Apr 14 03:54:48 2017

Only store previous clip rects for PaintLayers that support subsequences.

To do this:

2. When updating paint properties, only invalidate painting optimizations like
subsequence for PaintLayers that support it (stacking context, SVG root), or
have clip-related properties

BUG= 692614 , 711413 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2810503002
Cr-Commit-Position: refs/heads/master@{#464670}

[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/d1cf31c84ed81fce3a5033e601afafd402fee87f/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp

Project Member

Comment 54 by bugdroid1@chromium.org, Apr 19 2017

Labels: merge-merged-3071
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a3ba22889b3f2565f6e430eca4a827e0e52e0301

commit a3ba22889b3f2565f6e430eca4a827e0e52e0301
Author: Chris Harrelson <chrishtr@chromium.org>
Date: Wed Apr 19 18:15:44 2017

Only store previous clip rects for PaintLayers that support subsequences.

To do this:

2. When updating paint properties, only invalidate painting optimizations like
subsequence for PaintLayers that support it (stacking context, SVG root), or
have clip-related properties

BUG= 692614 , 711413 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2810503002
Cr-Commit-Position: refs/heads/master@{#464670}
(cherry picked from commit d1cf31c84ed81fce3a5033e601afafd402fee87f)

Review-Url: https://codereview.chromium.org/2832603002 .
Cr-Commit-Position: refs/branch-heads/3071@{#57}
Cr-Branched-From: a106f0abbf69dad349d4aaf4bcc4f5d376dd2377-refs/heads/master@{#464641}

[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[modify] https://crrev.com/a3ba22889b3f2565f6e430eca4a827e0e52e0301/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp

Cc: brajkumar@chromium.org
Labels: Needs-Feedback
Tested this issue on Ubuntu 14.04 using chrome latest Dev #59.0.3071.15. By opening the the link https://www.scirra.com/labs/bugs/containlayoutperf-workaround/ observed there was no lag in animation by clicking first item in the list. 

Tested the same on chrome latest stable #57.0.2987.133 and observed some jittery in the animation.

chrishtr@ Attaching screen cast and tracing report of latest Dev #59.0.3071.15 for reference, Could you please take a look in to it and kindly let us know is this is the expected behavior of this issue, so that it will be verified from Chrome-TE end.

Thanks!

692614.ogv
10.8 MB View Download
trace_692614_Tracing.json.gz
2.2 MB Download
There is no user-visible change expected from the changes from this issue.
If you see a user-visible issue, please file a new bug.

Comment 57 by joha...@opera.com, May 23 2017

Cc: f...@opera.com joha...@opera.com
I still see some performance problems from slimming-paint-invalidation in 59.0.3071.25 on http://www.youtube.com/tv on slower devices (~1.3GHz dual core mips, GLES+disabled-gpu-rasterization).
This feature cause a drop in fps from ~45 to ~30 but with --disable-slimming-paint-invalidation I still get ~45 fps.

We have a simple test that measure the fps when navigation between video thumbnails horizontally and it use requestAnimationFrame to count frames + duration between keydown and transitionend on the 'browse-highlighter' element.

We don't see any loss of performance in more powerful devices (quad core) running the same test.

johan_e@opera.com, thanks for the report. Could you file a new bug for the issue for easier tracking?

Sign in to add a comment