Chromium Code Reviews| Index: third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| index fe04c5a66b7f62cd407af5223674f1da69f07753..e63b952b989ff24a13da3abf2683854e408293a0 100644 |
| --- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| @@ -94,7 +94,10 @@ ScrollingCoordinator::ScrollingCoordinator(Page* page) |
| m_touchEventTargetRectsAreDirty(false), |
| m_shouldScrollOnMainThreadDirty(false), |
| m_wasFrameScrollable(false), |
| - m_lastMainThreadScrollingReasons(0) {} |
| + m_lastMainThreadScrollingReasons(0), |
| + m_mainThreadScrollingReasonLayoutCounter( |
| + MainThreadScrollingReason::kMainThreadScrollingReasonCount, |
| + 0) {} |
| ScrollingCoordinator::~ScrollingCoordinator() { |
| DCHECK(!m_page); |
| @@ -1174,6 +1177,9 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() |
| if (frameView->hasBackgroundAttachmentFixedObjects()) |
| reasons |= |
| MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; |
| + |
| + reasons |= getMainThreadScrollingReasonsFromStyle(); |
| + |
| FrameView::ScrollingReasons scrollingReasons = |
| frameView->getScrollingReasons(); |
| const bool mayBeScrolledByInput = |
| @@ -1227,4 +1233,26 @@ bool ScrollingCoordinator::frameViewIsDirty() const { |
| return false; |
| } |
| +void ScrollingCoordinator::adjustMainThreadReasonsFromStyle(uint32_t reason, |
| + bool increase) { |
| + int index = MainThreadScrollingReason::getReasonIndex(reason); |
| + DCHECK_GE(index, 0); |
| + DCHECK_GE(m_mainThreadScrollingReasonLayoutCounter[index], 0); |
|
bokan
2016/12/14 13:28:59
This check should be below the following line.
yigu
2016/12/14 21:17:33
Done.
|
| + m_mainThreadScrollingReasonLayoutCounter[index] += increase ? 1 : -1; |
| +} |
| + |
| +MainThreadScrollingReasons |
| +ScrollingCoordinator::getMainThreadScrollingReasonsFromStyle() const { |
| + MainThreadScrollingReasons reasons = |
| + static_cast<MainThreadScrollingReasons>(0); |
| + for (uint32_t reason = 1; |
| + reason < MainThreadScrollingReason::kMainThreadScrollingReasonCount; |
| + ++reason) { |
| + if (m_mainThreadScrollingReasonLayoutCounter[reason] > 0) { |
| + reasons |= 1 << (reason - 1); |
| + } |
| + } |
| + return reasons; |
| +} |
| + |
| } // namespace blink |