Chromium Code Reviews| 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 58f4ef34c8fafea1ed661c7ab4a9986c04be3bba..df884cacbbd574aaf9c6d461df0b3cf1a2c77b11 100644 |
| --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
| @@ -1756,6 +1756,7 @@ bool PaintLayerScrollableArea::computeNeedsCompositedScrolling( |
| return false; |
| bool needsCompositedScrolling = true; |
| + uint32_t mainThreadScrollingReasons = 0; |
| // TODO(flackr): Allow integer transforms as long as all of the ancestor |
| // transforms are also integer. |
| @@ -1771,18 +1772,23 @@ bool PaintLayerScrollableArea::computeNeedsCompositedScrolling( |
| !layer->compositor()->preferCompositingToLCDTextEnabled() && |
| !backgroundSupportsLCDText) { |
| if (layer->compositesWithOpacity()) { |
| - addStyleRelatedMainThreadScrollingReasons( |
| - MainThreadScrollingReason::kHasOpacityAndLCDText); |
| + mainThreadScrollingReasons |= |
| + MainThreadScrollingReason::kHasOpacityAndLCDText; |
| } |
| if (layer->compositesWithTransform()) { |
| - addStyleRelatedMainThreadScrollingReasons( |
| - MainThreadScrollingReason::kHasTransformAndLCDText); |
| + mainThreadScrollingReasons |= |
| + MainThreadScrollingReason::kHasTransformAndLCDText; |
| } |
| if (!layer->backgroundIsKnownToBeOpaqueInRect( |
| toLayoutBox(layer->layoutObject())->paddingBoxRect())) { |
| - addStyleRelatedMainThreadScrollingReasons( |
| - MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText); |
| + mainThreadScrollingReasons |= |
| + MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText; |
| } |
| + if (layer->backgroundPaintLocation() & BackgroundPaintInGraphicsLayer) { |
| + layer->layoutObject()->backgroundPaintLocation( |
|
flackr
2017/01/23 20:52:12
Can we pass mainThreadScrollingReasons into the ca
|
| + &mainThreadScrollingReasons); |
| + } |
| + |
| needsCompositedScrolling = false; |
| } |
| @@ -1791,21 +1797,25 @@ bool PaintLayerScrollableArea::computeNeedsCompositedScrolling( |
| // behind dashed borders). Resolve this case, or not, and update this check |
| // with the results. |
| if (layer->layoutObject()->style()->hasBorderRadius()) { |
| - addStyleRelatedMainThreadScrollingReasons( |
| - MainThreadScrollingReason::kHasBorderRadius); |
| + mainThreadScrollingReasons |= MainThreadScrollingReason::kHasBorderRadius; |
| needsCompositedScrolling = false; |
| } |
| if (layer->layoutObject()->hasClip() || layer->hasDescendantWithClipPath() || |
| layer->hasAncestorWithClipPath()) { |
| - addStyleRelatedMainThreadScrollingReasons( |
| - MainThreadScrollingReason::kHasClipRelatedProperty); |
| + mainThreadScrollingReasons |= |
| + MainThreadScrollingReason::kHasClipRelatedProperty; |
| needsCompositedScrolling = false; |
| } |
| + |
| + if (mainThreadScrollingReasons) { |
| + addStyleRelatedMainThreadScrollingReasons(mainThreadScrollingReasons); |
| + } |
| + |
| return needsCompositedScrolling; |
| } |
| void PaintLayerScrollableArea::addStyleRelatedMainThreadScrollingReasons( |
| - const uint32_t reason) { |
| + const uint32_t reasons) { |
| LocalFrame* frame = box().frame(); |
| if (!frame) |
| return; |
| @@ -1813,8 +1823,14 @@ void PaintLayerScrollableArea::addStyleRelatedMainThreadScrollingReasons( |
| if (!frameView) |
| return; |
| - frameView->adjustStyleRelatedMainThreadScrollingReasons(reason, true); |
| - m_reasons |= reason; |
| + for (uint32_t reason = 1; |
| + reason < 1 << MainThreadScrollingReason::kMainThreadScrollingReasonCount; |
| + reason <<= 1) { |
| + if (reasons & reason) { |
| + frameView->adjustStyleRelatedMainThreadScrollingReasons(reason, true); |
| + m_reasons |= reason; |
| + } |
| + } |
| } |
| void PaintLayerScrollableArea::removeStyleRelatedMainThreadScrollingReasons() { |