Index: third_party/WebKit/Source/core/paint/PaintInvalidator.h |
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.h b/third_party/WebKit/Source/core/paint/PaintInvalidator.h |
index 37e609a2abd27fb80c88f674a7313668d31b4d0d..b396ee793cd5619b1f07cef3b95adafdf0645802 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintInvalidator.h |
+++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.h |
@@ -5,28 +5,24 @@ |
#ifndef PaintInvalidator_h |
#define PaintInvalidator_h |
+#include "core/layout/LayoutObject.h" |
+#include "core/paint/PaintPropertyTreeBuilder.h" |
#include "platform/geometry/LayoutRect.h" |
#include "platform/graphics/paint/GeometryMapper.h" |
#include "wtf/Vector.h" |
namespace blink { |
-class FrameView; |
-class LayoutBoxModelObject; |
-class LayoutObject; |
-class PaintLayer; |
-struct PaintPropertyTreeBuilderContext; |
- |
struct PaintInvalidatorContext { |
PaintInvalidatorContext( |
- const PaintPropertyTreeBuilderContext& treeBuilderContext, |
+ const PaintPropertyTreeBuilderContext* treeBuilderContext, |
GeometryMapper& geometryMapper) |
: parentContext(nullptr), |
m_treeBuilderContext(treeBuilderContext), |
m_geometryMapper(geometryMapper) {} |
PaintInvalidatorContext( |
- const PaintPropertyTreeBuilderContext& treeBuilderContext, |
+ const PaintPropertyTreeBuilderContext* treeBuilderContext, |
const PaintInvalidatorContext& parentContext) |
: parentContext(&parentContext), |
forcedSubtreeInvalidationFlags( |
@@ -43,14 +39,27 @@ struct PaintInvalidatorContext { |
virtual void mapLocalRectToVisualRectInBacking(const LayoutObject&, |
LayoutRect&) const; |
+ bool needsVisualRectUpdate(const LayoutObject& object) const { |
+ if (!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()) |
+ return true; |
+#if DCHECK_IS_ON() |
+ if (m_forceVisualRectUpdateForChecking) |
+ return true; |
+#endif |
+ return object.needsPaintOffsetAndVisualRectUpdate() || |
+ (forcedSubtreeInvalidationFlags & |
+ PaintInvalidatorContext::ForcedSubtreeVisualRectUpdate); |
+ } |
+ |
const PaintInvalidatorContext* parentContext; |
enum ForcedSubtreeInvalidationFlag { |
ForcedSubtreeInvalidationChecking = 1 << 0, |
- ForcedSubtreeInvalidationRectUpdate = 1 << 1, |
+ ForcedSubtreeVisualRectUpdate = 1 << 1, |
ForcedSubtreeFullInvalidation = 1 << 2, |
ForcedSubtreeFullInvalidationForStackedContents = 1 << 3, |
ForcedSubtreeSVGResourceChange = 1 << 4, |
+ |
// TODO(crbug.com/637313): This is temporary before we support filters in |
// paint property tree. |
ForcedSubtreeSlowPathRect = 1 << 5, |
@@ -101,8 +110,13 @@ struct PaintInvalidatorContext { |
private: |
friend class PaintInvalidator; |
- const PaintPropertyTreeBuilderContext& m_treeBuilderContext; |
+ const PaintPropertyTreeBuilderContext* m_treeBuilderContext; |
GeometryMapper& m_geometryMapper; |
+ |
+#if DCHECK_IS_ON() |
+ friend class FindVisualRectNeedingUpdateScopeBase; |
+ mutable bool m_forceVisualRectUpdateForChecking = false; |
+#endif |
}; |
class PaintInvalidator { |
@@ -131,6 +145,8 @@ class PaintInvalidator { |
PaintInvalidatorContext&); |
ALWAYS_INLINE void updatePaintInvalidationContainer(const LayoutObject&, |
PaintInvalidatorContext&); |
+ ALWAYS_INLINE void updateVisualRectIfNeeded(const LayoutObject&, |
+ PaintInvalidatorContext&); |
ALWAYS_INLINE void updateVisualRect(const LayoutObject&, |
PaintInvalidatorContext&); |