Chromium Code Reviews| Index: Source/core/paint/SubtreeRecorder.cpp |
| diff --git a/Source/core/paint/SubtreeRecorder.cpp b/Source/core/paint/SubtreeRecorder.cpp |
| index d748e39196b2ec755fa19617c2445772bff6523f..1a79c5af02dd3895ce316c66b40dba6e86599e5a 100644 |
| --- a/Source/core/paint/SubtreeRecorder.cpp |
| +++ b/Source/core/paint/SubtreeRecorder.cpp |
| @@ -17,12 +17,20 @@ SubtreeRecorder::SubtreeRecorder(GraphicsContext& context, const LayoutObject& s |
| : m_displayItemList(context.displayItemList()) |
| , m_subtreeRoot(subtreeRoot) |
| , m_paintPhase(paintPhase) |
| - , m_begun(false) |
| + , m_canUseCache(false) |
| +#if ENABLE(ASSERT) |
| + , m_checkedCanUseCache(false) |
| +#endif |
| { |
| if (!RuntimeEnabledFeatures::slimmingPaintEnabled()) |
| return; |
|
chrishtr
2015/08/11 20:29:15
Bail if phase 2 is not on
Xianzhu
2015/08/11 20:57:33
Done.
|
| ASSERT(m_displayItemList); |
| + |
| + // TODO(wangxianzhu): Implement subtree caching. |
| + |
| + if (!m_canUseCache) |
| + m_displayItemList->createAndAppend<BeginSubtreeDisplayItem>(m_subtreeRoot, DisplayItem::paintPhaseToBeginSubtreeType(paintPhase)); |
| } |
| SubtreeRecorder::~SubtreeRecorder() |
| @@ -30,22 +38,21 @@ SubtreeRecorder::~SubtreeRecorder() |
| if (!RuntimeEnabledFeatures::slimmingPaintEnabled()) |
| return; |
| - if (m_begun) { |
| - if (m_displayItemList->lastDisplayItemIsNoopBegin()) |
| - m_displayItemList->removeLastDisplayItem(); |
| - else |
| - m_displayItemList->createAndAppend<EndSubtreeDisplayItem>(m_subtreeRoot, DisplayItem::paintPhaseToEndSubtreeType(m_paintPhase)); |
| - } |
| + ASSERT(m_checkedCanUseCache); |
| + if (m_canUseCache) |
| + m_displayItemList->createAndAppend<SubtreeCachedDisplayItem>(m_subtreeRoot, DisplayItem::paintPhaseToSubtreeCachedType(m_paintPhase)); |
| + else if (m_displayItemList->lastDisplayItemIsNoopBegin()) |
| + m_displayItemList->removeLastDisplayItem(); |
| + else |
| + m_displayItemList->createAndAppend<EndSubtreeDisplayItem>(m_subtreeRoot, DisplayItem::paintPhaseToEndSubtreeType(m_paintPhase)); |
| } |
| -void SubtreeRecorder::begin() |
| +bool SubtreeRecorder::canUseCache() const |
| { |
| - if (!RuntimeEnabledFeatures::slimmingPaintEnabled()) |
| - return; |
| - if (m_displayItemList->displayItemConstructionIsDisabled()) |
| - return; |
| - m_displayItemList->createAndAppend<BeginSubtreeDisplayItem>(m_subtreeRoot, DisplayItem::paintPhaseToBeginSubtreeType(m_paintPhase)); |
| - m_begun = true; |
| +#if ENABLE(ASSERT) |
| + m_checkedCanUseCache = true; |
| +#endif |
| + return m_canUseCache; |
| } |
| } // namespace blink |