Invalidate only non-scrolling layers for non-scrolling content.
BUG=416535
Review-Url: https://codereview.chromium.org/2039503002
Cr-Commit-Position: refs/heads/master@{#397912}
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index d29686994..fb226c1 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -15,7 +15,7 @@
# Run these tests with under virtual/scalefactor... only.
crbug.com/567837 fast/hidpi/static [ Skip ]
-# TODO(yosin): We should convert following tests to use asynchronous spell checker.
+# TODO(yosin): We should convert following tests to use asynchronous spell checker.scroll-in
crbug.com/563265 editing/spelling/context-menu-suggestions.html [ Skip ]
crbug.com/563265 editing/spelling/spellcheck-editable-on-focus-multiframe.html [ Skip ]
crbug.com/563265 editing/spelling/spellcheck-editable-on-focus-sync.html [ Skip ]
@@ -76,6 +76,8 @@
crbug.com/280342 [ Linux Win ] http/tests/media/progress-events-generated-correctly.html [ Failure ]
+crbug.com/416535 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container.html [ NeedsRebaseline ]
+
crbug.com/520739 [ Mac ] http/tests/websocket/close-code-and-reason.html [ Failure Pass Timeout ]
crbug.com/520737 [ Mac ] imported/csswg-test/css-writing-modes-3/writing-mode-vertical-rl-001.xht [ Failure Pass Timeout ]
crbug.com/520736 [ Win7 ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
index fb96668..cb416dca 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
@@ -430,8 +430,10 @@
}
} else if (object.compositedScrollsWithRespectTo(*this)) {
layer()->compositedLayerMapping()->setScrollingContentsNeedDisplayInRect(r, invalidationReason, object);
+ } else if (usesCompositedScrolling()) {
+ layer()->compositedLayerMapping()->setNonScrollingContentsNeedDisplayInRect(r, invalidationReason, object);
} else {
- // TODO(chrishtr): we should be able to skip scrolling content layers in this case.
+ // Otherwise invalidate everything.
layer()->compositedLayerMapping()->setContentsNeedDisplayInRect(r, invalidationReason, object);
}
}
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
index 6c4f7906..f6ba036 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -1416,7 +1416,8 @@
ApplyToMaskLayers = (1 << 4),
ApplyToContentLayers = (1 << 5),
ApplyToChildContainingLayers = (1 << 6), // layers between m_graphicsLayer and children
- ApplyToScrollingContentLayers = (1 << 7),
+ ApplyToNonScrollingContentLayers = (1 << 7),
+ ApplyToScrollingContentLayers = (1 << 8),
ApplyToAllGraphicsLayers = (ApplyToSquashingLayer | ApplyToScrollbarLayers | ApplyToBackgroundLayer | ApplyToMaskLayers | ApplyToLayersAffectedByPreserve3D | ApplyToContentLayers | ApplyToScrollingContentLayers)
};
typedef unsigned ApplyToGraphicsLayersMode;
@@ -1428,7 +1429,7 @@
if ((mode & ApplyToLayersAffectedByPreserve3D) && mapping->childTransformLayer())
f(mapping->childTransformLayer());
- if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLayers)) && mapping->mainGraphicsLayer())
+ if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToContentLayers) || (mode & ApplyToNonScrollingContentLayers)) && mapping->mainGraphicsLayer())
f(mapping->mainGraphicsLayer());
if (((mode & ApplyToLayersAffectedByPreserve3D) || (mode & ApplyToChildContainingLayers)) && mapping->clippingLayer())
f(mapping->clippingLayer());
@@ -1445,12 +1446,12 @@
if ((mode & ApplyToSquashingLayer) && mapping->squashingLayer())
f(mapping->squashingLayer());
- if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping->maskLayer())
+ if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) || (mode & ApplyToNonScrollingContentLayers)) && mapping->maskLayer())
f(mapping->maskLayer());
- if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers)) && mapping->childClippingMaskLayer())
+ if (((mode & ApplyToMaskLayers) || (mode & ApplyToContentLayers) || (mode & ApplyToNonScrollingContentLayers)) && mapping->childClippingMaskLayer())
f(mapping->childClippingMaskLayer());
- if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers)) && mapping->backgroundLayer())
+ if (((mode & ApplyToBackgroundLayer) || (mode & ApplyToContentLayers) || (mode & ApplyToNonScrollingContentLayers)) && mapping->backgroundLayer())
f(mapping->backgroundLayer());
if ((mode & ApplyToScrollbarLayers) && mapping->layerForHorizontalScrollbar())
@@ -2096,9 +2097,9 @@
const DisplayItemClient& client;
};
-// r is in the coordinate space of the layer's layout object
void CompositedLayerMapping::setContentsNeedDisplayInRect(const LayoutRect& r, PaintInvalidationReason invalidationReason, const DisplayItemClient& client)
{
+ DCHECK(!m_owningLayer.layoutObject()->usesCompositedScrolling());
// TODO(wangxianzhu): Enable the following assert after paint invalidation for spv2 is ready.
// ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
@@ -2110,8 +2111,23 @@
ApplyToGraphicsLayers(this, functor, ApplyToContentLayers);
}
+void CompositedLayerMapping::setNonScrollingContentsNeedDisplayInRect(const LayoutRect& r, PaintInvalidationReason invalidationReason, const DisplayItemClient& client)
+{
+ DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling());
+ // TODO(wangxianzhu): Enable the following assert after paint invalidation for spv2 is ready.
+ // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
+
+ SetContentsNeedsDisplayInRectFunctor functor = {
+ enclosingIntRect(LayoutRect(r.location() + m_owningLayer.subpixelAccumulation(), r.size())),
+ invalidationReason,
+ client
+ };
+ ApplyToGraphicsLayers(this, functor, ApplyToNonScrollingContentLayers);
+}
+
void CompositedLayerMapping::setScrollingContentsNeedDisplayInRect(const LayoutRect& r, PaintInvalidationReason invalidationReason, const DisplayItemClient& client)
{
+ DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling());
// TODO(wangxianzhu): Enable the following assert after paint invalidation for spv2 is ready.
// ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
index 126b0b9b..6e05860 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
@@ -128,6 +128,8 @@
void setContentsNeedDisplay();
// LayoutRect is in the coordinate space of the layer's layout object.
void setContentsNeedDisplayInRect(const LayoutRect&, PaintInvalidationReason, const DisplayItemClient&);
+ // Invalidates just the non-scrolling content layers.
+ void setNonScrollingContentsNeedDisplayInRect(const LayoutRect&, PaintInvalidationReason, const DisplayItemClient&);
// Invalidates just scrolling content layers.
void setScrollingContentsNeedDisplayInRect(const LayoutRect&, PaintInvalidationReason, const DisplayItemClient&);