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

Unified Diff: third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h

Issue 1655553002: Update svg's root paint offset property during paint (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/paint/LayoutObjectDrawingRecorder.h
diff --git a/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h b/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h
index 5ba038079482d5cd8ec1b041cfdbb9787309baee..75b495126e9616b7337e18dfdad0ef03fec3090d 100644
--- a/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h
+++ b/third_party/WebKit/Source/core/paint/LayoutObjectDrawingRecorder.h
@@ -6,11 +6,13 @@
#define LayoutObjectDrawingRecorder_h
#include "core/layout/LayoutObject.h"
+#include "core/paint/ObjectPaintProperties.h"
#include "core/paint/PaintPhase.h"
#include "platform/geometry/LayoutPoint.h"
#include "platform/geometry/LayoutRect.h"
#include "platform/graphics/paint/DisplayItemCacheSkipper.h"
#include "platform/graphics/paint/DrawingRecorder.h"
+#include "platform/graphics/paint/ScopedPaintChunkProperties.h"
#include "wtf/Allocator.h"
#include "wtf/Optional.h"
@@ -28,6 +30,15 @@ public:
return false;
if (layoutObject.fullPaintInvalidationReason() == PaintInvalidationDelayedFull)
return false;
+
+ Optional<ScopedPaintChunkProperties> propertyScope;
jbroman 2016/02/01 16:44:20 I'm not convinced LayoutObjectDrawingRecorder is t
+ if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
+ // TODO(pdr): Refactor this so it is not called twice (again in useCachedDrawingIfPossible).
+ bool willUseCachedDrawing = !context.paintController().clientCacheIsValid(layoutObject);
+ if (willUseCachedDrawing)
+ updatePropertyScope(propertyScope, context, layoutObject);
+ }
+
return DrawingRecorder::useCachedDrawingIfPossible(context, layoutObject, displayItemType);
}
@@ -38,6 +49,7 @@ public:
LayoutObjectDrawingRecorder(GraphicsContext& context, const LayoutObject& layoutObject, DisplayItem::Type displayItemType, const FloatRect& clip, const LayoutPoint& paintOffset)
{
+ updatePropertyScope(m_propertyScope, context, layoutObject);
updatePaintOffsetIfNeeded(context.paintController(), layoutObject, paintOffset);
// We may paint a delayed-invalidation object before it's actually invalidated.
if (layoutObject.fullPaintInvalidationReason() == PaintInvalidationDelayedFull)
@@ -63,6 +75,31 @@ public:
void setUnderInvalidationCheckingMode(DrawingDisplayItem::UnderInvalidationCheckingMode mode) { m_drawingRecorder->setUnderInvalidationCheckingMode(mode); }
#endif
+ static void updatePropertyScope(Optional<ScopedPaintChunkProperties>& scopedPaintChunkProperties, GraphicsContext& context, const LayoutObject& layoutObject)
+ {
+ if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled())
+ return;
+
+ // Only objects with properties and no layer need to update paint
+ // properties, as PaintLayerPainter will handle all other cases.
trchen 2016/02/02 01:34:48 This statement is not true. For example, a PaintLa
+ // (see: PaintLayerPainter::paintLayerContents).
+ if (!layoutObject.objectPaintProperties() || layoutObject.hasLayer())
+ return;
+
+ const ObjectPaintProperties& objectProperties = *layoutObject.objectPaintProperties();
+ PaintChunkProperties properties(context.paintController().currentPaintChunkProperties());
+ if (TransformPaintPropertyNode* transform = objectProperties.paintOffsetTranslation())
+ properties.transform = transform;
+ if (TransformPaintPropertyNode* transform = objectProperties.transform())
+ properties.transform = transform;
+ if (TransformPaintPropertyNode* transform = objectProperties.perspective())
+ properties.transform = transform;
+ if (TransformPaintPropertyNode* transform = objectProperties.scrollTranslation())
+ properties.transform = transform;
+ if (EffectPaintPropertyNode* effect = objectProperties.effect())
+ properties.effect = effect;
+ scopedPaintChunkProperties.emplace(context.paintController(), properties);
+ }
private:
static void updatePaintOffsetIfNeeded(PaintController& paintController, const LayoutObject& layoutObject, const LayoutPoint& paintOffset)
{
@@ -77,6 +114,7 @@ private:
layoutObject.mutableForPainting().setPreviousPaintOffset(paintOffset);
}
+ Optional<ScopedPaintChunkProperties> m_propertyScope;
Optional<DisplayItemCacheSkipper> m_cacheSkipper;
Optional<DrawingRecorder> m_drawingRecorder;
};
« no previous file with comments | « third_party/WebKit/LayoutTests/virtual/spv2/svg/README.txt ('k') | third_party/WebKit/Source/core/paint/SVGRootPainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698