| Index: Source/platform/graphics/paint/DisplayItemList.h
|
| diff --git a/Source/platform/graphics/paint/DisplayItemList.h b/Source/platform/graphics/paint/DisplayItemList.h
|
| index ea3ad1b11ace8ecf07f55088e74860d0a826f3c0..7325c18f7fbedb00bea051bfd7804eb96291f089 100644
|
| --- a/Source/platform/graphics/paint/DisplayItemList.h
|
| +++ b/Source/platform/graphics/paint/DisplayItemList.h
|
| @@ -87,6 +87,7 @@ public:
|
| const DisplayItems& displayItems() const;
|
|
|
| bool clientCacheIsValid(DisplayItemClient) const;
|
| + bool subtreeCacheIsValid(DisplayItemClient, DisplayItem::Type beginSubtreeType) const;
|
|
|
| // Commits the new display items and plays back the updated display items into the given context.
|
| void commitNewDisplayItemsAndReplay(GraphicsContext& context)
|
| @@ -114,6 +115,7 @@ protected:
|
| : m_currentDisplayItems(kMaximumDisplayItemSize, 0)
|
| , m_newDisplayItems(kMaximumDisplayItemSize, kInitialDisplayItemsCapacity * kMaximumDisplayItemSize)
|
| , m_validlyCachedClientsDirty(false)
|
| + , m_subtreeIndicesByClientDirty(false)
|
| , m_constructionDisabled(false)
|
| , m_skippingCacheCount(0)
|
| , m_numCachedItems(0)
|
| @@ -130,21 +132,22 @@ private:
|
| void processNewItem(DisplayItem*);
|
|
|
| void updateValidlyCachedClientsIfNeeded() const;
|
| + void updateSubtreeIndicesByClientIfNeeded() const;
|
|
|
| #ifndef NDEBUG
|
| WTF::String displayItemsAsDebugString(const DisplayItems&) const;
|
| #endif
|
|
|
| - // Indices into PaintList of all DrawingDisplayItems and BeginSubtreeDisplayItems of each client.
|
| - // Temporarily used during merge to find out-of-order display items.
|
| + // Indices into DisplayItems of all certain types of display items of each client.
|
| using DisplayItemIndicesByClientMap = HashMap<DisplayItemClient, Vector<size_t>>;
|
|
|
| static size_t findMatchingItemFromIndex(const DisplayItem::Id&, const DisplayItemIndicesByClientMap&, const DisplayItems&);
|
| - static void addItemToIndexIfNeeded(const DisplayItem&, size_t index, DisplayItemIndicesByClientMap&);
|
| + static void addItemToIndex(const DisplayItem&, size_t index, DisplayItemIndicesByClientMap&);
|
|
|
| struct OutOfOrderIndexContext;
|
| DisplayItems::iterator findOutOfOrderCachedItem(DisplayItems::iterator currentIt, const DisplayItem::Id&, OutOfOrderIndexContext&);
|
| DisplayItems::iterator findOutOfOrderCachedItemForward(const DisplayItem::Id&, OutOfOrderIndexContext&);
|
| +
|
| void copyCachedSubtree(DisplayItems::iterator& currentIt, DisplayItems& updatedList);
|
|
|
| #if ENABLE(ASSERT)
|
| @@ -166,6 +169,11 @@ private:
|
| mutable HashSet<DisplayItemClient> m_validlyCachedClients;
|
| mutable bool m_validlyCachedClientsDirty;
|
|
|
| + // Stores indices to BeginSubtree display items for subtreeCacheIsValid().
|
| + // It's lazily updated in updateSubtreeIndicesIfNeeded().
|
| + mutable DisplayItemIndicesByClientMap m_subtreeIndicesByClient;
|
| + mutable bool m_subtreeIndicesByClientDirty;
|
| +
|
| // Allow display item construction to be disabled to isolate the costs of construction
|
| // in performance metrics.
|
| bool m_constructionDisabled;
|
|
|