Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1975)

Unified Diff: third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp

Issue 1391753005: (WIP) Invalidation during painting (for synchronized painting) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
index 018a76906d959c9a896be92f945e21a412535901..6e77824a09267de7ead2007743a0f796ebece435 100644
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
+++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
@@ -18,10 +18,12 @@ PaintInvalidationState::PaintInvalidationState(const LayoutView& layoutView, Vec
, m_forcedSubtreeInvalidationWithinContainer(false)
, m_forcedSubtreeInvalidationRectUpdateWithinContainer(false)
, m_viewClippingAndScrollOffsetDisabled(false)
- , m_paintInvalidationContainer(layoutView.containerForPaintInvalidation())
- , m_pendingDelayedPaintInvalidations(pendingDelayedPaintInvalidations)
+ , m_paintInvalidationContainer(*layoutView.containerForPaintInvalidation())
+ , m_pendingDelayedPaintInvalidations(&pendingDelayedPaintInvalidations)
, m_enclosingSelfPaintingLayer(*layoutView.layer())
{
+ ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled());
+
bool establishesPaintInvalidationContainer = layoutView == m_paintInvalidationContainer;
if (!establishesPaintInvalidationContainer) {
if ((ownerPaintInvalidationState && !ownerPaintInvalidationState->m_cachedOffsetsEnabled)
@@ -39,16 +41,18 @@ PaintInvalidationState::PaintInvalidationState(const LayoutView& layoutView, Vec
m_clipped = true;
}
-PaintInvalidationState::PaintInvalidationState(PaintInvalidationState& next, LayoutBoxModelObject& layoutObject, const LayoutBoxModelObject& paintInvalidationContainer)
+PaintInvalidationState::PaintInvalidationState(PaintInvalidationState& next, const LayoutBoxModelObject& layoutObject, const LayoutBoxModelObject& paintInvalidationContainer)
: m_clipped(false)
, m_cachedOffsetsEnabled(true)
, m_forcedSubtreeInvalidationWithinContainer(next.m_forcedSubtreeInvalidationWithinContainer)
, m_forcedSubtreeInvalidationRectUpdateWithinContainer(next.m_forcedSubtreeInvalidationRectUpdateWithinContainer)
, m_viewClippingAndScrollOffsetDisabled(false)
, m_paintInvalidationContainer(paintInvalidationContainer)
- , m_pendingDelayedPaintInvalidations(next.pendingDelayedPaintInvalidationTargets())
+ , m_pendingDelayedPaintInvalidations(next.m_pendingDelayedPaintInvalidations)
, m_enclosingSelfPaintingLayer(next.enclosingSelfPaintingLayer(layoutObject))
{
+ ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled() || layoutObject.isSVGRoot());
+
// FIXME: SVG could probably benefit from a stack-based optimization like html does. crbug.com/391054
bool establishesPaintInvalidationContainer = layoutObject == m_paintInvalidationContainer;
bool fixed = layoutObject.style()->position() == FixedPosition;
@@ -117,6 +121,31 @@ PaintInvalidationState::PaintInvalidationState(PaintInvalidationState& next, con
m_svgTransform = AffineTransform(next.svgTransform() * layoutObject.localToParentTransform());
}
+PaintInvalidationState::PaintInvalidationState(const LayoutBoxModelObject& paintingContainer, const LayoutRect& clipRect, unsigned flags)
+ : m_clipped(flags & HasClip)
+ , m_cachedOffsetsEnabled(paintingContainer.supportsPaintInvalidationStateCachedOffsets())
+ , m_forcedSubtreeInvalidationWithinContainer(false)
+ , m_forcedSubtreeInvalidationRectUpdateWithinContainer(false)
+ , m_clipRect(clipRect)
+ , m_paintInvalidationContainer(paintingContainer.isPaintInvalidationContainer() ? paintingContainer : *paintingContainer.containerForPaintInvalidation())
+ , m_pendingDelayedPaintInvalidations(nullptr)
+{
+ ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
+
+ if (paintingContainer.isPaintInvalidationContainer())
+ return;
+
+ if (flags & HasNonIdentityAndNonTranslateTransform) {
+ m_cachedOffsetsEnabled = false;
+ return;
+ }
+
+ FloatPoint point = paintingContainer.localToContainerPoint(FloatPoint(), &m_paintInvalidationContainer, TraverseDocumentBoundaries);
+ m_paintOffset = LayoutSize(point.x(), point.y());
+ if (m_clipped)
+ m_clipRect.move(m_paintOffset);
+}
+
void PaintInvalidationState::addClipRectRelativeToPaintOffset(const LayoutSize& clipSize)
{
LayoutRect clipRect(toPoint(m_paintOffset), clipSize);

Powered by Google App Engine
This is Rietveld 408576698