Index: Source/platform/graphics/paint/SubtreeRecorder.cpp |
diff --git a/Source/platform/graphics/paint/SubtreeRecorder.cpp b/Source/platform/graphics/paint/SubtreeRecorder.cpp |
index 5cc1e8caf64f7784318d66d3480247c9ab8fd53c..bc88938534de27bf4ee62f6256e0774cb81e0156 100644 |
--- a/Source/platform/graphics/paint/SubtreeRecorder.cpp |
+++ b/Source/platform/graphics/paint/SubtreeRecorder.cpp |
@@ -13,46 +13,37 @@ |
namespace blink { |
-SubtreeRecorder::SubtreeRecorder(GraphicsContext& context, const DisplayItemClientWrapper& client, int paintPhase) |
- : m_displayItemList(context.displayItemList()) |
- , m_client(client) |
- , m_paintPhase(paintPhase) |
- , m_canUseCache(false) |
-#if ENABLE(ASSERT) |
- , m_checkedCanUseCache(false) |
-#endif |
+bool SubtreeRecorder::useCachedSubtreeIfPossible(GraphicsContext& context, const DisplayItemClientWrapper& client) |
{ |
- if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
- return; |
+ // The conditions of returning false is not complete for a specific client. |
+ // The client must check additional conditions before calling this function. |
- ASSERT(m_displayItemList); |
+ ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ ASSERT(context.displayItemList()); |
- // TODO(wangxianzhu): Implement subtree caching. |
+ if (context.displayItemList()->displayItemConstructionIsDisabled() || RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled()) |
+ return false; |
- if (!m_canUseCache) |
- m_displayItemList->createAndAppend<BeginSubtreeDisplayItem>(m_client, DisplayItem::paintPhaseToBeginSubtreeType(paintPhase)); |
+ if (!context.displayItemList()->clientCacheIsValid(client.displayItemClient())) |
+ return false; |
+ |
+ context.displayItemList()->createAndAppend<CachedDisplayItem>(client, DisplayItem::CachedSubtree); |
+ return true; |
} |
-SubtreeRecorder::~SubtreeRecorder() |
+SubtreeRecorder::SubtreeRecorder(GraphicsContext& context, const DisplayItemClientWrapper& client) |
+ : m_displayItemList(context.displayItemList()) |
+ , m_client(client) |
{ |
- if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
- return; |
- |
- ASSERT(m_checkedCanUseCache); |
- if (m_canUseCache) |
- m_displayItemList->createAndAppend<CachedDisplayItem>(m_client, DisplayItem::paintPhaseToCachedSubtreeType(m_paintPhase)); |
- else if (m_displayItemList->lastDisplayItemIsNoopBegin()) |
chrishtr
2015/08/25 23:48:19
The no-op optimization is no longer useful?
Xianzhu
2015/08/26 23:21:06
Right. The situation is similar to that of empty d
|
- m_displayItemList->removeLastDisplayItem(); |
- else |
- m_displayItemList->createAndAppend<EndSubtreeDisplayItem>(m_client, DisplayItem::paintPhaseToEndSubtreeType(m_paintPhase)); |
+ ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ ASSERT(m_displayItemList); |
+ m_displayItemList->createAndAppend<BeginSubtreeDisplayItem>(m_client); |
} |
-bool SubtreeRecorder::canUseCache() const |
+SubtreeRecorder::~SubtreeRecorder() |
{ |
-#if ENABLE(ASSERT) |
- m_checkedCanUseCache = true; |
-#endif |
- return m_canUseCache; |
+ ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
+ m_displayItemList->createAndAppend<EndSubtreeDisplayItem>(m_client); |
} |
} // namespace blink |