| Index: Source/platform/graphics/paint/DisplayItemList.h
|
| diff --git a/Source/platform/graphics/paint/DisplayItemList.h b/Source/platform/graphics/paint/DisplayItemList.h
|
| index 164f94160f061d035a3d185fd06fd0032c7055b0..0de35753d62888da710b5714099e8e3a6402dd77 100644
|
| --- a/Source/platform/graphics/paint/DisplayItemList.h
|
| +++ b/Source/platform/graphics/paint/DisplayItemList.h
|
| @@ -6,6 +6,7 @@
|
| #define DisplayItemList_h
|
|
|
| #include "platform/PlatformExport.h"
|
| +#include "platform/geometry/LayoutPoint.h"
|
| #include "platform/graphics/ContiguousContainer.h"
|
| #include "platform/graphics/paint/DisplayItem.h"
|
| #include "platform/graphics/paint/Transform3DDisplayItem.h"
|
| @@ -46,6 +47,17 @@ public:
|
| void invalidate(DisplayItemClient);
|
| void invalidateAll();
|
|
|
| + // Record when paint offsets change during paint.
|
| + void invalidatePaintOffset(DisplayItemClient);
|
| +#if ENABLE(ASSERT)
|
| + bool paintOffsetWasInvalidated(DisplayItemClient) const;
|
| +#endif
|
| +
|
| + // Record a new paint offset.
|
| + // TODO(pdr): Remove these once the paint offset cache is on LayoutObject.
|
| + void recordPaintOffset(DisplayItemClient, const LayoutPoint&);
|
| + bool paintOffsetWasRecorded(DisplayItemClient, const LayoutPoint&) const;
|
| +
|
| // These methods are called during painting.
|
| template <typename DisplayItemClass, typename... Args>
|
| DisplayItemClass& createAndAppend(Args&&... args)
|
| @@ -124,6 +136,7 @@ private:
|
| friend class DisplayItemListPaintTest;
|
| friend class DisplayItemListPaintTestForSlimmingPaintV2;
|
| friend class LayoutObjectDrawingRecorderTest;
|
| + friend class LayoutObjectDrawingRecorderTestForSlimmingPaintV2;
|
|
|
| // Set new item state (scopes, cache skipping, etc) for a new item.
|
| // TODO(pdr): This only passes a pointer to make the patch easier to review. Change to a reference.
|
| @@ -131,6 +144,11 @@ private:
|
|
|
| void updateValidlyCachedClientsIfNeeded() const;
|
|
|
| + // Update the recorded paint offsets to remove any items that no longer have
|
| + // corresponding cached display items.
|
| + // TODO(pdr): Remove this once the paint offset cache is on LayoutObject.
|
| + void removeUnneededPaintOffsetEntries();
|
| +
|
| #ifndef NDEBUG
|
| WTF::String displayItemsAsDebugString(const DisplayItems&) const;
|
| #endif
|
| @@ -166,6 +184,12 @@ private:
|
| mutable HashSet<DisplayItemClient> m_validlyCachedClients;
|
| mutable bool m_validlyCachedClientsDirty;
|
|
|
| +#if ENABLE(ASSERT)
|
| + // Set of clients which had paint offset changes since the last commit. This is used for
|
| + // ensuring paint offsets are only updated once and are the same in all phases.
|
| + HashSet<DisplayItemClient> m_clientsWithPaintOffsetInvalidations;
|
| +#endif
|
| +
|
| // Allow display item construction to be disabled to isolate the costs of construction
|
| // in performance metrics.
|
| bool m_constructionDisabled;
|
| @@ -177,6 +201,13 @@ private:
|
| unsigned m_nextScope;
|
| Vector<unsigned> m_scopeStack;
|
|
|
| + // Cache of LayoutObject paint offsets.
|
| + // TODO(pdr): This should be on LayoutObject itself and is only on the display
|
| + // item list temporarily until paint invalidation for v2 frees up space on
|
| + // LayoutObject.
|
| + using PreviousPaintOffsets = HashMap<DisplayItemClient, LayoutPoint>;
|
| + PreviousPaintOffsets m_previousPaintOffsets;
|
| +
|
| #if ENABLE(ASSERT)
|
| // This is used to check duplicated ids during add(). We could also check during
|
| // updatePaintList(), but checking during add() helps developer easily find where
|
|
|