summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/trees/layer_tree_host.cc15
-rw-r--r--cc/trees/layer_tree_host.h12
-rw-r--r--cc/trees/layer_tree_host_impl_unittest.cc145
-rw-r--r--cc/trees/layer_tree_host_unittest.cc8
-rw-r--r--cc/trees/layer_tree_host_unittest_scroll.cc26
-rw-r--r--cc/trees/layer_tree_impl.cc7
-rw-r--r--cc/trees/layer_tree_impl.h7
-rw-r--r--cc/trees/layer_tree_impl_unittest.cc6
-rw-r--r--content/renderer/gpu/render_widget_compositor.cc32
-rw-r--r--content/renderer/gpu/render_widget_compositor.h6
-rw-r--r--content/test/web_layer_tree_view_impl_for_testing.cc27
-rw-r--r--content/test/web_layer_tree_view_impl_for_testing.h6
-rw-r--r--mojo/services/html_viewer/weblayertreeview_impl.cc27
-rw-r--r--mojo/services/html_viewer/weblayertreeview_impl.h6
14 files changed, 221 insertions, 109 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.
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index b5a8f65..633d848 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -685,20 +685,40 @@ void RenderWidgetCompositor::registerViewportLayers(
const blink::WebLayer* innerViewportScrollLayer,
const blink::WebLayer* outerViewportScrollLayer) {
layer_tree_host_->RegisterViewportLayers(
+ NULL, static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
+ static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
+ ->layer(),
+ // The outer viewport layer will only exist when using pinch virtual
+ // viewports.
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
+}
+
+void RenderWidgetCompositor::registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
+ const blink::WebLayer* pageScaleLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) {
+ layer_tree_host_->RegisterViewportLayers(
+ static_cast<const cc_blink::WebLayerImpl*>(overscrollElasticityLayer)
+ ->layer(),
static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
->layer(),
// The outer viewport layer will only exist when using pinch virtual
// viewports.
- outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(
- outerViewportScrollLayer)->layer()
- : NULL);
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
}
void RenderWidgetCompositor::clearViewportLayers() {
- layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
- scoped_refptr<cc::Layer>(),
- scoped_refptr<cc::Layer>());
+ layer_tree_host_->RegisterViewportLayers(
+ scoped_refptr<cc::Layer>(), scoped_refptr<cc::Layer>(),
+ scoped_refptr<cc::Layer>(), scoped_refptr<cc::Layer>());
}
void RenderWidgetCompositor::registerSelection(
diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h
index e0f369a..a41f5f5 100644
--- a/content/renderer/gpu/render_widget_compositor.h
+++ b/content/renderer/gpu/render_widget_compositor.h
@@ -114,6 +114,12 @@ class CONTENT_EXPORT RenderWidgetCompositor
virtual void setDeferCommits(bool defer_commits);
virtual void registerForAnimations(blink::WebLayer* layer);
virtual void registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
+ const blink::WebLayer* pageScaleLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) override;
+ // TODO(ccameron): Remove this when Blink no longer calls it.
+ virtual void registerViewportLayers(
const blink::WebLayer* pageScaleLayer,
const blink::WebLayer* innerViewportScrollLayer,
const blink::WebLayer* outerViewportScrollLayer) override;
diff --git a/content/test/web_layer_tree_view_impl_for_testing.cc b/content/test/web_layer_tree_view_impl_for_testing.cc
index e2cd55a..5ea1be1 100644
--- a/content/test/web_layer_tree_view_impl_for_testing.cc
+++ b/content/test/web_layer_tree_view_impl_for_testing.cc
@@ -164,23 +164,44 @@ void WebLayerTreeViewImplForTesting::RequestNewOutputSurface(
}
void WebLayerTreeViewImplForTesting::registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
const blink::WebLayer* pageScaleLayer,
const blink::WebLayer* innerViewportScrollLayer,
const blink::WebLayer* outerViewportScrollLayer) {
layer_tree_host_->RegisterViewportLayers(
+ static_cast<const cc_blink::WebLayerImpl*>(overscrollElasticityLayer)
+ ->layer(),
static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
->layer(),
// The outer viewport layer will only exist when using pinch virtual
// viewports.
- outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(
- outerViewportScrollLayer)->layer()
- : NULL);
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
+}
+
+void WebLayerTreeViewImplForTesting::registerViewportLayers(
+ const blink::WebLayer* pageScaleLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) {
+ layer_tree_host_->RegisterViewportLayers(
+ NULL, static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
+ static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
+ ->layer(),
+ // The outer viewport layer will only exist when using pinch virtual
+ // viewports.
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
}
void WebLayerTreeViewImplForTesting::clearViewportLayers() {
layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
scoped_refptr<cc::Layer>(),
+ scoped_refptr<cc::Layer>(),
scoped_refptr<cc::Layer>());
}
diff --git a/content/test/web_layer_tree_view_impl_for_testing.h b/content/test/web_layer_tree_view_impl_for_testing.h
index 0d5c2db..48ab5d3 100644
--- a/content/test/web_layer_tree_view_impl_for_testing.h
+++ b/content/test/web_layer_tree_view_impl_for_testing.h
@@ -55,6 +55,12 @@ class WebLayerTreeViewImplForTesting
virtual void finishAllRendering();
virtual void setDeferCommits(bool defer_commits);
virtual void registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
+ const blink::WebLayer* pageScaleLayerLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) override;
+ // TODO(ccameron): Remove this when Blink no longer calls it.
+ virtual void registerViewportLayers(
const blink::WebLayer* pageScaleLayerLayer,
const blink::WebLayer* innerViewportScrollLayer,
const blink::WebLayer* outerViewportScrollLayer) override;
diff --git a/mojo/services/html_viewer/weblayertreeview_impl.cc b/mojo/services/html_viewer/weblayertreeview_impl.cc
index 1f025a9..1251576 100644
--- a/mojo/services/html_viewer/weblayertreeview_impl.cc
+++ b/mojo/services/html_viewer/weblayertreeview_impl.cc
@@ -175,23 +175,44 @@ void WebLayerTreeViewImpl::registerForAnimations(blink::WebLayer* layer) {
}
void WebLayerTreeViewImpl::registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
const blink::WebLayer* pageScaleLayer,
const blink::WebLayer* innerViewportScrollLayer,
const blink::WebLayer* outerViewportScrollLayer) {
layer_tree_host_->RegisterViewportLayers(
+ static_cast<const cc_blink::WebLayerImpl*>(overscrollElasticityLayer)
+ ->layer(),
static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
->layer(),
// The outer viewport layer will only exist when using pinch virtual
// viewports.
- outerViewportScrollLayer ? static_cast<const cc_blink::WebLayerImpl*>(
- outerViewportScrollLayer)->layer()
- : NULL);
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
+}
+
+void WebLayerTreeViewImpl::registerViewportLayers(
+ const blink::WebLayer* pageScaleLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) {
+ layer_tree_host_->RegisterViewportLayers(
+ NULL, static_cast<const cc_blink::WebLayerImpl*>(pageScaleLayer)->layer(),
+ static_cast<const cc_blink::WebLayerImpl*>(innerViewportScrollLayer)
+ ->layer(),
+ // The outer viewport layer will only exist when using pinch virtual
+ // viewports.
+ outerViewportScrollLayer
+ ? static_cast<const cc_blink::WebLayerImpl*>(outerViewportScrollLayer)
+ ->layer()
+ : NULL);
}
void WebLayerTreeViewImpl::clearViewportLayers() {
layer_tree_host_->RegisterViewportLayers(scoped_refptr<cc::Layer>(),
scoped_refptr<cc::Layer>(),
+ scoped_refptr<cc::Layer>(),
scoped_refptr<cc::Layer>());
}
diff --git a/mojo/services/html_viewer/weblayertreeview_impl.h b/mojo/services/html_viewer/weblayertreeview_impl.h
index a567aaf..7ec38a9 100644
--- a/mojo/services/html_viewer/weblayertreeview_impl.h
+++ b/mojo/services/html_viewer/weblayertreeview_impl.h
@@ -96,6 +96,12 @@ class WebLayerTreeViewImpl : public blink::WebLayerTreeView,
virtual void setDeferCommits(bool defer_commits) {}
virtual void registerForAnimations(blink::WebLayer* layer) override;
virtual void registerViewportLayers(
+ const blink::WebLayer* overscrollElasticityLayer,
+ const blink::WebLayer* pageScaleLayerLayer,
+ const blink::WebLayer* innerViewportScrollLayer,
+ const blink::WebLayer* outerViewportScrollLayer) override;
+ // TODO(ccameron): Remove this when Blink no longer calls it.
+ virtual void registerViewportLayers(
const blink::WebLayer* page_scale_layer,
const blink::WebLayer* inner_viewport_scroll_layer,
const blink::WebLayer* outer_viewport_scroll_layer) override;