New issue
Advanced search Search tips

Issue 645667 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Feb 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Feature

Blocked on:
issue 674623
issue 677239
issue 677241

Blocking:
issue 471333



Sign in to add a comment

Design and implement partial paint property tree update

Project Member Reported by chrishtr@chromium.org, Sep 9 2016

Issue description

Labels: -Type-Bug Type-Feature
The obvious use case is improving performance.

One additional use case: implementing detection of clipping changes to invalidate
cached paint subsequences.
Cc: pdr@chromium.org
Labels: -Pri-3 Pri-2
Owner: wangxianzhu@chromium.org
Cc: -pdr@chromium.org wangxianzhu@chromium.org
Owner: pdr@chromium.org
pdr@ has started the work.
Project Member

Comment 5 by bugdroid1@chromium.org, Oct 19 2016

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

Project Member

Comment 6 by bugdroid1@chromium.org, Oct 19 2016

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

Project Member

Comment 7 by bugdroid1@chromium.org, Oct 25 2016

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

Project Member

Comment 8 by bugdroid1@chromium.org, Oct 25 2016

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

Comment 9 by pdr@chromium.org, Oct 27 2016

Description: Show this description
Project Member

Comment 10 by bugdroid1@chromium.org, Oct 29 2016

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

Project Member

Comment 11 by bugdroid1@chromium.org, Nov 2 2016

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

Project Member

Comment 12 by bugdroid1@chromium.org, Nov 9 2016

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

Project Member

Comment 13 by bugdroid1@chromium.org, Nov 11 2016

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

Project Member

Comment 14 by bugdroid1@chromium.org, Nov 12 2016

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

Project Member

Comment 15 by bugdroid1@chromium.org, Nov 19 2016

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

Project Member

Comment 16 by bugdroid1@chromium.org, Nov 23 2016

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

Project Member

Comment 17 by bugdroid1@chromium.org, Dec 1 2016

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

Project Member

Comment 18 by bugdroid1@chromium.org, Dec 1 2016

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

Project Member

Comment 19 by bugdroid1@chromium.org, Dec 2 2016

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

Project Member

Comment 20 by bugdroid1@chromium.org, Dec 2 2016

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

Project Member

Comment 21 by bugdroid1@chromium.org, Dec 7 2016

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

Project Member

Comment 22 by bugdroid1@chromium.org, Dec 9 2016

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

Project Member

Comment 23 by bugdroid1@chromium.org, Dec 13 2016

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

Project Member

Comment 24 by bugdroid1@chromium.org, Dec 13 2016

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

Project Member

Comment 25 by bugdroid1@chromium.org, Dec 14 2016

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

Project Member

Comment 27 by bugdroid1@chromium.org, Dec 14 2016

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

Project Member

Comment 28 by bugdroid1@chromium.org, Dec 15 2016

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

Project Member

Comment 29 by bugdroid1@chromium.org, Dec 15 2016

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

Blockedon: 674623
Project Member

Comment 31 by bugdroid1@chromium.org, Dec 15 2016

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

Project Member

Comment 32 by bugdroid1@chromium.org, Dec 15 2016

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

Project Member

Comment 33 by bugdroid1@chromium.org, Dec 16 2016

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

Project Member

Comment 34 by bugdroid1@chromium.org, Dec 16 2016

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

Project Member

Comment 35 by bugdroid1@chromium.org, Dec 17 2016

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

Project Member

Comment 37 by bugdroid1@chromium.org, Dec 17 2016

Project Member

Comment 38 by bugdroid1@chromium.org, Dec 19 2016

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

Project Member

Comment 39 by bugdroid1@chromium.org, Dec 20 2016

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

Project Member

Comment 40 by bugdroid1@chromium.org, Dec 22 2016

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

Project Member

Comment 41 by bugdroid1@chromium.org, Dec 22 2016

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

Project Member

Comment 42 by bugdroid1@chromium.org, Dec 22 2016

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

Project Member

Comment 43 by bugdroid1@chromium.org, Dec 23 2016

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

Project Member

Comment 44 by bugdroid1@chromium.org, Dec 27 2016

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

Project Member

Comment 45 by bugdroid1@chromium.org, Dec 28 2016

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

Project Member

Comment 46 by bugdroid1@chromium.org, Dec 28 2016

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

Blockedon: 677239
Blockedon: 677241

Comment 49 by pdr@chromium.org, Feb 7 2017

Status: Fixed (was: Assigned)

Sign in to add a comment