| Index: third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.h
|
| diff --git a/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.h b/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.h
|
| deleted file mode 100644
|
| index 22660f019b9909bf49e30fc2780f7601611d355e..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.h
|
| +++ /dev/null
|
| @@ -1,265 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef DisplayItemList_h
|
| -#define DisplayItemList_h
|
| -
|
| -#include "platform/PlatformExport.h"
|
| -#include "platform/RuntimeEnabledFeatures.h"
|
| -#include "platform/geometry/IntRect.h"
|
| -#include "platform/geometry/LayoutPoint.h"
|
| -#include "platform/graphics/ContiguousContainer.h"
|
| -#include "platform/graphics/PaintInvalidationReason.h"
|
| -#include "platform/graphics/paint/DisplayItem.h"
|
| -#include "platform/graphics/paint/DisplayItems.h"
|
| -#include "platform/graphics/paint/PaintArtifact.h"
|
| -#include "platform/graphics/paint/PaintChunk.h"
|
| -#include "platform/graphics/paint/PaintChunker.h"
|
| -#include "platform/graphics/paint/Transform3DDisplayItem.h"
|
| -#include "wtf/Alignment.h"
|
| -#include "wtf/HashMap.h"
|
| -#include "wtf/PassOwnPtr.h"
|
| -#include "wtf/Utility.h"
|
| -#include "wtf/Vector.h"
|
| -
|
| -namespace blink {
|
| -
|
| -class GraphicsLayer;
|
| -class GraphicsContext;
|
| -
|
| -static const size_t kInitialDisplayItemsCapacity = 64;
|
| -
|
| -// Responsible for processing display items as they are produced, and producing
|
| -// a final paint artifact when complete. This class includes logic for caching,
|
| -// cache invalidation, and merging.
|
| -class PLATFORM_EXPORT DisplayItemList {
|
| - WTF_MAKE_NONCOPYABLE(DisplayItemList);
|
| - WTF_MAKE_FAST_ALLOCATED(DisplayItemList);
|
| -public:
|
| - static PassOwnPtr<DisplayItemList> create()
|
| - {
|
| - return adoptPtr(new DisplayItemList());
|
| - }
|
| -
|
| - // These methods are called during paint invalidation (or paint if SlimmingPaintSynchronizedPainting is on).
|
| - void invalidate(const DisplayItemClientWrapper&, PaintInvalidationReason, const IntRect& previousPaintInvalidationRect, const IntRect& newPaintInvalidationRect);
|
| - void invalidateUntracked(DisplayItemClient);
|
| - void invalidateAll();
|
| -
|
| - // Record when paint offsets change during paint.
|
| - void invalidatePaintOffset(const DisplayItemClientWrapper&);
|
| -#if ENABLE(ASSERT)
|
| - bool paintOffsetWasInvalidated(DisplayItemClient) const;
|
| -#endif
|
| -
|
| - // These methods are called during painting.
|
| -
|
| - // Provide a new set of paint chunk properties to apply to recorded display
|
| - // items, for Slimming Paint v2.
|
| - // TODO(pdr): This should be moved to PaintArtifact.
|
| - void updateCurrentPaintChunkProperties(const PaintChunkProperties&);
|
| -
|
| - template <typename DisplayItemClass, typename... Args>
|
| - void createAndAppend(Args&&... args)
|
| - {
|
| - static_assert(WTF::IsSubclass<DisplayItemClass, DisplayItem>::value,
|
| - "Can only createAndAppend subclasses of DisplayItem.");
|
| - static_assert(sizeof(DisplayItemClass) <= kMaximumDisplayItemSize,
|
| - "DisplayItem subclass is larger than kMaximumDisplayItemSize.");
|
| -
|
| - if (displayItemConstructionIsDisabled())
|
| - return;
|
| - DisplayItemClass& displayItem = m_newDisplayItems.allocateAndConstruct<DisplayItemClass>(WTF::forward<Args>(args)...);
|
| - processNewItem(displayItem);
|
| - }
|
| -
|
| - // Creates and appends an ending display item to pair with a preceding
|
| - // beginning item iff the display item actually draws content. For no-op
|
| - // items, rather than creating an ending item, the begin item will
|
| - // instead be removed, thereby maintaining brevity of the list. If display
|
| - // item construction is disabled, no list mutations will be performed.
|
| - template <typename DisplayItemClass, typename... Args>
|
| - void endItem(Args&&... args)
|
| - {
|
| - if (displayItemConstructionIsDisabled())
|
| - return;
|
| - if (lastDisplayItemIsNoopBegin())
|
| - removeLastDisplayItem();
|
| - else
|
| - createAndAppend<DisplayItemClass>(WTF::forward<Args>(args)...);
|
| - }
|
| -
|
| - // Scopes must be used to avoid duplicated display item ids when we paint some object
|
| - // multiple times and generate multiple display items with the same type.
|
| - // We don't cache display items added in scopes.
|
| - void beginScope();
|
| - void endScope();
|
| -
|
| - // True if the last display item is a begin that doesn't draw content.
|
| - bool lastDisplayItemIsNoopBegin() const;
|
| - void removeLastDisplayItem();
|
| -
|
| - void beginSkippingCache() { ++m_skippingCacheCount; }
|
| - void endSkippingCache() { ASSERT(m_skippingCacheCount > 0); --m_skippingCacheCount; }
|
| - bool skippingCache() const { return m_skippingCacheCount; }
|
| -
|
| - // Must be called when a painting is finished. If passed, invalidations are recorded on the given
|
| - // GraphicsLayer.
|
| - void commitNewDisplayItems(GraphicsLayer* = 0);
|
| -
|
| - // Returns the approximate memory usage, excluding memory likely to be
|
| - // shared with the embedder after copying to WebDisplayItemList.
|
| - // Should only be called right after commitNewDisplayItems.
|
| - size_t approximateUnsharedMemoryUsage() const;
|
| -
|
| - // Get the artifact generated after the last commit.
|
| - const PaintArtifact& paintArtifact() const;
|
| - const DisplayItems& displayItems() const { return paintArtifact().displayItems(); }
|
| - const Vector<PaintChunk>& paintChunks() const { return paintArtifact().paintChunks(); }
|
| -
|
| - bool clientCacheIsValid(DisplayItemClient) const;
|
| -
|
| - bool displayItemConstructionIsDisabled() const { return m_constructionDisabled; }
|
| - void setDisplayItemConstructionIsDisabled(const bool disable) { m_constructionDisabled = disable; }
|
| -
|
| - bool textPainted() const { return m_textPainted; }
|
| - void setTextPainted() { m_textPainted = true; }
|
| -
|
| - // Returns displayItems added using createAndAppend() since beginning or the last
|
| - // commitNewDisplayItems(). Use with care.
|
| - DisplayItems& newDisplayItems() { return m_newDisplayItems; }
|
| -
|
| -#ifndef NDEBUG
|
| - void showDebugData() const;
|
| -#endif
|
| -
|
| - void startTrackingPaintInvalidationObjects()
|
| - {
|
| - ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| - m_trackedPaintInvalidationObjects = adoptPtr(new Vector<String>());
|
| - }
|
| - void stopTrackingPaintInvalidationObjects()
|
| - {
|
| - ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| - m_trackedPaintInvalidationObjects = nullptr;
|
| - }
|
| - Vector<String> trackedPaintInvalidationObjects()
|
| - {
|
| - ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| - return m_trackedPaintInvalidationObjects ? *m_trackedPaintInvalidationObjects : Vector<String>();
|
| - }
|
| -
|
| - bool clientHasCheckedPaintInvalidation(DisplayItemClient client) const
|
| - {
|
| - ASSERT(RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled());
|
| - return m_clientsCheckedPaintInvalidation.contains(client);
|
| - }
|
| - void setClientHasCheckedPaintInvalidation(DisplayItemClient client)
|
| - {
|
| - ASSERT(RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled());
|
| - m_clientsCheckedPaintInvalidation.add(client);
|
| - }
|
| -
|
| -protected:
|
| - DisplayItemList()
|
| - : m_newDisplayItems(kInitialDisplayItemsCapacity * kMaximumDisplayItemSize)
|
| - , m_validlyCachedClientsDirty(false)
|
| - , m_constructionDisabled(false)
|
| - , m_textPainted(false)
|
| - , m_skippingCacheCount(0)
|
| - , m_numCachedItems(0)
|
| - , m_nextScope(1) { }
|
| -
|
| -private:
|
| - // Set new item state (scopes, cache skipping, etc) for a new item.
|
| - void processNewItem(DisplayItem&);
|
| -
|
| - void updateValidlyCachedClientsIfNeeded() const;
|
| -
|
| - void invalidateClient(const DisplayItemClientWrapper&);
|
| -
|
| -#ifndef NDEBUG
|
| - WTF::String displayItemsAsDebugString(const DisplayItems&) const;
|
| -#endif
|
| -
|
| - // Indices into PaintList of all DrawingDisplayItems and BeginSubsequenceDisplayItems of each client.
|
| - // Temporarily used during merge to find out-of-order display items.
|
| - 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&);
|
| -
|
| - struct OutOfOrderIndexContext;
|
| - DisplayItems::iterator findOutOfOrderCachedItem(const DisplayItem::Id&, OutOfOrderIndexContext&);
|
| - DisplayItems::iterator findOutOfOrderCachedItemForward(const DisplayItem::Id&, OutOfOrderIndexContext&);
|
| - void copyCachedSubsequence(DisplayItems::iterator& currentIt, DisplayItems& updatedList);
|
| -
|
| -#if ENABLE(ASSERT)
|
| - // The following two methods are for checking under-invalidations
|
| - // (when RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled).
|
| - void checkUnderInvalidation(DisplayItems::iterator& newIt, DisplayItems::iterator& currentIt);
|
| - void checkCachedDisplayItemIsUnchanged(const char* messagePrefix, const DisplayItem& newItem, const DisplayItem& oldItem);
|
| - void checkNoRemainingCachedDisplayItems();
|
| -#endif
|
| -
|
| - // The last complete paint artifact.
|
| - // In SPv2, this includes paint chunks as well as display items.
|
| - PaintArtifact m_currentPaintArtifact;
|
| -
|
| - // Data being used to build the next paint artifact.
|
| - DisplayItems m_newDisplayItems;
|
| - PaintChunker m_newPaintChunks;
|
| -
|
| - // Contains all clients having valid cached paintings if updated.
|
| - // It's lazily updated in updateValidlyCachedClientsIfNeeded().
|
| - // TODO(wangxianzhu): In the future we can replace this with client-side repaint flags
|
| - // to avoid the cost of building and querying the hash table.
|
| - mutable HashSet<DisplayItemClient> m_validlyCachedClients;
|
| - mutable bool m_validlyCachedClientsDirty;
|
| -
|
| - // Used during painting. Contains clients that have checked paint invalidation and
|
| - // are known to be valid.
|
| - // TODO(wangxianzhu): Use client side flag to avoid const of hash table.
|
| - HashSet<DisplayItemClient> m_clientsCheckedPaintInvalidation;
|
| -
|
| -#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;
|
| -
|
| - // Indicates this DisplayItemList has ever had text. It is never reset to false.
|
| - bool m_textPainted;
|
| -
|
| - int m_skippingCacheCount;
|
| -
|
| - int m_numCachedItems;
|
| -
|
| - unsigned m_nextScope;
|
| - Vector<unsigned> m_scopeStack;
|
| -
|
| - struct Invalidation {
|
| - IntRect rect;
|
| - PaintInvalidationReason invalidationReason;
|
| - };
|
| -
|
| - Vector<Invalidation> m_invalidations;
|
| -
|
| -#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
|
| - // the duplicated ids are from.
|
| - DisplayItemIndicesByClientMap m_newDisplayItemIndicesByClient;
|
| -#endif
|
| -
|
| - OwnPtr<Vector<String>> m_trackedPaintInvalidationObjects;
|
| -};
|
| -
|
| -} // namespace blink
|
| -
|
| -#endif // DisplayItemList_h
|
|
|