Chromium Code Reviews| Index: Source/core/paint/LayoutObjectSubtreeRecorder.h |
| diff --git a/Source/core/paint/LayoutObjectSubtreeRecorder.h b/Source/core/paint/LayoutObjectSubtreeRecorder.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2f0f0f88356b0cab0627388c757eb6696a62b0cd |
| --- /dev/null |
| +++ b/Source/core/paint/LayoutObjectSubtreeRecorder.h |
| @@ -0,0 +1,54 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef LayoutObjectSubtreeRecorder_h |
| +#define LayoutObjectSubtreeRecorder_h |
| + |
| +#include "core/layout/LayoutObject.h" |
| +#include "core/paint/PaintPhase.h" |
| +#include "platform/graphics/paint/SubtreeRecorder.h" |
| + |
| +namespace blink { |
| + |
| +class GraphicsContext; |
| + |
| +// Convenience wrapper of SubtreeRecorder for LayoutObject painters. |
|
pdr.
2015/08/20 22:45:06
Do we need subtree recorders for anything but layo
Xianzhu
2015/08/21 00:31:38
Done.
Previously I moved SubtreeRecorder from cor
|
| +class LayoutObjectSubtreeRecorder final { |
| +public: |
| + LayoutObjectSubtreeRecorder(GraphicsContext& context, const LayoutObject& layoutObject, PaintPhase phase) |
| + : m_canUseCache(false) |
| +#if ENABLE(ASSERT) |
| +#endif |
| + { |
| + if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
| + return; |
| + if (!needsSubtreeRecorder(layoutObject)) |
| + return; |
| + |
| + m_canUseCache = !layoutObject.shouldCheckForRepaint() && SubtreeRecorder::useCachedSubtreeIfPossible(context, layoutObject, phase); |
| + if (!m_canUseCache) |
| + m_subtreeRecorder.emplace(context, layoutObject, phase); |
| + } |
| + |
| + bool canUseCache() const { return m_canUseCache; } |
| + |
| +private: |
| + // We need to balance the benefit of subtree optimization and the cost of subtree display items. |
| + // Only output subtree information if the block has multiple children or multiple line boxes. |
| + static bool needsSubtreeRecorder(const LayoutObject& layoutObject) |
| + { |
| + return (layoutObject.slowFirstChild() && layoutObject.slowFirstChild()->nextSibling()) |
| + || (layoutObject.isLayoutBlockFlow() && toLayoutBlockFlow(layoutObject).firstLineBox() && toLayoutBlockFlow(layoutObject).firstLineBox()->nextLineBox()); |
| + } |
| + |
| + Optional<SubtreeRecorder> m_subtreeRecorder; |
| + bool m_canUseCache; |
|
pdr.
2015/08/20 22:45:06
I think we can reuse the pointer in m_subtreeRecor
Xianzhu
2015/08/21 00:31:38
Done.
|
| +#if ENABLE(ASSERT) |
|
pdr.
2015/08/20 22:45:06
Oops
Xianzhu
2015/08/21 00:31:38
Done.
|
| + |
| +#endif |
| +}; |
| + |
| +} // namespace blink |
| + |
| +#endif // LayoutObjectSubtreeRecorder_h |