Index: Source/platform/graphics/paint/SubsequenceRecorder.cpp |
diff --git a/Source/platform/graphics/paint/SubsequenceRecorder.cpp b/Source/platform/graphics/paint/SubsequenceRecorder.cpp |
index 4f54dbff0cc2797c37d6c7e5174a82f4f75ef98c..4051b7ed41c4ccad06c06a07667bf6c30b52e4b8 100644 |
--- a/Source/platform/graphics/paint/SubsequenceRecorder.cpp |
+++ b/Source/platform/graphics/paint/SubsequenceRecorder.cpp |
@@ -33,11 +33,13 @@ bool SubsequenceRecorder::useCachedSubsequenceIfPossible(GraphicsContext& contex |
SubsequenceRecorder::SubsequenceRecorder(GraphicsContext& context, const DisplayItemClientWrapper& client) |
: m_displayItemList(context.displayItemList()) |
, m_client(client) |
+ , m_beginSubsequenceIndex(0) |
{ |
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
return; |
ASSERT(m_displayItemList); |
+ m_beginSubsequenceIndex = m_displayItemList->newDisplayItems().size(); |
m_displayItemList->createAndAppend<BeginSubsequenceDisplayItem>(m_client); |
} |
@@ -46,9 +48,26 @@ SubsequenceRecorder::~SubsequenceRecorder() |
if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
return; |
- // Don't remove no-op BeginSubsequence/EndSubsequence pairs because we need to |
- // match them later with CachedSubsequences. |
+ if (m_displayItemList->lastDisplayItemIsNoopBegin()) { |
+ ASSERT(m_beginSubsequenceIndex == m_displayItemList->newDisplayItems().size() - 1); |
+ // Remove uncacheable no-op BeginSubsequence/EndSubsequence pairs. |
+ // Don't remove cacheable no-op pairs because we need to match them later with CachedSubsequences. |
+ if (m_displayItemList->newDisplayItems().last().skippedCache()) { |
+ m_displayItemList->removeLastDisplayItem(); |
+ return; |
+ } |
+ } |
+ |
m_displayItemList->createAndAppend<EndSubsequenceDisplayItem>(m_client); |
} |
+void SubsequenceRecorder::setUncacheable() |
+{ |
+ if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
+ return; |
+ |
+ ASSERT(m_displayItemList->newDisplayItems()[m_beginSubsequenceIndex].type() == DisplayItem::BeginSubsequence); |
+ m_displayItemList->newDisplayItems()[m_beginSubsequenceIndex].setSkippedCache(); |
+} |
+ |
} // namespace blink |