diff options
author | ccameron <ccameron@chromium.org> | 2014-11-21 11:25:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-21 19:26:28 +0000 |
commit | 8230b68b226157ab9c41b7bd9ad5bc7cd8c47cd6 (patch) | |
tree | e95bc21822dc3ac280723cc37e2484b9dfdb8ad8 /cc | |
parent | 686ccaf7fa0333c873f500264a766dcd40879d81 (diff) | |
download | chromium_src-8230b68b226157ab9c41b7bd9ad5bc7cd8c47cd6.zip chromium_src-8230b68b226157ab9c41b7bd9ad5bc7cd8c47cd6.tar.gz chromium_src-8230b68b226157ab9c41b7bd9ad5bc7cd8c47cd6.tar.bz2 |
Plumb scroll elasticity layer from Blink to cc
Implement the 4-argument version of registerViewportLayers
for all implementers of WebLayerTreeView.
Add a scroll elasticity layer to cc::LayerTreeHost and through to
cc::LayerTreeHostImpl. These layers are still optional, and most
tests set them to NULL. Once the Blink side that pushes real layers
through is completed, the scroll elasticity layer will be required.
R=enne
TBR=jam
BUG=133097
Review URL: https://codereview.chromium.org/731863009
Cr-Commit-Position: refs/heads/master@{#305260}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/trees/layer_tree_host.cc | 15 | ||||
-rw-r--r-- | cc/trees/layer_tree_host.h | 12 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_impl_unittest.cc | 145 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_unittest.cc | 8 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_unittest_scroll.cc | 26 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 7 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.h | 7 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl_unittest.cc | 6 |
8 files changed, 129 insertions, 97 deletions
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index 782259c..9791b23 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc @@ -197,7 +197,7 @@ LayerTreeHost::~LayerTreeHost() { } // We must clear any pointers into the layer tree prior to destroying it. - RegisterViewportLayers(NULL, NULL, NULL); + RegisterViewportLayers(NULL, NULL, NULL, NULL); if (root_layer_.get()) { // The layer tree must be destroyed before the layer tree host. We've @@ -347,11 +347,12 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { sync_tree->set_has_transparent_background(has_transparent_background_); if (page_scale_layer_.get() && inner_viewport_scroll_layer_.get()) { - sync_tree->SetViewportLayersFromIds(page_scale_layer_->id(), - inner_viewport_scroll_layer_->id(), - outer_viewport_scroll_layer_.get() - ? outer_viewport_scroll_layer_->id() - : Layer::INVALID_ID); + sync_tree->SetViewportLayersFromIds( + overscroll_elasticity_layer_.get() ? overscroll_elasticity_layer_->id() + : Layer::INVALID_ID, + page_scale_layer_->id(), inner_viewport_scroll_layer_->id(), + outer_viewport_scroll_layer_.get() ? outer_viewport_scroll_layer_->id() + : Layer::INVALID_ID); } else { sync_tree->ClearViewportLayers(); } @@ -1288,9 +1289,11 @@ gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const { } void LayerTreeHost::RegisterViewportLayers( + scoped_refptr<Layer> overscroll_elasticity_layer, scoped_refptr<Layer> page_scale_layer, scoped_refptr<Layer> inner_viewport_scroll_layer, scoped_refptr<Layer> outer_viewport_scroll_layer) { + overscroll_elasticity_layer_ = overscroll_elasticity_layer; page_scale_layer_ = page_scale_layer; inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index e367a06..d394f33 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h @@ -179,11 +179,14 @@ class CC_EXPORT LayerTreeHost { void SetRootLayer(scoped_refptr<Layer> root_layer); Layer* root_layer() { return root_layer_.get(); } const Layer* root_layer() const { return root_layer_.get(); } + const Layer* overscroll_elasticity_layer() const { + return overscroll_elasticity_layer_.get(); + } const Layer* page_scale_layer() const { return page_scale_layer_.get(); } - void RegisterViewportLayers( - scoped_refptr<Layer> page_scale_layer, - scoped_refptr<Layer> inner_viewport_scroll_layer, - scoped_refptr<Layer> outer_viewport_scroll_layer); + void RegisterViewportLayers(scoped_refptr<Layer> overscroll_elasticity_layer, + scoped_refptr<Layer> page_scale_layer, + scoped_refptr<Layer> inner_viewport_scroll_layer, + scoped_refptr<Layer> outer_viewport_scroll_layer); Layer* inner_viewport_scroll_layer() const { return inner_viewport_scroll_layer_.get(); } @@ -463,6 +466,7 @@ class CC_EXPORT LayerTreeHost { int id_; bool next_commit_forces_redraw_; + scoped_refptr<Layer> overscroll_elasticity_layer_; scoped_refptr<Layer> page_scale_layer_; scoped_refptr<Layer> inner_viewport_scroll_layer_; scoped_refptr<Layer> outer_viewport_scroll_layer_; diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index db1048d..39e1133 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc @@ -261,7 +261,8 @@ class LayerTreeHostImplTest : public testing::Test, layer_tree_impl->SetRootLayer(root.Pass()); layer_tree_impl->SetViewportLayersFromIds( - kPageScaleLayerId, kInnerViewportScrollLayerId, Layer::INVALID_ID); + Layer::INVALID_ID, kPageScaleLayerId, kInnerViewportScrollLayerId, + Layer::INVALID_ID); return scroll_layer; } @@ -1400,53 +1401,51 @@ class LayerTreeHostImplOverridePhysicalTime : public LayerTreeHostImpl { base::TimeTicks fake_current_physical_time_; }; -#define SETUP_LAYERS_FOR_SCROLLBAR_ANIMATION_TEST() \ - gfx::Size viewport_size(10, 10); \ - gfx::Size content_size(100, 100); \ - \ - LayerTreeHostImplOverridePhysicalTime* host_impl_override_time = \ - new LayerTreeHostImplOverridePhysicalTime(settings, \ - this, \ - &proxy_, \ - shared_bitmap_manager_.get(), \ - &stats_instrumentation_); \ - host_impl_ = make_scoped_ptr(host_impl_override_time); \ - host_impl_->InitializeRenderer(CreateOutputSurface()); \ - host_impl_->SetViewportSize(viewport_size); \ - \ - scoped_ptr<LayerImpl> root = \ - LayerImpl::Create(host_impl_->active_tree(), 1); \ - root->SetBounds(viewport_size); \ - \ - scoped_ptr<LayerImpl> scroll = \ - LayerImpl::Create(host_impl_->active_tree(), 2); \ - scroll->SetScrollClipLayer(root->id()); \ - scroll->SetScrollOffset(gfx::ScrollOffset()); \ - root->SetBounds(viewport_size); \ - scroll->SetBounds(content_size); \ - scroll->SetContentBounds(content_size); \ - scroll->SetIsContainerForFixedPositionLayers(true); \ - \ - scoped_ptr<LayerImpl> contents = \ - LayerImpl::Create(host_impl_->active_tree(), 3); \ - contents->SetDrawsContent(true); \ - contents->SetBounds(content_size); \ - contents->SetContentBounds(content_size); \ - \ - scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = \ - SolidColorScrollbarLayerImpl::Create( \ - host_impl_->active_tree(), 4, VERTICAL, 10, 0, false, true); \ - EXPECT_FLOAT_EQ(0.f, scrollbar->opacity()); \ - \ - scroll->AddChild(contents.Pass()); \ - root->AddChild(scroll.Pass()); \ - scrollbar->SetScrollLayerAndClipLayerByIds(2, 1); \ - root->AddChild(scrollbar.Pass()); \ - \ - host_impl_->active_tree()->SetRootLayer(root.Pass()); \ - host_impl_->active_tree()->SetViewportLayersFromIds( \ - 1, 2, Layer::INVALID_ID); \ - host_impl_->active_tree()->DidBecomeActive(); \ +#define SETUP_LAYERS_FOR_SCROLLBAR_ANIMATION_TEST() \ + gfx::Size viewport_size(10, 10); \ + gfx::Size content_size(100, 100); \ + \ + LayerTreeHostImplOverridePhysicalTime* host_impl_override_time = \ + new LayerTreeHostImplOverridePhysicalTime(settings, this, &proxy_, \ + shared_bitmap_manager_.get(), \ + &stats_instrumentation_); \ + host_impl_ = make_scoped_ptr(host_impl_override_time); \ + host_impl_->InitializeRenderer(CreateOutputSurface()); \ + host_impl_->SetViewportSize(viewport_size); \ + \ + scoped_ptr<LayerImpl> root = \ + LayerImpl::Create(host_impl_->active_tree(), 1); \ + root->SetBounds(viewport_size); \ + \ + scoped_ptr<LayerImpl> scroll = \ + LayerImpl::Create(host_impl_->active_tree(), 2); \ + scroll->SetScrollClipLayer(root->id()); \ + scroll->SetScrollOffset(gfx::ScrollOffset()); \ + root->SetBounds(viewport_size); \ + scroll->SetBounds(content_size); \ + scroll->SetContentBounds(content_size); \ + scroll->SetIsContainerForFixedPositionLayers(true); \ + \ + scoped_ptr<LayerImpl> contents = \ + LayerImpl::Create(host_impl_->active_tree(), 3); \ + contents->SetDrawsContent(true); \ + contents->SetBounds(content_size); \ + contents->SetContentBounds(content_size); \ + \ + scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = \ + SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 4, \ + VERTICAL, 10, 0, false, true); \ + EXPECT_FLOAT_EQ(0.f, scrollbar->opacity()); \ + \ + scroll->AddChild(contents.Pass()); \ + root->AddChild(scroll.Pass()); \ + scrollbar->SetScrollLayerAndClipLayerByIds(2, 1); \ + root->AddChild(scrollbar.Pass()); \ + \ + host_impl_->active_tree()->SetRootLayer(root.Pass()); \ + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, \ + Layer::INVALID_ID); \ + host_impl_->active_tree()->DidBecomeActive(); \ DrawFrame(); TEST_F(LayerTreeHostImplTest, ScrollbarLinearFadeScheduling) { @@ -1613,7 +1612,8 @@ void LayerTreeHostImplTest::SetupMouseMoveAtWithDeviceScale( root->AddChild(scrollbar.Pass()); host_impl_->active_tree()->SetRootLayer(root.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(1, 2, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); @@ -2287,7 +2287,8 @@ class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { root_clip->AddChild(root.Pass()); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); host_impl_->active_tree()->SetViewportLayersFromIds( - page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); + Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id, + Layer::INVALID_ID); // Set a viewport size that is large enough to contain both the top controls // and some content. host_impl_->SetViewportSize(viewport_size_); @@ -2311,7 +2312,8 @@ class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { root_clip->AddChild(root.Pass()); host_impl_->sync_tree()->SetRootLayer(root_clip.Pass()); host_impl_->sync_tree()->SetViewportLayersFromIds( - page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); + Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id, + Layer::INVALID_ID); // Set a viewport size that is large enough to contain both the top controls // and some content. host_impl_->SetViewportSize(viewport_size_); @@ -2366,8 +2368,7 @@ class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); host_impl_->active_tree()->SetViewportLayersFromIds( - page_scale_layer_id, - inner_viewport_scroll_layer_id, + Layer::INVALID_ID, page_scale_layer_id, inner_viewport_scroll_layer_id, outer_viewport_scroll_layer_id); host_impl_->SetViewportSize(inner_viewport_size); @@ -2991,7 +2992,8 @@ TEST_F(LayerTreeHostImplTest, ScrollRootAndChangePageScaleOnMainThread) { host_impl_->active_tree()->SetRootLayer(root.Pass()); // The behaviour in this test assumes the page scale is applied at a layer // above the clip layer. - host_impl_->active_tree()->SetViewportLayersFromIds(1, 3, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 3, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); host_impl_->SetViewportSize(viewport_size); DrawFrame(); @@ -3041,7 +3043,8 @@ TEST_F(LayerTreeHostImplTest, ScrollRootAndChangePageScaleOnImplThread) { host_impl_->active_tree()->SetRootLayer(root.Pass()); // The behaviour in this test assumes the page scale is applied at a layer // above the clip layer. - host_impl_->active_tree()->SetViewportLayersFromIds(1, 3, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 3, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); host_impl_->SetViewportSize(viewport_size); host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 1.f, page_scale); @@ -3156,7 +3159,8 @@ TEST_F(LayerTreeHostImplTest, ScrollChildAndChangePageScaleOnMainThread) { LayerImpl* child = child_scrolling.get(); root_scrolling_ptr->AddChild(child_scrolling.Pass()); host_impl_->active_tree()->SetRootLayer(root.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(1, 2, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); host_impl_->SetViewportSize(surface_size); DrawFrame(); @@ -3259,7 +3263,8 @@ TEST_F(LayerTreeHostImplTest, ScrollWithoutBubbling) { root->AddChild(root_scrolling.Pass()); EXPECT_EQ(viewport_size, root->bounds()); host_impl_->active_tree()->SetRootLayer(root.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(1, 2, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); host_impl_->SetViewportSize(viewport_size); @@ -3365,7 +3370,8 @@ TEST_F(LayerTreeHostImplTest, ScrollEventBubbling) { host_impl_->SetViewportSize(surface_size); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 2, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 2, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); { @@ -3394,7 +3400,8 @@ TEST_F(LayerTreeHostImplTest, ScrollBeforeRedraw) { root_scroll->SetIsContainerForFixedPositionLayers(true); root_clip->AddChild(root_scroll.Pass()); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(1, 2, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); host_impl_->SetViewportSize(surface_size); @@ -3409,7 +3416,8 @@ TEST_F(LayerTreeHostImplTest, ScrollBeforeRedraw) { root_scroll2->SetIsContainerForFixedPositionLayers(true); root_clip2->AddChild(root_scroll2.Pass()); host_impl_->active_tree()->SetRootLayer(root_clip2.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 4, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 4, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); // Scrolling should still work even though we did not draw yet. @@ -3997,7 +4005,8 @@ TEST_F(LayerTreeHostImplTest, OverscrollChildEventBubbling) { host_impl_->SetViewportSize(surface_size); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 1, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 1, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); { @@ -4056,7 +4065,8 @@ TEST_F(LayerTreeHostImplTest, NoOverscrollOnFractionalDeviceScale) { host_impl_->SetViewportSize(surface_size); host_impl_->SetDeviceScaleFactor(device_scale_factor); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 1, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 1, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); { @@ -4090,7 +4100,8 @@ TEST_F(LayerTreeHostImplTest, NoOverscrollWhenNotAtEdge) { host_impl_->SetViewportSize(surface_size); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 1, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 1, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); { @@ -6657,7 +6668,8 @@ TEST_F(LayerTreeHostImplTest, TouchFlingShouldNotBubble) { host_impl_->SetViewportSize(surface_size); host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); - host_impl_->active_tree()->SetViewportLayersFromIds(3, 1, Layer::INVALID_ID); + host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 3, 1, + Layer::INVALID_ID); host_impl_->active_tree()->DidBecomeActive(); DrawFrame(); { @@ -7499,8 +7511,9 @@ class LayerTreeHostImplVirtualViewportTest : public LayerTreeHostImplTest { inner_clip->AddChild(page_scale.Pass()); layer_tree_impl->SetRootLayer(inner_clip.Pass()); - layer_tree_impl->SetViewportLayersFromIds(kPageScaleLayerId, - kInnerViewportScrollLayerId, kOuterViewportScrollLayerId); + layer_tree_impl->SetViewportLayersFromIds( + Layer::INVALID_ID, kPageScaleLayerId, kInnerViewportScrollLayerId, + kOuterViewportScrollLayerId); host_impl_->active_tree()->DidBecomeActive(); } diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index b909693..3b01566 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc @@ -1020,8 +1020,8 @@ class LayerTreeHostTestStartPageScaleAnimation : public LayerTreeHostTest { layer_tree_host()->root_layer()->AddChild(scroll_layer_); // This test requires the page_scale and inner viewport layers to be // identified. - layer_tree_host()->RegisterViewportLayers( - root_layer, scroll_layer_.get(), NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + scroll_layer_.get(), NULL); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.5f, 2.f); } @@ -5512,7 +5512,7 @@ class LayerTreeHostTestCrispUpAfterPinchEnds : public LayerTreeHostTest { layer->disable_lcd_text(); pinch->AddChild(layer); - layer_tree_host()->RegisterViewportLayers(root, pinch, pinch); + layer_tree_host()->RegisterViewportLayers(NULL, root, pinch, pinch); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f); layer_tree_host()->SetRootLayer(root); LayerTreeHostTest::SetupTree(); @@ -5722,7 +5722,7 @@ class LayerTreeHostTestContinuousDrawWhenCreatingVisibleTiles layer->disable_lcd_text(); pinch->AddChild(layer); - layer_tree_host()->RegisterViewportLayers(root, pinch, pinch); + layer_tree_host()->RegisterViewportLayers(NULL, root, pinch, pinch); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f); layer_tree_host()->SetRootLayer(root); LayerTreeHostTest::SetupTree(); diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc index 6526ff8..8015bda 100644 --- a/cc/trees/layer_tree_host_unittest_scroll.cc +++ b/cc/trees/layer_tree_host_unittest_scroll.cc @@ -45,7 +45,8 @@ class LayerTreeHostScrollTestScrollSimple : public LayerTreeHostScrollTest { scroll_layer->SetIsContainerForFixedPositionLayers(true); scroll_layer->SetScrollClipLayerId(root_layer->id()); scroll_layer->SetScrollOffset(initial_scroll_); - layer_tree_host()->RegisterViewportLayers(root_layer, scroll_layer, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, scroll_layer, + NULL); PostSetNeedsCommitToMainThread(); } @@ -122,7 +123,8 @@ class LayerTreeHostScrollTestScrollMultipleRedraw scroll_layer_->SetIsContainerForFixedPositionLayers(true); scroll_layer_->SetScrollClipLayerId(root_layer->id()); scroll_layer_->SetScrollOffset(initial_scroll_); - layer_tree_host()->RegisterViewportLayers(root_layer, scroll_layer_, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, scroll_layer_, + NULL); PostSetNeedsCommitToMainThread(); } @@ -224,8 +226,8 @@ class LayerTreeHostScrollTestScrollAbortedCommit root_scroll_layer->SetIsContainerForFixedPositionLayers(true); root_layer->AddChild(root_scroll_layer); - layer_tree_host()->RegisterViewportLayers( - root_layer, root_scroll_layer, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + root_scroll_layer, NULL); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f); } @@ -407,8 +409,8 @@ class LayerTreeHostScrollTestFractionalScroll : public LayerTreeHostScrollTest { root_scroll_layer->SetIsContainerForFixedPositionLayers(true); root_layer->AddChild(root_scroll_layer); - layer_tree_host()->RegisterViewportLayers( - root_layer, root_scroll_layer, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + root_scroll_layer, NULL); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f); } @@ -510,8 +512,8 @@ class LayerTreeHostScrollTestCaseWithChild : public LayerTreeHostScrollTest { expected_scroll_layer_->SetScrollOffset(initial_offset_); layer_tree_host()->SetRootLayer(root_layer); - layer_tree_host()->RegisterViewportLayers( - root_layer, root_scroll_layer_, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + root_scroll_layer_, NULL); LayerTreeHostScrollTest::SetupTree(); } @@ -779,8 +781,8 @@ class ImplSidePaintingScrollTestSimple : public ImplSidePaintingScrollTest { root_scroll_layer->SetIsContainerForFixedPositionLayers(true); root_layer->AddChild(root_scroll_layer); - layer_tree_host()->RegisterViewportLayers( - root_layer, root_scroll_layer, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + root_scroll_layer, NULL); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f); } @@ -910,8 +912,8 @@ class ImplSidePaintingScrollTestImplOnlyScroll root_scroll_layer->SetIsContainerForFixedPositionLayers(true); root_layer->AddChild(root_scroll_layer); - layer_tree_host()->RegisterViewportLayers( - root_layer, root_scroll_layer, NULL); + layer_tree_host()->RegisterViewportLayers(NULL, root_layer, + root_scroll_layer, NULL); layer_tree_host()->SetPageScaleFactorAndLimits(1.f, 0.01f, 100.f); } diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index c005a18..c794aad 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -225,8 +225,9 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { if (page_scale_layer_ && inner_viewport_scroll_layer_) { target_tree->SetViewportLayersFromIds( - page_scale_layer_->id(), - inner_viewport_scroll_layer_->id(), + overscroll_elasticity_layer_ ? overscroll_elasticity_layer_->id() + : Layer::INVALID_ID, + page_scale_layer_->id(), inner_viewport_scroll_layer_->id(), outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() : Layer::INVALID_ID); } else { @@ -425,9 +426,11 @@ void LayerTreeImpl::ApplyScrollDeltasSinceBeginMainFrame() { } void LayerTreeImpl::SetViewportLayersFromIds( + int overscroll_elasticity_layer_id, int page_scale_layer_id, int inner_viewport_scroll_layer_id, int outer_viewport_scroll_layer_id) { + overscroll_elasticity_layer_ = LayerById(overscroll_elasticity_layer_id); page_scale_layer_ = LayerById(page_scale_layer_id); DCHECK(page_scale_layer_); diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 57e6ca1..afd8d1d 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h @@ -137,10 +137,14 @@ class CC_EXPORT LayerTreeImpl { void SetCurrentlyScrollingLayer(LayerImpl* layer); void ClearCurrentlyScrollingLayer(); - void SetViewportLayersFromIds(int page_scale_layer_id, + void SetViewportLayersFromIds(int overscroll_elasticity_layer, + int page_scale_layer_id, int inner_viewport_scroll_layer_id, int outer_viewport_scroll_layer_id); void ClearViewportLayers(); + LayerImpl* overscroll_elasticity_layer() { + return overscroll_elasticity_layer_; + } LayerImpl* page_scale_layer() { return page_scale_layer_; } void ApplySentScrollAndScaleDeltasFromAbortedCommit(); void ApplyScrollDeltasSinceBeginMainFrame(); @@ -334,6 +338,7 @@ class CC_EXPORT LayerTreeImpl { SkColor background_color_; bool has_transparent_background_; + LayerImpl* overscroll_elasticity_layer_; LayerImpl* page_scale_layer_; LayerImpl* inner_viewport_scroll_layer_; LayerImpl* outer_viewport_scroll_layer_; diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc index f8de8b0..52f8e0a 100644 --- a/cc/trees/layer_tree_impl_unittest.cc +++ b/cc/trees/layer_tree_impl_unittest.cc @@ -1798,7 +1798,8 @@ TEST_F(LayerTreeImplTest, host_impl().active_tree()->SetPageScaleFactorAndLimits( page_scale_factor, page_scale_factor, page_scale_factor); host_impl().active_tree()->SetRootLayer(root.Pass()); - host_impl().active_tree()->SetViewportLayersFromIds(1, 1, Layer::INVALID_ID); + host_impl().active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 1, + Layer::INVALID_ID); host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); // Sanity check the scenario we just created. @@ -2301,7 +2302,8 @@ TEST_F(LayerTreeImplTest, SelectionBoundsForScaledLayers) { host_impl().active_tree()->SetPageScaleFactorAndLimits( page_scale_factor, page_scale_factor, page_scale_factor); host_impl().active_tree()->SetRootLayer(root.Pass()); - host_impl().active_tree()->SetViewportLayersFromIds(1, 1, Layer::INVALID_ID); + host_impl().active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 1, + Layer::INVALID_ID); host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); // Sanity check the scenario we just created. |