Index: third_party/WebKit/Source/platform/graphics/paint/PaintController.h |
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintController.h b/third_party/WebKit/Source/platform/graphics/paint/PaintController.h |
index 9ca28482695829728e26152562325c902015ff39..429b85006f4329253f1b89d1c728d451a64ac3f5 100644 |
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintController.h |
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintController.h |
@@ -17,6 +17,7 @@ |
#include "platform/graphics/paint/PaintChunker.h" |
#include "platform/graphics/paint/Transform3DDisplayItem.h" |
#include "wtf/Alignment.h" |
+#include "wtf/Assertions.h" |
#include "wtf/HashMap.h" |
#include "wtf/HashSet.h" |
#include "wtf/PassOwnPtr.h" |
@@ -49,7 +50,7 @@ public: |
// Record when paint offsets change during paint. |
void invalidatePaintOffset(const DisplayItemClient&); |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
bool paintOffsetWasInvalidated(const DisplayItemClient&) const; |
#endif |
@@ -103,7 +104,7 @@ public: |
void removeLastDisplayItem(); |
void beginSkippingCache() { ++m_skippingCacheCount; } |
- void endSkippingCache() { ASSERT(m_skippingCacheCount > 0); --m_skippingCacheCount; } |
+ void endSkippingCache() { DCHECK(m_skippingCacheCount > 0); --m_skippingCacheCount; } |
bool skippingCache() const { return m_skippingCacheCount; } |
// Must be called when a painting is finished. |
@@ -143,57 +144,46 @@ public: |
void showDebugData() const; |
#endif |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
bool hasInvalidations() { return !m_invalidations.isEmpty(); } |
#endif |
void startTrackingPaintInvalidationObjects() |
{ |
- ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
m_trackedPaintInvalidationObjects = adoptPtr(new Vector<String>()); |
} |
void stopTrackingPaintInvalidationObjects() |
{ |
- ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
m_trackedPaintInvalidationObjects = nullptr; |
} |
Vector<String> trackedPaintInvalidationObjects() |
{ |
- ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
return m_trackedPaintInvalidationObjects ? *m_trackedPaintInvalidationObjects : Vector<String>(); |
} |
- bool clientHasCheckedPaintInvalidation(const DisplayItemClient& client) const |
- { |
- return m_clientsCheckedPaintInvalidation.contains(&client); |
- } |
- void setClientHasCheckedPaintInvalidation(const DisplayItemClient& client) |
- { |
- m_clientsCheckedPaintInvalidation.add(&client); |
- } |
- |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
void assertDisplayItemClientsAreLive(); |
#endif |
protected: |
PaintController() |
: m_newDisplayItemList(kInitialDisplayItemListCapacityBytes) |
- , m_validlyCachedClientsDirty(false) |
, m_constructionDisabled(false) |
, m_subsequenceCachingDisabled(false) |
, m_textPainted(false) |
, m_imagePainted(false) |
, m_skippingCacheCount(0) |
, m_numCachedNewItems(0) |
- , m_nextScope(1) { } |
+ , m_nextScope(1) |
+ { } |
private: |
// Set new item state (scopes, cache skipping, etc) for a new item. |
void processNewItem(DisplayItem&); |
- void updateValidlyCachedClientsIfNeeded() const; |
- |
#ifndef NDEBUG |
WTF::String displayItemListAsDebugString(const DisplayItemList&) const; |
#endif |
@@ -210,7 +200,7 @@ private: |
DisplayItemList::iterator findOutOfOrderCachedItemForward(const DisplayItem::Id&, OutOfOrderIndexContext&); |
void copyCachedSubsequence(const DisplayItemList& currentList, DisplayItemList::iterator& currentIt, DisplayItemList& updatedList, SkPictureGpuAnalyzer&); |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
// The following two methods are for checking under-invalidations |
// (when RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled). |
void checkUnderInvalidation(DisplayItemList::iterator& newIt, DisplayItemList::iterator& currentIt); |
@@ -220,6 +210,8 @@ private: |
void commitNewDisplayItemsInternal(const LayoutSize& offsetFromLayoutObject); |
+ void updateCacheGeneration(); |
+ |
// The last complete paint artifact. |
// In SPv2, this includes paint chunks as well as display items. |
PaintArtifact m_currentPaintArtifact; |
@@ -228,19 +220,7 @@ private: |
DisplayItemList m_newDisplayItemList; |
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<const 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<const DisplayItemClient*> m_clientsCheckedPaintInvalidation; |
- |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
// 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<const DisplayItemClient*> m_clientsWithPaintOffsetInvalidations; |
@@ -264,7 +244,7 @@ private: |
unsigned m_nextScope; |
Vector<unsigned> m_scopeStack; |
-#if ENABLE(ASSERT) |
+#if DCHECK_IS_ON() |
// Record the debug names of invalidated clients for assertion and debugging. |
Vector<String> m_invalidations; |
@@ -275,6 +255,8 @@ private: |
#endif |
OwnPtr<Vector<String>> m_trackedPaintInvalidationObjects; |
+ |
+ DisplayItemCacheGeneration m_currentCacheGeneration; |
}; |
} // namespace blink |