Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
index 0ce6ff6e4306a250840b5e70777ef9786ecd3089..e865b4025c9ebe78df5878752cef66db106e8c0b 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp |
@@ -20,28 +20,49 @@ |
namespace blink { |
-void PaintPropertyTreeBuilder::buildTreeRootNodes(FrameView& rootFrame, PaintPropertyTreeBuilderContext& context) |
+namespace { |
+ TransformPaintPropertyNode* rootTransformNode() |
+ { |
+ DEFINE_STATIC_REF(TransformPaintPropertyNode, rootTransform, (TransformPaintPropertyNode::create(nullptr, TransformationMatrix(), FloatPoint3D()))); |
+ return rootTransform; |
+ } |
+ |
+ ClipPaintPropertyNode* rootClipNode() |
+ { |
+ DEFINE_STATIC_REF(ClipPaintPropertyNode, rootClip, (ClipPaintPropertyNode::create(nullptr, rootTransformNode(), FloatRoundedRect(LayoutRect::infiniteIntRect())))); |
+ return rootClip; |
+ } |
+ |
+ EffectPaintPropertyNode* rootEffectNode() |
+ { |
+ DEFINE_STATIC_REF(EffectPaintPropertyNode, rootEffect, (EffectPaintPropertyNode::create(nullptr, 1.0))); |
+ return rootEffect; |
+ } |
+ |
+ ScrollPaintPropertyNode* rootScrollNode() |
+ { |
+ DEFINE_STATIC_REF(ScrollPaintPropertyNode, rootScroll, (ScrollPaintPropertyNode::create(nullptr, rootTransformNode(), IntSize(), IntSize(), false, false))); |
+ return rootScroll; |
+ } |
+} |
+ |
+PaintPropertyTreeBuilderContext PaintPropertyTreeBuilder::setupInitialContext() |
{ |
+ PaintPropertyTreeBuilderContext context; |
+ |
+ // TODO(pdr): Update the root layer scrolling paths to use the static root nodes. |
if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
- return; |
+ return context; |
- if (!rootFrame.rootTransform() || rootFrame.rootTransform()->parent()) { |
- rootFrame.setRootTransform(TransformPaintPropertyNode::create(nullptr, TransformationMatrix(), FloatPoint3D())); |
- rootFrame.setRootClip(ClipPaintPropertyNode::create(nullptr, rootFrame.rootTransform(), FloatRoundedRect(LayoutRect::infiniteIntRect()))); |
- rootFrame.setRootEffect(EffectPaintPropertyNode::create(nullptr, 1.0)); |
- rootFrame.setRootScroll(ScrollPaintPropertyNode::create(nullptr, rootFrame.rootTransform(), IntSize(), IntSize(), false, false)); |
- } else { |
- DCHECK(rootFrame.rootClip() && !rootFrame.rootClip()->parent()); |
- DCHECK(rootFrame.rootEffect() && !rootFrame.rootEffect()->parent()); |
- DCHECK(rootFrame.rootScroll() && !rootFrame.rootScroll()->parent()); |
- // Ensure main thread scroll reasons are reset. |
- rootFrame.rootScroll()->update(nullptr, rootFrame.rootTransform(), IntSize(), IntSize(), false, false); |
- } |
+ context.current.transform = context.absolutePosition.transform = context.fixedPosition.transform = rootTransformNode(); |
+ context.current.scroll = context.absolutePosition.scroll = context.fixedPosition.scroll = rootScrollNode(); |
+ context.current.clip = context.absolutePosition.clip = context.fixedPosition.clip = rootClipNode(); |
+ context.currentEffect = rootEffectNode(); |
+ |
+ // Ensure scroll tree properties are reset. They will be rebuilt during the tree walk. |
+ rootScrollNode()->clearMainThreadScrollingReasons(); |
- context.current.transform = context.absolutePosition.transform = context.fixedPosition.transform = rootFrame.rootTransform(); |
- context.current.scroll = rootFrame.rootScroll(); |
- context.current.clip = context.absolutePosition.clip = context.fixedPosition.clip = rootFrame.rootClip(); |
- context.currentEffect = rootFrame.rootEffect(); |
+ return context; |
} |
void createOrUpdateFrameViewPreTranslation(FrameView& frameView, |
@@ -156,6 +177,9 @@ void PaintPropertyTreeBuilder::buildTreeNodes(FrameView& frameView, PaintPropert |
context.fixedPosition = context.current; |
context.fixedPosition.transform = frameView.preTranslation(); |
context.fixedPosition.scroll = initialScroll; |
+ |
+ std::unique_ptr<PropertyTreeState> contentsState(new PropertyTreeState(context.current.transform, context.current.clip, context.currentEffect, context.current.scroll)); |
+ frameView.setTotalPropertyTreeStateForContents(std::move(contentsState)); |
} |
void PaintPropertyTreeBuilder::updatePaintOffsetTranslation(const LayoutObject& object, PaintPropertyTreeBuilderContext& context) |