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

Issue 591199 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: May 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Feature

Blocked on:
issue 593525

Blocking:
issue 596983



Sign in to add a comment

New paint invalidation for slimming paint v1

Project Member Reported by wangxianzhu@chromium.org, Mar 1 2016

Issue description

Fix current paint invalidation issues using the tree walker in PaintPropertyTreeBuilder which can handle special cases of paint ordering correctly. Enable it before slimming paint v2 to make it stable earlier.
 
Labels: -Type-Bug Type-Feature
Project Member

Comment 2 by bugdroid1@chromium.org, Mar 2 2016

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

commit 9200103f3f0c21d9bd88c669159a43097ba185ed
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Wed Mar 02 03:38:30 2016

Remove old paint offset caching code

This is preparation to implement new paint invalidation for SPv1
(slimmingPaintInvalidation).

BUG= 591199 

Review URL: https://codereview.chromium.org/1755853002

Cr-Commit-Position: refs/heads/master@{#378674}

[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/layout/LayoutBox.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/BlockPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/BoxPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/DetailsMarkerPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/EmbeddedObjectPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/FileUploadControlPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/FramePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/FrameSetPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/HTMLCanvasPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ImagePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/InlinePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/LayerClipRecorderTest.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorderTest.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ListMarkerPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/MultiColumnSetPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ObjectPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/PaintControllerPaintTest.h
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/PartPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ReplacedPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGClipPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGImagePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGMaskPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGRootInlineBoxPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/SVGShapePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/TablePainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/VideoPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/core/paint/ViewPainter.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/platform/graphics/paint/DrawingRecorder.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
[modify] https://crrev.com/9200103f3f0c21d9bd88c669159a43097ba185ed/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp

Blockedon: 593525
Project Member

Comment 5 by bugdroid1@chromium.org, Mar 12 2016

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

commit df97b1c6526b25450d767b2098c8ee1c3d124b95
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Sat Mar 12 04:58:42 2016

Fix paint invalidation of paintInvalidationContainer itself

LayoutBlock::invalidatePaintOfSubtreesIfNeeded() has a condition.
paintInvalidationContainerForChild != childPaintInvalidationState.paintInvalidationContainer()
to use the ForceHorriblySlowRectMapping path in case that the
PaintInvalidationState fails to get the correct paintInvalidationContainer.

However, the childPaintInvalidationState actually contains the parent
paintInvalidationContainer if the current object itself is a
paintInvalidationContainer so the above condition is false for
out-of-flow-positioned composited objects, and will use the
ForceHorriblySlowRectMapping path for paint invalidation of the subtree.

Also LayoutBox::mapToVisibleRectInAncestorSpace() depends on the fact
that paintInvalidationState contains parent paintInvalidationContainer
if the current object itself is a paintInvalidationContainer. To avoid
the dependency we should check 'ancestor == this' before checking
PaintInvalidationState.

BUG= 371485 , 591199 

Review URL: https://codereview.chromium.org/1786513002

Cr-Commit-Position: refs/heads/master@{#380865}

[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/LayoutBox.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/LayoutInline.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp
[modify] https://crrev.com/df97b1c6526b25450d767b2098c8ee1c3d124b95/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp

Project Member

Comment 6 by bugdroid1@chromium.org, Mar 18 2016

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

commit 468ca56ab508342df50c7ee16ac4f4e767a1614b
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Fri Mar 18 02:37:32 2016

Avoid paintInvalidationContainer parameter of invalidatePaintIfNeeded()

Change the original flow:
  invalidateTreeIfNeeded(parentPaintInvalidationState)
  {
    newPaintInvalidationContainer = ...;
    invalidatePaintIfNeeded(parentPaintInvalidationState, newPaintInvalidationContainer);
    PaintInvalidationState childPaintInvalidationState(parentPaintInvalidationState);
    invalidatePaintOfSubtreesIfNeeded(childPaintinvalidationState);
  }

to:
  invalidateTreeIfNeeded(parentPaintInvalidationState)
  {
    newPaintInvalidationState(parentPaintInvalidationState); // Which updates paintInvalidationContainer, but not geometry info for children.
    invalidatePaintIfNeeded(newPaintInvalidationState);
    newPaintInvalidationState.updatePaintOffsetAndClipForChildren();
    invalidatePaintOfSubtreesIfNeeded(newPaintInvalidationState);
  }

This is like how PaintPropertyTreeBuilderContexts are inherited and updated:
copy from parent first, then update in multiple steps. We may use the state
for different purposes after different steps.

The benefits are:
- Avoid additional paintInvalidationContainer in invalidatePaintIfNeeded()
  by letting paintInvalidationState parameter contain the correct
  paintInvalidationContainer for the current object;
- We move the logic to find the paintInvalidationContainer from LayoutObjects
  into PaintInvalidationState which knows more information;
- This is a preparation for the next step works to avoid some
  ForcedHorriblySlowRectMappings because we need to track correct
  paintInvalidationContainer (for normal objects and stacked objects) in
  PaintInvalidationState, instead of being passed in from
  LayoutBoxModelObject::invalidateTreeIfNeeded();

BUG= 591199 

Review URL: https://codereview.chromium.org/1804963005

Cr-Commit-Position: refs/heads/master@{#381875}

[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/frame/FrameView.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBlock.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBox.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutHTMLCanvas.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutHTMLCanvas.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutMultiColumnSpannerPlaceholder.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutMultiColumnSpannerPlaceholder.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutPart.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutPart.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutTable.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/LayoutView.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGModelObject.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGModelObject.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.h
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
[modify] https://crrev.com/468ca56ab508342df50c7ee16ac4f4e767a1614b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.h

Blocking: 596983
Project Member

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

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

commit 00f5ed05ee71a29e5418e0c4704bcafceb40ecf4
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Fri Mar 25 18:38:51 2016

Rename PaintLayer::mapXXXToPaintBackingCoordinates() to mapXXXInPaintInvalidationContainerToBacking

BUG= 591199 

Review URL: https://codereview.chromium.org/1829353004

Cr-Commit-Position: refs/heads/master@{#383321}

[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/layout/LayoutText.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/core/testing/Internals.cpp
[modify] https://crrev.com/00f5ed05ee71a29e5418e0c4704bcafceb40ecf4/third_party/WebKit/Source/web/LinkHighlightImpl.cpp

Project Member

Comment 9 by bugdroid1@chromium.org, Mar 25 2016

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

commit a17fa727d64fb2a5cd12269e033a3a903641eab5
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Fri Mar 25 20:34:36 2016

LayoutObject::localOverflowRectForPaintInvalidation() and localSelectionRect()

They replace some original implementations of
clippedOverflowRectForPaintInvalidation() and
selectionRectForPaintInvalidation(), so that the implementations don't
need to map to backing by themselves.

BUG= 591199 

Review URL: https://codereview.chromium.org/1837533002

Cr-Commit-Position: refs/heads/master@{#383345}

[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutBR.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutBR.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutBox.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutBox.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutInline.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutInline.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutListMarker.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutReplaced.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutTableCell.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutTableCol.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutTableCol.h
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutText.cpp
[modify] https://crrev.com/a17fa727d64fb2a5cd12269e033a3a903641eab5/third_party/WebKit/Source/core/layout/LayoutText.h

Project Member

Comment 10 by bugdroid1@chromium.org, Mar 26 2016

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

commit 934f67a68da2054e526e13648c5452e2cf79c211
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Sat Mar 26 01:09:36 2016

Move all fast-path paint invalidation mapping into PaintInvalidationState

- Remove the optional const PaintInvalidationState* parameter from paint
  invalidation mapping methods and move fast-path mapping code into
  PaintInvalidationState.

- PaintLayer::computePaintInvalidationRect() is now
    PaintInvalidationState::computePaintInvalidationRectInBacking();
  PaintLayer::positionFromPaintInvalidationBacking() is now
    PaintInvalidationState::positionFromPaintInvalidationBacking();
  PaintLayer::mapRectToPaintInvalidationBacking() is now
    PaintInvalidationState::mapLocalRectToPaintInvalidationBacking().

- Change LayoutObject::clippedOverflowRectForPaintInvalidationBacking() to:
  * Non-SVG objects and LayoutSVGRoot:
    LayoutObject::localOverflowRectForPaintInvalidation() which doesn't
    map the rect to paint invalidation backing;
  * SVG objects except LayoutSVGRoot:
    Using existing paintInvalidationRectInLocalSVGCoordinates()

  PaintInvalidationState::computePaintInvalidationRectInBacking(),
  calls the above functions to get the local paint invalidation rect,
  and map to paintInvalidationContainer using fast path if possible,
  or slow path by calling LayoutObject::mapToVisibleRectToAncestor().

- Let selection paint invalidation go through fast-path if possible.

BUG= 591199 

Review URL: https://codereview.chromium.org/1813383002

Cr-Commit-Position: refs/heads/master@{#383430}

[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/LayoutTests/TestExpectations
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/frame/FrameView.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutBox.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutBox.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutFlowThread.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutFlowThread.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutInline.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutInline.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutMultiColumnSpannerPlaceholder.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutMultiColumnSpannerPlaceholder.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutPart.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutTableCell.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/LayoutView.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGGradientStop.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGHiddenContainer.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGModelObject.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGModelObject.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/paint/PaintLayer.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/paint/PaintLayer.h
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/paint/SVGContainerPainter.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/core/testing/Internals.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
[modify] https://crrev.com/934f67a68da2054e526e13648c5452e2cf79c211/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp

Project Member

Comment 12 by bugdroid1@chromium.org, Apr 4 2016

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

commit bf7dc636b3ed84582375d2cebe613ffaf1c00794
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Mon Apr 04 23:52:56 2016

Remove ForceHorriblySlowRectMapping

Change paint invalidation tree walk to DOM-order instead of containing-
block order for out-of-flow positioned objects so that we can track
paint invalidation container and paint offset for them correctly without
forcing slow mapping if possible.

Move some cases to fast path:
- Absolute-position objects (except the slow-path cases):
  track paint offset etc separately for them.
  See stacked objects for paint invalidation container tracking.
- Stacked objects (including absolute-position objects): track paint
  invalidation container separately for them.

Still use slow path for the following cases (conditions are in
supportsCachedOffsets() and supportsCachedOffsetsForChildren()):
- Absolute-position whose container is above the current paint
  invalidation container for stacked contents;
- Fixed-position objects: normally its paint invalidation container
  is either the LayoutView or below its containing block, so slow-
  path is either not so slow, or fast-path is not feasible;
- Multicolumn, SVGBlock, objects with reflection or filter.

BUG= 591199 , 598094 

Review URL: https://codereview.chromium.org/1833493003

Cr-Commit-Position: refs/heads/master@{#385056}

[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutBlock.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutObject.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutState.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/LayoutView.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.h
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
[modify] https://crrev.com/bf7dc636b3ed84582375d2cebe613ffaf1c00794/third_party/WebKit/Source/core/paint/README.md

Project Member

Comment 15 by bugdroid1@chromium.org, Apr 6 2016

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

commit 733202f451285be6f37359c0e2a36eae2496ca6a
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Wed Apr 06 17:46:31 2016

Fix PaintInvalidationState mapping for absolute whose container is above paintInvalidationContainer

BUG= 591199 
TEST=VisualRectMappingTest.ContainerOfAbsoluteAbovePaintInvalidationContainer

Review URL: https://codereview.chromium.org/1857373002

Cr-Commit-Position: refs/heads/master@{#385501}

[modify] https://crrev.com/733202f451285be6f37359c0e2a36eae2496ca6a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/733202f451285be6f37359c0e2a36eae2496ca6a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
[modify] https://crrev.com/733202f451285be6f37359c0e2a36eae2496ca6a/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp

Project Member

Comment 16 by bugdroid1@chromium.org, Apr 30 2016

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

commit c46c639d88881940f8ce4cb2fe6b50c41739d9de
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Sat Apr 30 00:09:44 2016

Don't assert rect mapping result if impossible, and enable assert in debug build

Avoid rect mapping result checking in the following cases:
- Any rect may contain saturated values;
- If a fixed-position ancestor disabled clipping.

BUG= 591199 
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_dbg,mac_blink_dbg,win_blink_dbg

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

[modify] https://crrev.com/c46c639d88881940f8ce4cb2fe6b50c41739d9de/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/c46c639d88881940f8ce4cb2fe6b50c41739d9de/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/c46c639d88881940f8ce4cb2fe6b50c41739d9de/third_party/WebKit/Source/core/layout/PaintInvalidationState.h

Project Member

Comment 17 by bugdroid1@chromium.org, Apr 30 2016

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

commit 004517dc7be6643dcdf55009cf6a8b868ad7334e
Author: dpranke <dpranke@chromium.org>
Date: Sat Apr 30 01:48:26 2016

Revert of Don't assert rect mapping result if impossible, and enable assert in debug build (patchset #15 id:280001 of https://codereview.chromium.org/1859833002/ )

Reason for revert:
I think this probably broke one of the telemetry benchmarks (which looks like it's hitting a crash inside blink now):

https://build.chromium.org/p/chromium.win/builders/Win7%20Tests%20%28dbg%29%281%29/builds/48270
https://build.chromium.org/p/chromium.mac/builders/Mac10.9%20Tests%20%28dbg%29/builds/23432

Original issue's description:
> Don't assert rect mapping result if impossible, and enable assert in debug build
>
> Avoid rect mapping result checking in the following cases:
> - Any rect may contain saturated values;
> - If a fixed-position ancestor disabled clipping.
>
> BUG= 591199 
> CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_dbg,mac_blink_dbg,win_blink_dbg

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

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

[modify] https://crrev.com/004517dc7be6643dcdf55009cf6a8b868ad7334e/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/004517dc7be6643dcdf55009cf6a8b868ad7334e/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/004517dc7be6643dcdf55009cf6a8b868ad7334e/third_party/WebKit/Source/core/layout/PaintInvalidationState.h

Project Member

Comment 18 by bugdroid1@chromium.org, May 3 2016

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

commit 0ddd48d1a4f271d3109019d55fe111a3220f1331
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Tue May 03 01:30:17 2016

Reland Don't assert rect mapping result if impossible

The original CL was reverted because it broke some perf bots.
The reason is that the slow path misses ancestor overflow clipping
for some absolute-position object whose paint invalidation container
is under the absolute-position object's container.

This CL reland the original CL but doesn't enable
CHECK_FAST_PATH_SLOW_PATH_EQUALITY by default.

Avoid rect mapping result checking in the following cases:
- Any rect may contain saturated values;
- If a fixed-position ancestor disabled clipping.

BUG= 591199 
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_dbg,mac_blink_dbg,win_blink_dbg
TBR=chrishtr@chromium.org

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

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

[modify] https://crrev.com/0ddd48d1a4f271d3109019d55fe111a3220f1331/third_party/WebKit/Source/core/layout/LayoutView.cpp
[modify] https://crrev.com/0ddd48d1a4f271d3109019d55fe111a3220f1331/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
[modify] https://crrev.com/0ddd48d1a4f271d3109019d55fe111a3220f1331/third_party/WebKit/Source/core/layout/PaintInvalidationState.h

Status: Fixed (was: Assigned)
I'm closing this bug because we have addressed all issues as planned.

Migration to PrePaintTreeWalk for spv1 is still an option. Will create a new issue for it when needed.
Project Member

Comment 21 by bugdroid1@chromium.org, Jun 1 2016

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

commit c3932e54885cbcc80b011bda5b45c592b22f1ff0
Author: wangxianzhu <wangxianzhu@chromium.org>
Date: Wed Jun 01 23:22:50 2016

InPrePaint document state and PrePaintTreeWalk class

- InUpdatePaintProperty document state is renamed to InPrePaint;
- The original PaintPropertyTreeBuilder class is split into PrePaintTreeWalk
  which walks the tree and the new PaintPropertyTreeBuilder which build the
  property tree.

This is preparation for a combined treewalk for both
paint property tree generation and paint invalidation.

For more information, see:
https://docs.google.com/document/d/1M669yu7nsF9Wrkm7nQFi3Pp2r-QmCMqm4K7fPPo-doA/view

BUG= 591199 

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

[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/core.gypi
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/dom/DocumentLifecycle.h
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/frame/FrameView.cpp
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/layout/LayoutObject.h
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h
[add] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
[add] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
[modify] https://crrev.com/c3932e54885cbcc80b011bda5b45c592b22f1ff0/third_party/WebKit/Source/core/paint/README.md

Sign in to add a comment