summaryrefslogtreecommitdiffstats
path: root/cc/blink
diff options
context:
space:
mode:
authorymalik <ymalik@chromium.org>2016-02-24 18:44:24 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-25 02:45:18 +0000
commit002b8a254e34de53be24bea77e3e3ad3fd640f29 (patch)
tree601e208f9fa38fa11e67cc367dd84cd7487410c2 /cc/blink
parentd63bc982ba3444b1cbc9884cef9e20b2635c66ea (diff)
downloadchromium_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.cc10
-rw-r--r--cc/blink/web_layer_impl.h4
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;