diff options
author | ymalik <ymalik@chromium.org> | 2016-02-24 18:44:24 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-25 02:45:18 +0000 |
commit | 002b8a254e34de53be24bea77e3e3ad3fd640f29 (patch) | |
tree | 601e208f9fa38fa11e67cc367dd84cd7487410c2 /cc/blink | |
parent | d63bc982ba3444b1cbc9884cef9e20b2635c66ea (diff) | |
download | chromium_src-002b8a254e34de53be24bea77e3e3ad3fd640f29.zip chromium_src-002b8a254e34de53be24bea77e3e3ad3fd640f29.tar.gz chromium_src-002b8a254e34de53be24bea77e3e3ad3fd640f29.tar.bz2 |
Fix smooth scroll jump when switching scroll handling from MT to CC
To simulate position:sticky, some websites have JS code that conditionally
attaches position:fixed depending on the scroll offset. This CL finishes the
the animations on MT before switching to compositor scrolling.
ScrollingCoordinator proxys the call to clear main thread scrolling reasons to
ScrollAnimator which calls weblayer->clearMTSReasons when the scroll offset
animation is finished. ScrollAnimator adds a temporary main thread scrolling
reason until the animation is finished.
BUG=581875
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1648293003
Cr-Commit-Position: refs/heads/master@{#377476}
Diffstat (limited to 'cc/blink')
-rw-r--r-- | cc/blink/web_layer_impl.cc | 10 | ||||
-rw-r--r-- | cc/blink/web_layer_impl.h | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/cc/blink/web_layer_impl.cc b/cc/blink/web_layer_impl.cc index e497d33..eed02ff 100644 --- a/cc/blink/web_layer_impl.cc +++ b/cc/blink/web_layer_impl.cc @@ -320,8 +320,14 @@ void WebLayerImpl::addMainThreadScrollingReasons( layer_->AddMainThreadScrollingReasons(main_thread_scrolling_reasons); } -void WebLayerImpl::clearMainThreadScrollingReasons() { - layer_->ClearMainThreadScrollingReasons(); +void WebLayerImpl::clearMainThreadScrollingReasons( + uint32_t main_thread_scrolling_reasons_to_clear) { + layer_->ClearMainThreadScrollingReasons( + main_thread_scrolling_reasons_to_clear); +} + +uint32_t WebLayerImpl::mainThreadScrollingReasons() { + return layer_->main_thread_scrolling_reasons(); } bool WebLayerImpl::shouldScrollOnMainThread() const { diff --git a/cc/blink/web_layer_impl.h b/cc/blink/web_layer_impl.h index e67137a..28da932 100644 --- a/cc/blink/web_layer_impl.h +++ b/cc/blink/web_layer_impl.h @@ -124,7 +124,9 @@ class WebLayerImpl : public blink::WebLayer { bool userScrollableVertical() const override; void addMainThreadScrollingReasons( uint32_t main_thread_scrolling_reasons) override; - void clearMainThreadScrollingReasons() override; + void clearMainThreadScrollingReasons( + uint32_t main_thread_scrolling_reasons_to_clear) override; + uint32_t mainThreadScrollingReasons() override; bool shouldScrollOnMainThread() const override; void setNonFastScrollableRegion( const blink::WebVector<blink::WebRect>& region) override; |