See above.
See above. Philip update, design doc: https://docs.google.com/document/d/1_GkBfvameyhnLV7ODIRsOoTedQEG5liAcHwAxmwS-Vk
The obvious use case is improving performance. One additional use case: implementing detection of clipping changes to invalidate cached paint subsequences.
pdr@ has started the work.
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/b55cdc3b2b1a077b890648a6c4510569a124e761 commit b55cdc3b2b1a077b890648a6c4510569a124e761 Author: pdr <pdr@chromium.org> Date: Wed Oct 19 02:37:23 2016 Refactor FrameView property updates to work like LayouObject updates PaintPropertyTreeBuilder::buildTreeNodes worked differently for FrameView because newly-updated nodes were not returned from the createOrUpdateFunctions. With this patch, FrameView's property updates work just like the other LayoutObject property updates throughout PaintPropertyTreeBuilder. This patch will make it easier to perform future refactorings of the property updates. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://chromiumcodereview.appspot.com/2425183003 Cr-Commit-Position: refs/heads/master@{#426121} [modify] https://crrev.com/b55cdc3b2b1a077b890648a6c4510569a124e761/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/bb580d050724948dcdf4a73068958729d937022d commit bb580d050724948dcdf4a73068958729d937022d Author: pdr <pdr@chromium.org> Date: Wed Oct 19 03:52:29 2016 Switch to shorter names for property tree storage and updates This patch has two changes to increase readability with our new, shorter line length. 1) "createOrUpdate*" has been renamed "update*". 2) LayoutObject's objectPaintProperties has been renamed "paintProperties". This includes related functions such as "ensurePaintProperties()", etc. There are no changes in behavior, just easier to read code. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://chromiumcodereview.appspot.com/2430813002 Cr-Commit-Position: refs/heads/master@{#426128} [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/layout/api/LayoutItem.h [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/BlockPainter.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/BoxClipper.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintControllerPaintTest.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinterTest.cpp [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/SVGPaintContext.h [modify] https://crrev.com/bb580d050724948dcdf4a73068958729d937022d/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/dc2eede366a908159336da0070ac804ba25de929 commit dc2eede366a908159336da0070ac804ba25de929 Author: pdr <pdr@chromium.org> Date: Tue Oct 25 21:00:46 2016 Extract SVG transform update from PaintPropertyTreeBuilder::updateTransform This refactoring simplifies updateTransform which now only handles the general transform update, with SVG handled in a separate function. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2448253002 Cr-Commit-Position: refs/heads/master@{#427465} [modify] https://crrev.com/dc2eede366a908159336da0070ac804ba25de929/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/dc2eede366a908159336da0070ac804ba25de929/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/cf5f1d5f287d15d220a88e4185a3b09a9e9fd361 commit cf5f1d5f287d15d220a88e4185a3b09a9e9fd361 Author: pdr <pdr@chromium.org> Date: Tue Oct 25 21:21:46 2016 [spv2] Do not use updatePaintOffsetTranslation builder for LayoutView This refactoring moves the LayoutView special-case to the top of PaintPropertyTreeBuilder::updatePaintOffsetTranslation, making it clear that the function does not apply to LayoutView. A comment has been added to describe how LayoutView's paint offset is updated in the FrameView update. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2450043002 Cr-Commit-Position: refs/heads/master@{#427476} [modify] https://crrev.com/cf5f1d5f287d15d220a88e4185a3b09a9e9fd361/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/95247e236ea9fcb826b8f50e3cecdb2082833aee commit 95247e236ea9fcb826b8f50e3cecdb2082833aee Author: pdr <pdr@chromium.org> Date: Sat Oct 29 00:53:53 2016 Separate property and context updates in PaintPropertyTreeBuilder This patch is a refactoring to separate the context update from property building/updating in PaintPropertyTreeBuilder. This patch will make future changes to PaintPropertyTreeBuilder simpler, such as skipping the property update step entirely if possible. Because of the size of this change, I'd like to land this as a pure refactoring before any changes are introduced. The big idea in this patch is to refactor this pattern: void updateProperty(object, context) { if (object needs property) context.property = object.properties.update(...); else object.properties.clearProperty(); } To this new pattern: void updateProperty(object, context) { // Update property. if (object needs property) object.properties.update(...); else object.properties.clearProperty(); // Update context. if (object.properties.property()) context.property = object.properties.property(); } We may want to separate the property and context updates into two functions in a followup but it is not a straightforward refactor because some variables are shared between the two updates. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2456113002 Cr-Commit-Position: refs/heads/master@{#428570} [modify] https://crrev.com/95247e236ea9fcb826b8f50e3cecdb2082833aee/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h [modify] https://crrev.com/95247e236ea9fcb826b8f50e3cecdb2082833aee/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/95247e236ea9fcb826b8f50e3cecdb2082833aee/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/95247e236ea9fcb826b8f50e3cecdb2082833aee/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/c674ba80b9579cd38c461bb8f683b677207e46c5 commit c674ba80b9579cd38c461bb8f683b677207e46c5 Author: pdr <pdr@chromium.org> Date: Wed Nov 02 05:24:29 2016 Refactor LayoutView paint offset updates out of FrameView update code Root layer scrolls lets us treat LayoutView like other LayoutObjects and lets us move property updates into the regular LayoutObject update code. This patch removes a special-case for LayoutView in the FrameView property update. Comments have been added describing the LayoutView context updates for fixed and absolute cases. Additionally, LayoutView tests have been unskipped to ensure this does not regress. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2464823003 Cr-Commit-Position: refs/heads/master@{#429213} [modify] https://crrev.com/c674ba80b9579cd38c461bb8f683b677207e46c5/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/c674ba80b9579cd38c461bb8f683b677207e46c5/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/c674ba80b9579cd38c461bb8f683b677207e46c5/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/c674ba80b9579cd38c461bb8f683b677207e46c5/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e500e8ba8aac6f63a94ba7a411b536f513d2270d commit e500e8ba8aac6f63a94ba7a411b536f513d2270d Author: pdr <pdr@chromium.org> Date: Wed Nov 09 17:43:42 2016 Add lifecycle update microbenchmarks This patch adds 3 lifecycle update microbenchmarks which will be used as a first pass optimization of the new paint invalidation and paint property tree update steps. Benchmarks will still be needed on real-world content. The three tests included affect transform, background-color, and paint offset changes. BUG= 645667 Review-Url: https://codereview.chromium.org/2488913002 Cr-Commit-Position: refs/heads/master@{#430963} [add] https://crrev.com/e500e8ba8aac6f63a94ba7a411b536f513d2270d/third_party/WebKit/PerformanceTests/Paint/color-changes.html [add] https://crrev.com/e500e8ba8aac6f63a94ba7a411b536f513d2270d/third_party/WebKit/PerformanceTests/Paint/paint-offset-changes.html [add] https://crrev.com/e500e8ba8aac6f63a94ba7a411b536f513d2270d/third_party/WebKit/PerformanceTests/Paint/transform-changes.html
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3a5ab90f66206a967a646707dbdacb92b57bccc5 commit 3a5ab90f66206a967a646707dbdacb92b57bccc5 Author: pdr <pdr@chromium.org> Date: Fri Nov 11 21:10:47 2016 Store paint properties directly on LayoutObject This patch removes the temporary map that was used to avoid changing the size of LayoutObject. This is in preparation for launching property trees. On profiles, the paint property map lookup is the hottest function when running the paint-offset-change benchmark. On blink.perf, this patch is a large improvement on all benchmarks[1]: color-changes.html: -3.78% large-table-background-change-with-invisible-collapsed-borders.html: -30.77% large-table-background-change-with-visible-collapsed-borders.html: 0% large-table-collapsed-border-change.html: -8.61% large-table-collapsed-border-change-with-backgrounds.html: -10.09% large-table-collapsed-border-change-with-text.html: -13.9% large-table-repaint.html: -14.28% paint-offset-changes.html: -5.05% transform-changes.html: -1.62% [1] tools/perf/run_benchmark blink_perf.paint --browser=content-shell-release --pageset-repeat=3 --extra-browser-args=--enable-slimming-paint-v2 BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2492073002 Cr-Commit-Position: refs/heads/master@{#431643} [modify] https://crrev.com/3a5ab90f66206a967a646707dbdacb92b57bccc5/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/3a5ab90f66206a967a646707dbdacb92b57bccc5/third_party/WebKit/Source/core/layout/LayoutObject.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/1f505949fff2006a80f3883f129c580cf423c67c commit 1f505949fff2006a80f3883f129c580cf423c67c Author: pdr <pdr@chromium.org> Date: Sat Nov 12 01:44:41 2016 Implement incremental paint property tree rebuilding This patch implements incremental paint property tree rebuilding based on an invalidation scheme similar to paint invalidation. When property- affecting values change we set FrameView/LayoutObject as needing a property tree update. At the moment all property node updates force the entire property subtree to be rebuilt, but TODOs have been added to add more granular updates. When no property invalidation occurs we still need to walk the property trees update the builder context, but we can re-use existing nodes instead of reconstructing them. An underinvalidation checking mechanism has been added for debug builds to catch cases where we miss a call to set an object as needing a property tree update. Design doc: https://docs.google.com/document/d/1_GkBfvameyhnLV7ODIRsOoTedQEG5liAcHwAxmwS-Vk/view Performance results on blink_perf.Paint[1]: color-changes.html: 0% large-table-background-change-with-invisible-collapsed-borders.html: -15.92% large-table-background-change-with-visible-collapsed-borders.html: -9.37% large-table-collapsed-border-change.html: -5.42% large-table-collapsed-border-change-with-backgrounds.html: 0% large-table-collapsed-border-change-with-text.html: -4.56% large-table-repaint.html: 0% paint-offset-changes.html: -2.68% transform-changes.html: -7.40% [1] tools/perf/run_benchmark blink_perf.paint --browser=content-shell-release --pageset-repeat=5 --extra-browser-args=--enable-slimming-paint-v2 BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2495893002 Cr-Commit-Position: refs/heads/master@{#431732} [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/BUILD.gn [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/frame/FrameView.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/BUILD.gn [add] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/FindPropertiesNeedingUpdate.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp [add] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.cpp [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/paint/ClipPaintPropertyNode.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h [modify] https://crrev.com/1f505949fff2006a80f3883f129c580cf423c67c/third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3797c08066b335c81847266d1f16dafc9b21e886 commit 3797c08066b335c81847266d1f16dafc9b21e886 Author: pdr <pdr@chromium.org> Date: Sat Nov 19 01:11:20 2016 Incrementally build main thread scrolling reasons [spv2] This patch re-implements the scroll property's main thread scrolling reasons so they can be built incrementally. Instead of propagating main thread scrolling reasons up the scroll property tree, we now calculate them when building each scroll node. With this change it is simple to invalidate and rebuild scroll properties when the main thread scrolling reasons change. This patch trades performance for simplicity. FrameView already maintains a set of LayoutObjects with background attachment fixed (a main thread scrolling trigger). For every scroll node we iterate over this set and check if any of the objects are descendants of the scrolling object. In the common case, the set is empty. This patch also cleans up ScrollPaintPropertyNode so it has a const parent pointer like all other paint property nodes. BUG= 664672 , 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2506353002 Cr-Commit-Position: refs/heads/master@{#433367} [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/frame/FrameView.h [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/platform/graphics/paint/GeometryMapperTest.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.cpp [modify] https://crrev.com/3797c08066b335c81847266d1f16dafc9b21e886/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/2459701934af4c8297ee26d351a1fbf9596c6bd5 commit 2459701934af4c8297ee26d351a1fbf9596c6bd5 Author: pdr <pdr@chromium.org> Date: Wed Nov 23 01:59:23 2016 Add flag for tracking descendant paint property updates This patch adds a flag for tracking whether a descendant needs a paint property update. When marking an object as needing a paint property update, we now set this flag for all ancestors. This flag will be used to stop the paint property update (and, prepaint tree walk) entirely if no descendant needs an update. This flag is similar to layout's |normalChildNeedsLayout| flag, and paint invalidation's |childShouldCheckForPaintInvalidation| flag. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2521613003 Cr-Commit-Position: refs/heads/master@{#434080} [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/2459701934af4c8297ee26d351a1fbf9596c6bd5/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3f4b3cca5da1170fc860d3008403c7997901f6f3 commit 3f4b3cca5da1170fc860d3008403c7997901f6f3 Author: pdr <pdr@chromium.org> Date: Thu Dec 01 03:40:47 2016 Use a create-or-update pattern for faster local border box property updates This patch switches to a create-or-update pattern for paint property updates of the local border box. This is a 6% improvement on large-table-collapsed-border-change-with-text [1]. [1] tools/perf/run_benchmark blink_perf.paint --browser=content-shell-release --pageset-repeat=5 --extra-browser-args=--enable-slimming-paint-v2 BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2538273002 Cr-Commit-Position: refs/heads/master@{#435546} [modify] https://crrev.com/3f4b3cca5da1170fc860d3008403c7997901f6f3/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h [modify] https://crrev.com/3f4b3cca5da1170fc860d3008403c7997901f6f3/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/6afc534ee0a973a25230fc5f6998ecfdbce781ee commit 6afc534ee0a973a25230fc5f6998ecfdbce781ee Author: pdr <pdr@chromium.org> Date: Thu Dec 01 19:58:49 2016 Early-out from the prepaint tree walk This patch stops the prepaint tree walk when no paint invalidation or paint property updates are needed. The three major changes are: 1) PaintPropertyTreeBuilder now detects when properties are added or removed and forces a paint property update for all descendants. This is needed because tree structure changes can cause descendant objects to reference new/different ancestors. 2) When stopping the prepaint tree walk due to throttled frames, paint invalidation and property update flags are no longer cleared. This allows subsequent prepaint tree walks to correctly invalidate subframes when they unthrottle. 3) PrePaintTreeWalk::walk(LayoutObject&...) exits early when possible. Design doc: https://docs.google.com/document/d/1_GkBfvameyhnLV7ODIRsOoTedQEG5liAcHwAxmwS-Vk/view Performance results on blink_perf.Paint[1]: color-changes.html: -3.4% large-table-background-change-with-invisible-collapsed-borders.html: -19.2% large-table-background-change-with-visible-collapsed-borders.html: -3.0% large-table-collapsed-border-change.html: -0.4% large-table-collapsed-border-change-with-backgrounds.html: -6.8% large-table-collapsed-border-change-with-text.html: -17.2% large-table-repaint.html: -6.0% paint-offset-changes.html: -4.7% transform-changes.html: -2.7% [1] tools/perf/run_benchmark blink_perf.paint --browser=content-shell-release --pageset-repeat=5 --extra-browser-args=--enable-slimming-paint-v2 BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2539693002 Cr-Commit-Position: refs/heads/master@{#435681} [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/frame/FrameView.h [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/FindPropertiesNeedingUpdate.h [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp [modify] https://crrev.com/6afc534ee0a973a25230fc5f6998ecfdbce781ee/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/96606ec518ebf57313b7a9cb692905da3ee76b27 commit 96606ec518ebf57313b7a9cb692905da3ee76b27 Author: pdr <pdr@chromium.org> Date: Fri Dec 02 17:40:11 2016 Improve property under-invalidation DCHECKs in FindPropertiesNeedingUpdate The DCHECKs in FindPropertiesNeedingUpdate.h correctly find cases of under-invalidation of paint properties, but the macro-based DCHECKs are difficult to read or take action on. This patch updates FindPropertiesNeedingUpdate to produce better DCHECK messages, as well as updating comments to make these messages actionable. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2546013002 Cr-Commit-Position: refs/heads/master@{#435967} [modify] https://crrev.com/96606ec518ebf57313b7a9cb692905da3ee76b27/third_party/WebKit/Source/core/paint/FindPropertiesNeedingUpdate.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/9e577367e4db4678012a625ebfc97b7403adf250 commit 9e577367e4db4678012a625ebfc97b7403adf250 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Fri Dec 02 23:31:09 2016 setNeedsPaintPropertyUpdate on FrameView contents size change This ensures that the bounds of scroll is updated. BUG= 645667 Review-Url: https://codereview.chromium.org/2545093002 Cr-Commit-Position: refs/heads/master@{#436077} [modify] https://crrev.com/9e577367e4db4678012a625ebfc97b7403adf250/third_party/WebKit/Source/core/frame/FrameView.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/616a356b1d2cc22cbbc36e093389841438280750 commit 616a356b1d2cc22cbbc36e093389841438280750 Author: pdr <pdr@chromium.org> Date: Wed Dec 07 06:24:55 2016 Invalidate paint properties on paint offset changes Paint invalidation was (re)used to catch paint offset changes in order to trigger paint property tree updates. This patch starts tracking paint offset changes for paint property updates, independent of paint invalidation. The paint invalidation flags for paint offset changes could be set for many reasons, and this approach causes fewer paint property updates. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2529293012 Cr-Commit-Position: refs/heads/master@{#436878} [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/LayoutBlock.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/LayoutBox.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.h [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/svg/LayoutSVGTransformableContainer.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/616a356b1d2cc22cbbc36e093389841438280750/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/d5d67a1f347faf6507e269d49b04da11e3913d5d commit d5d67a1f347faf6507e269d49b04da11e3913d5d Author: yhirano <yhirano@chromium.org> Date: Fri Dec 09 08:12:24 2016 Mark some virtual/spinvalidation/paint tests as failing BUG= 645667 NOTRY=true TBR=asargent@chromium.org, grt@chromium.org, vasilii@chromium.org Review-Url: https://codereview.chromium.org/2560143002 Cr-Commit-Position: refs/heads/master@{#437494} [modify] https://crrev.com/d5d67a1f347faf6507e269d49b04da11e3913d5d/third_party/WebKit/LayoutTests/TestExpectations
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/d798a7a82ead340d6206380d64e310c222416e62 commit d798a7a82ead340d6206380d64e310c222416e62 Author: pdr <pdr@chromium.org> Date: Tue Dec 13 02:35:45 2016 Add support for caching and invalidating SVG marker transforms This patch adds a cache of the SVG marker transform, similar to the pattern used in LayoutSVGViewportContainer. This should be a small perf win because we no longer re-calculate the transform when painting each marker instance. With this new cache logic, invalidation logic has been added which includes a fix for paint property under-invalidation (marker-viewBox-changes.svg). BUG= 645667 , 600618 Review-Url: https://codereview.chromium.org/2565943002 Cr-Commit-Position: refs/heads/master@{#437993} [modify] https://crrev.com/d798a7a82ead340d6206380d64e310c222416e62/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/d798a7a82ead340d6206380d64e310c222416e62/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp [modify] https://crrev.com/d798a7a82ead340d6206380d64e310c222416e62/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.h [modify] https://crrev.com/d798a7a82ead340d6206380d64e310c222416e62/third_party/WebKit/Source/core/svg/SVGMarkerElement.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c commit 1ea99b023ae5c0d7a421b2e308fa910aa6bd107c Author: wangxianzhu <wangxianzhu@chromium.org> Date: Tue Dec 13 05:44:00 2016 [SPInvalidation] Update paint properties on css clip change Add StyleDifference::needsPaintPropertyUpdate() to indicate a style change directly needs paint property update, and set the flag on changes of css clip, transform, etc. Move two tests from their original directory into paint/invalidation. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2570463004 Cr-Commit-Position: refs/heads/master@{#438068} [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/TestExpectations [delete] https://crrev.com/67cb47ca97220d46c56d9c4ab7619753e4f2dd56/third_party/WebKit/LayoutTests/compositing/layer-creation/iframe-clip-removed.html [add] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/absolute-to-static-with-clip-expected.html [add] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/absolute-to-static-with-clip.html [rename] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clip-change-expected.png [rename] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clip-change-expected.txt [rename] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clip-change.html [rename] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/iframe-clip-removed-expected.html [add] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/iframe-clip-removed.html [add] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/static-to-absolute-with-clip-expected.html [add] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/LayoutTests/paint/invalidation/compositing/static-to-absolute-with-clip.html [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/style/ComputedStyle.cpp [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/style/ComputedStyle.h [modify] https://crrev.com/1ea99b023ae5c0d7a421b2e308fa910aa6bd107c/third_party/WebKit/Source/core/style/StyleDifference.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/60965ced99bdf9522cf55c0fbbe83bda653ae085 commit 60965ced99bdf9522cf55c0fbbe83bda653ae085 Author: pdr <pdr@chromium.org> Date: Wed Dec 14 00:06:59 2016 Remove LayoutSVGViewportContainer's calcViewport and pointIsInsideViewportClip This patch removes some subclass knowledge about viewport containers from LayoutSVGContainer. LayoutSVGViewportContainer::calcViewport has been moved into LayoutSVGViewportContainer::updateLocalTransform. Similarly, LayoutSVGViewportContainer::pointIsInsideViewportClip has been removed in favor of implementing viewport clip logic in LayoutSVGViewportContainer. The unneeded LayoutSVGViewportContainer::paint override has also been removed. BUG= 645667 Review-Url: https://codereview.chromium.org/2573653003 Cr-Commit-Position: refs/heads/master@{#438349} [modify] https://crrev.com/60965ced99bdf9522cf55c0fbbe83bda653ae085/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp [modify] https://crrev.com/60965ced99bdf9522cf55c0fbbe83bda653ae085/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.h [modify] https://crrev.com/60965ced99bdf9522cf55c0fbbe83bda653ae085/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp [modify] https://crrev.com/60965ced99bdf9522cf55c0fbbe83bda653ae085/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.h [modify] https://crrev.com/60965ced99bdf9522cf55c0fbbe83bda653ae085/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/50cac7d971b73cc8386c98d0f6a83871d417a15c commit 50cac7d971b73cc8386c98d0f6a83871d417a15c Author: wangxianzhu <wangxianzhu@chromium.org> Date: Wed Dec 14 04:16:19 2016 [SPInvalidation] Update paint properties when border radii change BUG= 645667 TEST=virtual/spinvalidation/compositing/overflow/scroller-with-border-radius.html CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2573963002 Cr-Commit-Position: refs/heads/master@{#438427} [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/Source/core/layout/LayoutBox.cpp [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/Source/core/layout/LayoutBox.h [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.h [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/50cac7d971b73cc8386c98d0f6a83871d417a15c/third_party/WebKit/Source/core/style/BorderData.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e0f6787cf951fe2ba1895c2e1a68cb398da938fa commit e0f6787cf951fe2ba1895c2e1a68cb398da938fa Author: wangxianzhu <wangxianzhu@chromium.org> Date: Wed Dec 14 23:24:59 2016 Remove StyleDifference::needsPaintPropertyUpdate() After looked into several paint property update issues, I feel that the flag has little use. Most of situations needing paint property update can't be derived from only style difference. It seems better to keep needsPaintPropertyUpdate in layout and paint modules. BUG= 645667 Review-Url: https://codereview.chromium.org/2571283002 Cr-Commit-Position: refs/heads/master@{#438670} [modify] https://crrev.com/e0f6787cf951fe2ba1895c2e1a68cb398da938fa/third_party/WebKit/Source/core/layout/LayoutObject.cpp [modify] https://crrev.com/e0f6787cf951fe2ba1895c2e1a68cb398da938fa/third_party/WebKit/Source/core/style/ComputedStyle.cpp [modify] https://crrev.com/e0f6787cf951fe2ba1895c2e1a68cb398da938fa/third_party/WebKit/Source/core/style/ComputedStyle.h [modify] https://crrev.com/e0f6787cf951fe2ba1895c2e1a68cb398da938fa/third_party/WebKit/Source/core/style/StyleDifference.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/d4d7aff504d23a7fd6462d2ecf51b2722545edb5 commit d4d7aff504d23a7fd6462d2ecf51b2722545edb5 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Thu Dec 15 01:29:34 2016 [SPInvalidation] Update paint properties when layer or paintsWithTransform status change BUG= 645667 TEST=virtual/spinvalidation/fast/dynamic/static-to-relative-with-absolute-child.html etc. CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2574293003 Cr-Commit-Position: refs/heads/master@{#438704} [modify] https://crrev.com/d4d7aff504d23a7fd6462d2ecf51b2722545edb5/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/d4d7aff504d23a7fd6462d2ecf51b2722545edb5/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp [modify] https://crrev.com/d4d7aff504d23a7fd6462d2ecf51b2722545edb5/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/174b75c4971ebe89bf055b824c9c5ef0d5a75aee commit 174b75c4971ebe89bf055b824c9c5ef0d5a75aee Author: pdr <pdr@chromium.org> Date: Thu Dec 15 16:13:22 2016 Unify animate motion transform update invalidations SVGAnimateMotionElement changes transforms in 3 locations but does not notify the targets of transform updates in a unified way. For example, target->setNeedsTransformUpdate is called when the transform changes but the target is not marked for layout until applyResultsToTarget. This patch unifies these invalidations to always occur when the tranform is updated. The previous code dates back to http://wkbug.com/41249. BUG= 645667 Review-Url: https://codereview.chromium.org/2578913002 Cr-Commit-Position: refs/heads/master@{#438841} [modify] https://crrev.com/174b75c4971ebe89bf055b824c9c5ef0d5a75aee/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp [modify] https://crrev.com/174b75c4971ebe89bf055b824c9c5ef0d5a75aee/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ffda6c623afe21459d860a11130b37d19479296e commit ffda6c623afe21459d860a11130b37d19479296e Author: wangxianzhu <wangxianzhu@chromium.org> Date: Thu Dec 15 20:14:18 2016 [SPInvalidation] Invalidate all paint and properties for printing Previously we recursively call setShouldDoFullPaintInvalidation() on all objects of the views entering/exiting print mode. For SPInvalidation we also need to rebuild all paint properties. Use a flag on FrameView to indicate it has just entered or exited printing mode. Invalidate paint and update paint properties of the whole tree if the flag is set during PrePaintTreeWalk. BUG= 645667 TEST=virtual/spinvalidation/printing/overflow-auto.html CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2575653002 Cr-Commit-Position: refs/heads/master@{#438906} [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/LayoutTests/VirtualTestSuites [add] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/LayoutTests/virtual/spinvalidation/printing/README.txt [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/frame/FrameView.h [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/frame/LocalFrame.cpp [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/layout/LayoutView.cpp [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/paint/PaintInvalidator.h [modify] https://crrev.com/ffda6c623afe21459d860a11130b37d19479296e/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/cf47f9aef168366be06e398aa28b697303fd90ed commit cf47f9aef168366be06e398aa28b697303fd90ed Author: pdr <pdr@chromium.org> Date: Thu Dec 15 20:42:52 2016 Update paint properties on animate motion transform updates This patch updates SVGAnimateMotionElement so that changes to the animate motion transform call setNeedsPaintPropertyUpdate. A followup patch will unify the behavior of the setNeedsTransformUpdate() calls. With this patch and --enable-blink-features=SlimmingPaintInvalidation, new tests pass: svg/animations/animateMotion-fill-freeze.html svg/animations/animateMotion-fill-remove.html svg/animations/animateMotion_changingPath.html +7 more BUG= 645667 Review-Url: https://codereview.chromium.org/2577993003 Cr-Commit-Position: refs/heads/master@{#438915} [modify] https://crrev.com/cf47f9aef168366be06e398aa28b697303fd90ed/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/7896f0f683f503acd6bcb05efd90644f11266128 commit 7896f0f683f503acd6bcb05efd90644f11266128 Author: pdr <pdr@chromium.org> Date: Fri Dec 16 07:04:25 2016 Update paint property subtrees on paint offset changes Many paint properties depend on piant offset but paint offset changes currently only cause a local paint property update. The paint invalidation system ensures the prepaint tree walk is not stopped so this doesn't result in a bug today. This patch will prevent paint offset changes from being missed in the future. This patch also moves the paint offset check to PaintPropertyTreeBuilder. Additionally, localContext has been renamed context to improve readability. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2578393002 Cr-Commit-Position: refs/heads/master@{#439055} [modify] https://crrev.com/7896f0f683f503acd6bcb05efd90644f11266128/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/7896f0f683f503acd6bcb05efd90644f11266128/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h [modify] https://crrev.com/7896f0f683f503acd6bcb05efd90644f11266128/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/f70b47902bd95e111862265afa513926d777fd20 commit f70b47902bd95e111862265afa513926d777fd20 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Fri Dec 16 21:39:01 2016 [SPInvaldation] Update subtree paint properties when a layout subtree is inserted Add LayoutObject::subtreeNeedsPaintPropertyUpdate() and set it in LayoutObjectChildList::addChild() to force paint property update of the whole subtree. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2585603002 Cr-Commit-Position: refs/heads/master@{#439193} [modify] https://crrev.com/f70b47902bd95e111862265afa513926d777fd20/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/f70b47902bd95e111862265afa513926d777fd20/third_party/WebKit/Source/core/layout/LayoutObject.h [modify] https://crrev.com/f70b47902bd95e111862265afa513926d777fd20/third_party/WebKit/Source/core/layout/LayoutObjectChildList.cpp [modify] https://crrev.com/f70b47902bd95e111862265afa513926d777fd20/third_party/WebKit/Source/core/paint/FindPropertiesNeedingUpdate.h [modify] https://crrev.com/f70b47902bd95e111862265afa513926d777fd20/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/1748a4cf3fb64dac6d739f61892711d209530ccf commit 1748a4cf3fb64dac6d739f61892711d209530ccf Author: pdr <pdr@chromium.org> Date: Sat Dec 17 04:24:14 2016 Update paint properties on FrameView visibility changes When a FrameView becomes hidden, we need to update scroll paint properties to ensure scrollability based on hit testing is accounted for. This patch fixes the FrameView-specific bug. https://crbug.com/675296 has been filed to address stale scrollability values which is a remaining bug for LayoutView. TEST=scrollingcoordinator/non-fast-scrollable-visibility-change.html with --additional-driver-flag=--enable-slimming-paint-invalidation BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2579363003 Cr-Commit-Position: refs/heads/master@{#439317} [modify] https://crrev.com/1748a4cf3fb64dac6d739f61892711d209530ccf/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/1748a4cf3fb64dac6d739f61892711d209530ccf/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3446d1745a09854682d54031e433429d68589fce commit 3446d1745a09854682d54031e433429d68589fce Author: wangxianzhu <wangxianzhu@chromium.org> Date: Sat Dec 17 04:35:47 2016 [SPInvalidation] Update paint properties on perspective etc. change BUG= 645667 TEST=virtual/spinvalidation/paint/invalidation/perspective.html CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2580713005 Cr-Commit-Position: refs/heads/master@{#439319} [modify] https://crrev.com/3446d1745a09854682d54031e433429d68589fce/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp [modify] https://crrev.com/3446d1745a09854682d54031e433429d68589fce/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [delete] https://crrev.com/ec33688c7d81592695a5ecc92b198d6883d2a39f/third_party/WebKit/Source/core/paint/test_data/perspective.html [modify] https://crrev.com/3446d1745a09854682d54031e433429d68589fce/third_party/WebKit/Source/core/style/ComputedStyle.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010 commit 828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Sat Dec 17 06:14:47 2016 [SPInvalidation] Update paint properties when SVG resource change BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2581243003 Cr-Commit-Position: refs/heads/master@{#439329} [modify] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/LayoutTests/TestExpectations [modify] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/LayoutTests/VirtualTestSuites [add] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/LayoutTests/svg/filters/filter-reference-rename-expected.html [add] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/LayoutTests/svg/filters/filter-reference-rename.html [add] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/LayoutTests/virtual/spinvalidation/css3/README.txt [modify] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp [modify] https://crrev.com/828836bbf1f4c4e0c4f5ffbe5d4c47058f4f5010/third_party/WebKit/Source/core/paint/PaintLayerResourceInfo.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/72f6a832d5b791d8a15b3ee9b722cfa2ea3dd589 commit 72f6a832d5b791d8a15b3ee9b722cfa2ea3dd589 Author: pdr <pdr@chromium.org> Date: Mon Dec 19 23:44:05 2016 Improve documentation of ObjectPaintProperties This patch adds a new class-level comment to ObjectPaintProperties. A long implementation note about the clear and update functions has also been added, and the existing copy pasta comments have been removed. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2583063003 Cr-Commit-Position: refs/heads/master@{#439616} [modify] https://crrev.com/72f6a832d5b791d8a15b3ee9b722cfa2ea3dd589/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/bc41eea2096c3353d589c4325feba9e150742e1e commit bc41eea2096c3353d589c4325feba9e150742e1e Author: pdr <pdr@chromium.org> Date: Tue Dec 20 04:56:52 2016 Split paint property update tests out of PaintPropertyTreeBuilderTest PaintPropertyTreeBuilderTest is over 3.5k lines long which is becoming unwieldy. This patch splits out the incremental update tests. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2589003002 Cr-Commit-Position: refs/heads/master@{#439712} [modify] https://crrev.com/bc41eea2096c3353d589c4325feba9e150742e1e/third_party/WebKit/Source/core/BUILD.gn [modify] https://crrev.com/bc41eea2096c3353d589c4325feba9e150742e1e/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp [add] https://crrev.com/bc41eea2096c3353d589c4325feba9e150742e1e/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.h [add] https://crrev.com/bc41eea2096c3353d589c4325feba9e150742e1e/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/bf16f458a95911305740fc0310ebf3cd00830c91 commit bf16f458a95911305740fc0310ebf3cd00830c91 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Thu Dec 22 02:06:16 2016 [SPInvalidation] Update paint properties when full screen status changes BUG= 645667 TEST=imported/wpt/fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html with --enable-slimming-paint-invalidation CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2599573002 Cr-Commit-Position: refs/heads/master@{#440312} [modify] https://crrev.com/bf16f458a95911305740fc0310ebf3cd00830c91/third_party/WebKit/Source/core/dom/Fullscreen.cpp [modify] https://crrev.com/bf16f458a95911305740fc0310ebf3cd00830c91/third_party/WebKit/Source/core/frame/FrameView.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/700fe29521a77a433f07b85fda61a35609c46cf2 commit 700fe29521a77a433f07b85fda61a35609c46cf2 Author: pdr <pdr@chromium.org> Date: Thu Dec 22 16:47:34 2016 Update transform paint property's transform-offset on element size changes If a transform (or motion path) and transform-origin are present, an object's transform paint property can depend on the object's size. This patch has two changes to support changing transform-origin values: 1) transform-origin is only created if it will be used. For example, the origin will be zero if just will-change has created a transform paint property. 2) When an object's size changes and it has a transform that could depend on the paint offset, the paint properties are marked as needing an update. BUG= 645667 TEST=fast/events/touch/touch-rect-assert-first-layer-special.html with --enable-slimming-paint-invalidation CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2598923002 Cr-Commit-Position: refs/heads/master@{#440439} [modify] https://crrev.com/700fe29521a77a433f07b85fda61a35609c46cf2/third_party/WebKit/Source/core/layout/LayoutBox.cpp [modify] https://crrev.com/700fe29521a77a433f07b85fda61a35609c46cf2/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/700fe29521a77a433f07b85fda61a35609c46cf2/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1 commit 51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Thu Dec 22 21:27:54 2016 Use LayoutObject::subtreeNeedsPaintPropertyUpdate for printing invalidation This changes the https://codereview.chromium.org/2575653002/ method to using https://codereview.chromium.org/2585603002/ to achieve the same goal: updating all paint properties before/after printing. BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2583733003 Cr-Commit-Position: refs/heads/master@{#440507} [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/frame/FrameView.h [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/frame/LocalFrame.cpp [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/layout/LayoutView.cpp [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/paint/PaintInvalidator.h [modify] https://crrev.com/51ae241c5504c2f9ec1fbb5e8e8039b1f2ad07d1/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/fc7eae11d98828abba746ba86a96ee9fc83a1741 commit fc7eae11d98828abba746ba86a96ee9fc83a1741 Author: pdr <pdr@chromium.org> Date: Fri Dec 23 01:03:15 2016 Update perspective paint properties on perspective-origin changes This patch fixes under-invalidation when perspective-origin changes due to an object's size changing (similar to [1]). This patch also updates the comment added in [1] to note that we only need to invalidate if relative lengths are used. [1] https://crrev.com/700fe29521a77a433f07b85fda61a35609c46cf2 BUG= 645667 CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Review-Url: https://codereview.chromium.org/2602453002 Cr-Commit-Position: refs/heads/master@{#440568} [modify] https://crrev.com/fc7eae11d98828abba746ba86a96ee9fc83a1741/third_party/WebKit/Source/core/layout/LayoutBox.cpp [modify] https://crrev.com/fc7eae11d98828abba746ba86a96ee9fc83a1741/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp [modify] https://crrev.com/fc7eae11d98828abba746ba86a96ee9fc83a1741/third_party/WebKit/Source/core/paint/PaintPropertyTreeUpdateTests.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e959acf29a4e4c3c3714d07151d025b4f6fc52d1 commit e959acf29a4e4c3c3714d07151d025b4f6fc52d1 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Tue Dec 27 20:45:33 2016 Remove failure expectations of passing virtual/spinvalidation tests The failures have been fixed by previous changes for bug 645667 , but we forgot to remove the failure expectations. BUG= 645667 TBR=chrishtr@chromium.org Review-Url: https://codereview.chromium.org/2601813002 Cr-Commit-Position: refs/heads/master@{#440783} [modify] https://crrev.com/e959acf29a4e4c3c3714d07151d025b4f6fc52d1/third_party/WebKit/LayoutTests/TestExpectations
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/808b82b21b46ce5ee742e1eb813ba8890fe7f6ea commit 808b82b21b46ce5ee742e1eb813ba8890fe7f6ea Author: wangxianzhu <wangxianzhu@chromium.org> Date: Wed Dec 28 02:20:44 2016 [SPInvalidation] Call layoutView->setNeedsPaintPropertyUpdate in FrameView::setNeedsPaintPropertyUpdate() when RLS is enabled BUG= 645667 TEST=Many test cases in webkit_unit_tests with RLS enabled with --enable-slimming-paint-invalidation Review-Url: https://codereview.chromium.org/2603703002 Cr-Commit-Position: refs/heads/master@{#440821} [modify] https://crrev.com/808b82b21b46ce5ee742e1eb813ba8890fe7f6ea/third_party/WebKit/Source/core/frame/FrameView.cpp
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/f1ebd4aac27a8b10650afd19f28fef936143ced6 commit f1ebd4aac27a8b10650afd19f28fef936143ced6 Author: wangxianzhu <wangxianzhu@chromium.org> Date: Wed Dec 28 02:27:36 2016 [SPInvalidation] Update paint properties of frame subtree when unthrottled BUG= 645667 TEST=FrameThrottlingTest.MutatingThrottledFrameDoesNotCauseAnimation etc. with --enable-slimming-paint-invalidation Review-Url: https://codereview.chromium.org/2598073003 Cr-Commit-Position: refs/heads/master@{#440823} [modify] https://crrev.com/f1ebd4aac27a8b10650afd19f28fef936143ced6/third_party/WebKit/Source/core/frame/FrameView.cpp [modify] https://crrev.com/f1ebd4aac27a8b10650afd19f28fef936143ced6/third_party/WebKit/Source/web/tests/FrameThrottlingTest.cpp
Comment 1 by chrishtr@chromium.org
, Sep 9 2016