Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.cpp |
| diff --git a/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.cpp b/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.cpp |
| index 706927c1563d4532d93a775f2b695c972d734940..e34a88ca79f2b62ca056d2ed10aa62720599058a 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/paint/DisplayItemList.cpp |
| @@ -102,7 +102,8 @@ void DisplayItemList::endScope() |
| void DisplayItemList::invalidate(const DisplayItemClientWrapper& client, PaintInvalidationReason paintInvalidationReason, const IntRect& previousPaintInvalidationRect, const IntRect& newPaintInvalidationRect) |
| { |
| - invalidateUntracked(client.displayItemClient()); |
| + invalidateClient(client); |
| + |
| if (RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled()) { |
| Invalidation invalidation = { previousPaintInvalidationRect, paintInvalidationReason }; |
| if (!previousPaintInvalidationRect.isEmpty()) |
| @@ -112,15 +113,19 @@ void DisplayItemList::invalidate(const DisplayItemClientWrapper& client, PaintIn |
| m_invalidations.append(invalidation); |
| } |
| } |
| +} |
| +void DisplayItemList::invalidateClient(const DisplayItemClientWrapper& client) |
| +{ |
| + invalidateUntracked(client.displayItemClient()); |
| if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && m_trackedPaintInvalidationObjects) |
| m_trackedPaintInvalidationObjects->append(client.debugName()); |
| } |
| void DisplayItemList::invalidateUntracked(DisplayItemClient client) |
| { |
| - // Can only be called during layout/paintInvalidation, not during painting. |
| - ASSERT(m_newDisplayItems.isEmpty()); |
| + // This can be called during painting, but we can't invalidate already painted clients. |
| + ASSERT(!m_newDisplayItemIndicesByClient.contains(client)); |
| updateValidlyCachedClientsIfNeeded(); |
| m_validlyCachedClients.remove(client); |
| } |
| @@ -148,20 +153,11 @@ bool DisplayItemList::clientCacheIsValid(DisplayItemClient client) const |
| void DisplayItemList::invalidatePaintOffset(const DisplayItemClientWrapper& client) |
| { |
| ASSERT(RuntimeEnabledFeatures::slimmingPaintOffsetCachingEnabled()); |
| - |
| - updateValidlyCachedClientsIfNeeded(); |
| - m_validlyCachedClients.remove(client.displayItemClient()); |
| - |
| - if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && m_trackedPaintInvalidationObjects) |
| - m_trackedPaintInvalidationObjects->append(client.debugName()); |
| + invalidateClient(client); |
| #if ENABLE(ASSERT) |
| + ASSERT(!paintOffsetWasInvalidated(client.displayItemClient())); |
| m_clientsWithPaintOffsetInvalidations.add(client.displayItemClient()); |
| - |
| - // Ensure no phases slipped in using the old paint offset which would indicate |
| - // different phases used different paint offsets, which should not happen. |
| - for (const auto& item : m_newDisplayItems) |
| - ASSERT(!item.isCached() || item.client() != client.displayItemClient()); |
|
chrishtr
2015/10/05 21:50:35
Why remove these asserts?
Xianzhu
2015/10/05 22:04:16
Now this method calls invalidateUntracked(). The a
|
| #endif |
| } |
| @@ -270,6 +266,7 @@ void DisplayItemList::commitNewDisplayItems(GraphicsLayer* graphicsLayer) |
| for (const auto& invalidation : m_invalidations) |
| graphicsLayer->setNeedsDisplayInRect(invalidation.rect, invalidation.invalidationReason); |
| m_invalidations.clear(); |
| + m_clientsCheckedPaintInvalidation.clear(); |
| } |
| // These data structures are used during painting only. |
| @@ -279,6 +276,7 @@ void DisplayItemList::commitNewDisplayItems(GraphicsLayer* graphicsLayer) |
| ASSERT(!skippingCache()); |
| #if ENABLE(ASSERT) |
| m_newDisplayItemIndicesByClient.clear(); |
| + m_clientsWithPaintOffsetInvalidations.clear(); |
| #endif |
| if (m_currentDisplayItems.isEmpty()) { |
| @@ -369,10 +367,6 @@ void DisplayItemList::commitNewDisplayItems(GraphicsLayer* graphicsLayer) |
| m_validlyCachedClientsDirty = true; |
| m_currentDisplayItems.swap(updatedList); |
| m_numCachedItems = 0; |
| - |
| -#if ENABLE(ASSERT) |
| - m_clientsWithPaintOffsetInvalidations.clear(); |
| -#endif |
| } |
| size_t DisplayItemList::approximateUnsharedMemoryUsage() const |