OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/paint/PaintPropertyTreeBuilder.h" | 5 #include "core/paint/PaintPropertyTreeBuilder.h" |
6 | 6 |
7 #include "core/dom/DOMNodeIds.h" | 7 #include "core/dom/DOMNodeIds.h" |
8 #include "core/frame/FrameView.h" | 8 #include "core/frame/FrameView.h" |
9 #include "core/frame/LocalFrame.h" | 9 #include "core/frame/LocalFrame.h" |
10 #include "core/frame/Settings.h" | 10 #include "core/frame/Settings.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 static bool updateScrollTranslation( | 81 static bool updateScrollTranslation( |
82 FrameView& frameView, | 82 FrameView& frameView, |
83 PassRefPtr<const TransformPaintPropertyNode> parent, | 83 PassRefPtr<const TransformPaintPropertyNode> parent, |
84 const TransformationMatrix& matrix, | 84 const TransformationMatrix& matrix, |
85 const FloatPoint3D& origin, | 85 const FloatPoint3D& origin, |
86 PassRefPtr<const ScrollPaintPropertyNode> scrollParent, | 86 PassRefPtr<const ScrollPaintPropertyNode> scrollParent, |
87 const IntSize& clip, | 87 const IntSize& clip, |
88 const IntSize& bounds, | 88 const IntSize& bounds, |
89 bool userScrollableHorizontal, | 89 bool userScrollableHorizontal, |
90 bool userScrollableVertical, | 90 bool userScrollableVertical, |
91 MainThreadScrollingReasons mainThreadScrollingReasons) { | 91 MainThreadScrollingReasons mainThreadScrollingReasons, |
| 92 WebLayerScrollClient* scrollClient) { |
92 DCHECK(!RuntimeEnabledFeatures::rootLayerScrollingEnabled()); | 93 DCHECK(!RuntimeEnabledFeatures::rootLayerScrollingEnabled()); |
93 CompositorElementId compositorElementId = | 94 CompositorElementId compositorElementId = |
94 createDomNodeBasedCompositorElementId(*frameView.layoutView()); | 95 createDomNodeBasedCompositorElementId(*frameView.layoutView()); |
95 if (auto* existingScrollTranslation = frameView.scrollTranslation()) { | 96 if (auto* existingScrollTranslation = frameView.scrollTranslation()) { |
96 auto existingReasons = | 97 auto existingReasons = |
97 existingScrollTranslation->scrollNode()->mainThreadScrollingReasons(); | 98 existingScrollTranslation->scrollNode()->mainThreadScrollingReasons(); |
98 existingScrollTranslation->updateScrollTranslation( | 99 existingScrollTranslation->updateScrollTranslation( |
99 std::move(parent), matrix, origin, false, 0, CompositingReasonNone, | 100 std::move(parent), matrix, origin, false, 0, CompositingReasonNone, |
100 compositorElementId, std::move(scrollParent), clip, bounds, | 101 compositorElementId, std::move(scrollParent), clip, bounds, |
101 userScrollableHorizontal, userScrollableVertical, | 102 userScrollableHorizontal, userScrollableVertical, |
102 mainThreadScrollingReasons); | 103 mainThreadScrollingReasons, scrollClient); |
103 return existingReasons != mainThreadScrollingReasons; | 104 return existingReasons != mainThreadScrollingReasons; |
104 } | 105 } |
105 frameView.setScrollTranslation( | 106 frameView.setScrollTranslation( |
106 TransformPaintPropertyNode::createScrollTranslation( | 107 TransformPaintPropertyNode::createScrollTranslation( |
107 std::move(parent), matrix, origin, false, 0, CompositingReasonNone, | 108 std::move(parent), matrix, origin, false, 0, CompositingReasonNone, |
108 compositorElementId, std::move(scrollParent), clip, bounds, | 109 compositorElementId, std::move(scrollParent), clip, bounds, |
109 userScrollableHorizontal, userScrollableVertical, | 110 userScrollableHorizontal, userScrollableVertical, |
110 mainThreadScrollingReasons)); | 111 mainThreadScrollingReasons, scrollClient)); |
111 return true; | 112 return true; |
112 } | 113 } |
113 | 114 |
114 static MainThreadScrollingReasons mainThreadScrollingReasons( | 115 static MainThreadScrollingReasons mainThreadScrollingReasons( |
115 const FrameView& frameView, | 116 const FrameView& frameView, |
116 MainThreadScrollingReasons ancestorReasons) { | 117 MainThreadScrollingReasons ancestorReasons) { |
117 auto reasons = ancestorReasons; | 118 auto reasons = ancestorReasons; |
118 if (!frameView.frame().settings()->getThreadedScrollingEnabled()) | 119 if (!frameView.frame().settings()->getThreadedScrollingEnabled()) |
119 reasons |= MainThreadScrollingReason::kThreadedScrollingDisabled; | 120 reasons |= MainThreadScrollingReason::kThreadedScrollingDisabled; |
120 if (frameView.hasBackgroundAttachmentFixedObjects()) | 121 if (frameView.hasBackgroundAttachmentFixedObjects()) |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 bool userScrollableVertical = | 169 bool userScrollableVertical = |
169 frameView.userInputScrollable(VerticalScrollbar); | 170 frameView.userInputScrollable(VerticalScrollbar); |
170 | 171 |
171 auto ancestorReasons = | 172 auto ancestorReasons = |
172 context.current.scroll->mainThreadScrollingReasons(); | 173 context.current.scroll->mainThreadScrollingReasons(); |
173 auto reasons = mainThreadScrollingReasons(frameView, ancestorReasons); | 174 auto reasons = mainThreadScrollingReasons(frameView, ancestorReasons); |
174 | 175 |
175 context.forceSubtreeUpdate |= updateScrollTranslation( | 176 context.forceSubtreeUpdate |= updateScrollTranslation( |
176 frameView, frameView.preTranslation(), frameScroll, FloatPoint3D(), | 177 frameView, frameView.preTranslation(), frameScroll, FloatPoint3D(), |
177 context.current.scroll, scrollClip, scrollBounds, | 178 context.current.scroll, scrollClip, scrollBounds, |
178 userScrollableHorizontal, userScrollableVertical, reasons); | 179 userScrollableHorizontal, userScrollableVertical, reasons, |
| 180 frameView.getScrollableArea()); |
179 } else { | 181 } else { |
180 if (frameView.scrollTranslation()) { | 182 if (frameView.scrollTranslation()) { |
181 // Ensure pre-existing properties are cleared if there is no scrolling. | 183 // Ensure pre-existing properties are cleared if there is no scrolling. |
182 frameView.setScrollTranslation(nullptr); | 184 frameView.setScrollTranslation(nullptr); |
183 // Rebuild all descendant properties because a property was removed. | 185 // Rebuild all descendant properties because a property was removed. |
184 context.forceSubtreeUpdate = true; | 186 context.forceSubtreeUpdate = true; |
185 } | 187 } |
186 } | 188 } |
187 } | 189 } |
188 | 190 |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 PaintPropertyTreeBuilderContext& context) { | 741 PaintPropertyTreeBuilderContext& context) { |
740 if (object.needsPaintPropertyUpdate() || context.forceSubtreeUpdate) { | 742 if (object.needsPaintPropertyUpdate() || context.forceSubtreeUpdate) { |
741 bool needsScrollProperties = false; | 743 bool needsScrollProperties = false; |
742 if (object.hasOverflowClip()) { | 744 if (object.hasOverflowClip()) { |
743 auto ancestorReasons = | 745 auto ancestorReasons = |
744 context.current.scroll->mainThreadScrollingReasons(); | 746 context.current.scroll->mainThreadScrollingReasons(); |
745 auto reasons = mainThreadScrollingReasons(object, ancestorReasons); | 747 auto reasons = mainThreadScrollingReasons(object, ancestorReasons); |
746 bool scrollNodeNeededForMainThreadReasons = ancestorReasons != reasons; | 748 bool scrollNodeNeededForMainThreadReasons = ancestorReasons != reasons; |
747 | 749 |
748 const LayoutBox& box = toLayoutBox(object); | 750 const LayoutBox& box = toLayoutBox(object); |
749 const auto* scrollableArea = box.getScrollableArea(); | 751 auto* scrollableArea = box.getScrollableArea(); |
750 IntSize scrollOffset = box.scrolledContentOffset(); | 752 IntSize scrollOffset = box.scrolledContentOffset(); |
751 if (scrollNodeNeededForMainThreadReasons || !scrollOffset.isZero() || | 753 if (scrollNodeNeededForMainThreadReasons || !scrollOffset.isZero() || |
752 scrollableArea->scrollsOverflow()) { | 754 scrollableArea->scrollsOverflow()) { |
753 needsScrollProperties = true; | 755 needsScrollProperties = true; |
754 auto& properties = | 756 auto& properties = |
755 object.getMutableForPainting().ensurePaintProperties(); | 757 object.getMutableForPainting().ensurePaintProperties(); |
756 | 758 |
757 IntSize scrollClip = scrollableArea->visibleContentRect().size(); | 759 IntSize scrollClip = scrollableArea->visibleContentRect().size(); |
758 IntSize scrollBounds = scrollableArea->contentsSize(); | 760 IntSize scrollBounds = scrollableArea->contentsSize(); |
759 bool userScrollableHorizontal = | 761 bool userScrollableHorizontal = |
(...skipping 12 matching lines...) Expand all Loading... |
772 CompositorElementId compositorElementId = | 774 CompositorElementId compositorElementId = |
773 createDomNodeBasedCompositorElementId(object); | 775 createDomNodeBasedCompositorElementId(object); |
774 TransformationMatrix matrix = TransformationMatrix().translate( | 776 TransformationMatrix matrix = TransformationMatrix().translate( |
775 -scrollOffset.width(), -scrollOffset.height()); | 777 -scrollOffset.width(), -scrollOffset.height()); |
776 context.forceSubtreeUpdate |= properties.updateScrollTranslation( | 778 context.forceSubtreeUpdate |= properties.updateScrollTranslation( |
777 context.current.transform, matrix, FloatPoint3D(), | 779 context.current.transform, matrix, FloatPoint3D(), |
778 context.current.shouldFlattenInheritedTransform, | 780 context.current.shouldFlattenInheritedTransform, |
779 context.current.renderingContextId, CompositingReasonNone, | 781 context.current.renderingContextId, CompositingReasonNone, |
780 compositorElementId, context.current.scroll, scrollClip, | 782 compositorElementId, context.current.scroll, scrollClip, |
781 scrollBounds, userScrollableHorizontal, userScrollableVertical, | 783 scrollBounds, userScrollableHorizontal, userScrollableVertical, |
782 reasons); | 784 reasons, scrollableArea); |
783 } | 785 } |
784 } | 786 } |
785 | 787 |
786 if (!needsScrollProperties) { | 788 if (!needsScrollProperties) { |
787 // Ensure pre-existing properties are cleared. | 789 // Ensure pre-existing properties are cleared. |
788 if (auto* properties = object.getMutableForPainting().paintProperties()) | 790 if (auto* properties = object.getMutableForPainting().paintProperties()) |
789 context.forceSubtreeUpdate |= properties->clearScrollTranslation(); | 791 context.forceSubtreeUpdate |= properties->clearScrollTranslation(); |
790 } | 792 } |
791 } | 793 } |
792 | 794 |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 updateOverflowClip(object, context); | 978 updateOverflowClip(object, context); |
977 updatePerspective(object, context); | 979 updatePerspective(object, context); |
978 updateSvgLocalToBorderBoxTransform(object, context); | 980 updateSvgLocalToBorderBoxTransform(object, context); |
979 updateScrollAndScrollTranslation(object, context); | 981 updateScrollAndScrollTranslation(object, context); |
980 updateOutOfFlowContext(object, context); | 982 updateOutOfFlowContext(object, context); |
981 | 983 |
982 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate(); | 984 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate(); |
983 } | 985 } |
984 | 986 |
985 } // namespace blink | 987 } // namespace blink |
OLD | NEW |