Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp

Issue 2773593005: Move logic of recording main thread scrolling reasons from cc to blink::ScrollManager (Closed)
Patch Set: nit Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index 9d2e3244d4bbc060bbbc4de05139fca73412ee74..b54debdf94fa585ad6f7cdec05cdeb0556f4b3b5 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -114,7 +114,7 @@ PaintLayerScrollableArea::PaintLayerScrollableArea(PaintLayer& layer)
scroll_corner_(nullptr),
resizer_(nullptr),
scroll_anchor_(this),
- reasons_(0)
+ non_composited_main_thread_scrolling_reasons_(0)
#if DCHECK_IS_ON()
,
has_been_disposed_(false)
@@ -152,7 +152,7 @@ void PaintLayerScrollableArea::Dispose() {
}
}
- RemoveStyleRelatedMainThreadScrollingReasons();
+ non_composited_main_thread_scrolling_reasons_ = 0;
if (ScrollingCoordinator* scrolling_coordinator = GetScrollingCoordinator())
scrolling_coordinator->WillDestroyScrollableArea(this);
@@ -1796,6 +1796,7 @@ bool PaintLayerScrollableArea::ShouldScrollOnMainThread() const {
bool PaintLayerScrollableArea::ComputeNeedsCompositedScrolling(
const LCDTextMode mode,
const PaintLayer* layer) {
+ non_composited_main_thread_scrolling_reasons_ = 0;
if (!layer->ScrollsOverflow())
return false;
@@ -1810,14 +1811,14 @@ bool PaintLayerScrollableArea::ComputeNeedsCompositedScrolling(
return false;
bool needs_composited_scrolling = true;
- uint32_t main_thread_scrolling_reasons = 0;
// TODO(flackr): Allow integer transforms as long as all of the ancestor
// transforms are also integer.
bool background_supports_lcd_text =
RuntimeEnabledFeatures::compositeOpaqueScrollersEnabled() &&
layer->GetLayoutObject().Style()->IsStackingContext() &&
- layer->GetBackgroundPaintLocation(&main_thread_scrolling_reasons) &
+ layer->GetBackgroundPaintLocation(
+ &non_composited_main_thread_scrolling_reasons_) &
kBackgroundPaintInScrollingContents &&
layer->BackgroundIsKnownToBeOpaqueInRect(
ToLayoutBox(layer->GetLayoutObject()).PaddingBoxRect()) &&
@@ -1827,16 +1828,16 @@ bool PaintLayerScrollableArea::ComputeNeedsCompositedScrolling(
!layer->Compositor()->PreferCompositingToLCDTextEnabled() &&
!background_supports_lcd_text) {
if (layer->CompositesWithOpacity()) {
- main_thread_scrolling_reasons |=
+ non_composited_main_thread_scrolling_reasons_ |=
MainThreadScrollingReason::kHasOpacityAndLCDText;
}
if (layer->CompositesWithTransform()) {
- main_thread_scrolling_reasons |=
+ non_composited_main_thread_scrolling_reasons_ |=
MainThreadScrollingReason::kHasTransformAndLCDText;
}
if (!layer->BackgroundIsKnownToBeOpaqueInRect(
ToLayoutBox(layer->GetLayoutObject()).PaddingBoxRect())) {
- main_thread_scrolling_reasons |=
+ non_composited_main_thread_scrolling_reasons_ |=
MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText;
}
@@ -1848,68 +1849,22 @@ bool PaintLayerScrollableArea::ComputeNeedsCompositedScrolling(
// behind dashed borders). Resolve this case, or not, and update this check
// with the results.
if (layer->GetLayoutObject().Style()->HasBorderRadius()) {
- main_thread_scrolling_reasons |=
+ non_composited_main_thread_scrolling_reasons_ |=
MainThreadScrollingReason::kHasBorderRadius;
needs_composited_scrolling = false;
}
if (layer->GetLayoutObject().HasClip() ||
layer->HasDescendantWithClipPath() || layer->HasAncestorWithClipPath()) {
- main_thread_scrolling_reasons |=
+ non_composited_main_thread_scrolling_reasons_ |=
MainThreadScrollingReason::kHasClipRelatedProperty;
needs_composited_scrolling = false;
}
flackr 2017/04/11 19:35:36 Can you add a check that the reasons are one of th
yigu 2017/04/11 21:28:11 Done.
- if (main_thread_scrolling_reasons) {
- AddStyleRelatedMainThreadScrollingReasons(main_thread_scrolling_reasons);
- }
-
return needs_composited_scrolling;
}
-void PaintLayerScrollableArea::AddStyleRelatedMainThreadScrollingReasons(
- const uint32_t reasons) {
- LocalFrame* frame = Box().GetFrame();
- if (!frame)
- return;
- FrameView* frame_view = frame->View();
- if (!frame_view)
- return;
-
- for (uint32_t reason = 1;
- reason < 1 << MainThreadScrollingReason::kMainThreadScrollingReasonCount;
- reason <<= 1) {
- if (reasons & reason) {
- frame_view->AdjustStyleRelatedMainThreadScrollingReasons(reason, true);
- reasons_ |= reason;
- }
- }
-}
-
-void PaintLayerScrollableArea::RemoveStyleRelatedMainThreadScrollingReasons() {
- LocalFrame* frame = Box().GetFrame();
- if (!frame)
- return;
- FrameView* frame_view = frame->View();
- if (!frame_view)
- return;
-
- // Decrease the number of layers that have any main thread
- // scrolling reasons stored in FrameView
- for (uint32_t i = 0;
- i < MainThreadScrollingReason::kMainThreadScrollingReasonCount; ++i) {
- uint32_t reason = 1 << i;
- if (HasMainThreadScrollingReason(reason)) {
- reasons_ &= ~reason;
- frame_view->AdjustStyleRelatedMainThreadScrollingReasons(reason, false);
- }
- }
-}
-
void PaintLayerScrollableArea::UpdateNeedsCompositedScrolling(
LCDTextMode mode) {
- // Clear all style related main thread scrolling reasons, if any,
- // before calling computeNeedsCompositedScrolling
- RemoveStyleRelatedMainThreadScrollingReasons();
const bool needs_composited_scrolling =
ComputeNeedsCompositedScrolling(mode, Layer());

Powered by Google App Engine
This is Rietveld 408576698