diff options
author | aelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-08 00:34:36 +0000 |
---|---|---|
committer | aelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-08 00:34:36 +0000 |
commit | f2b5a5be75271191e6afad671a74b37c5af53330 (patch) | |
tree | e5740cda67fd9a1b0585751af9b93a5b7ddeaf58 | |
parent | ec1bcb85283586d1af70c581884d60a2cd344e2f (diff) | |
download | chromium_src-f2b5a5be75271191e6afad671a74b37c5af53330.zip chromium_src-f2b5a5be75271191e6afad671a74b37c5af53330.tar.gz chromium_src-f2b5a5be75271191e6afad671a74b37c5af53330.tar.bz2 |
Fix metadata content size.
The previous implementation always returned zero since it checked the
bounds of the scroll layer instead of its child. Also add a unit test
for the metadata values.
BUG=161945
Review URL: https://chromiumcodereview.appspot.com/11779008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175431 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | cc/layer_tree_host_impl.cc | 8 | ||||
-rw-r--r-- | cc/layer_tree_host_impl_unittest.cc | 60 |
2 files changed, 63 insertions, 5 deletions
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc index 7ce1bf1..3c22180 100644 --- a/cc/layer_tree_host_impl.cc +++ b/cc/layer_tree_host_impl.cc @@ -863,15 +863,13 @@ CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const CompositorFrameMetadata metadata; metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScrollLayer()->scrollDelta(); + if (!m_settings.pageScalePinchZoomEnabled) + metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); metadata.page_scale_factor = m_pinchZoomViewport.totalPageScaleFactor(); metadata.viewport_size = m_pinchZoomViewport.bounds().size(); - metadata.root_layer_size = rootScrollLayer()->bounds(); + metadata.root_layer_size = contentSize(); metadata.min_page_scale_factor = m_pinchZoomViewport.minPageScaleFactor(); metadata.max_page_scale_factor = m_pinchZoomViewport.maxPageScaleFactor(); - if (!m_settings.pageScalePinchZoomEnabled) { - metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); - metadata.root_layer_size.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); - } return metadata; } diff --git a/cc/layer_tree_host_impl_unittest.cc b/cc/layer_tree_host_impl_unittest.cc index 6613d81..6ceeb23 100644 --- a/cc/layer_tree_host_impl_unittest.cc +++ b/cc/layer_tree_host_impl_unittest.cc @@ -882,6 +882,66 @@ TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage expectContains(*scrollInfo, scrollLayer->id(), scaledTarget); } +TEST_P(LayerTreeHostImplTest, compositorFrameMetadata) +{ + setupScrollAndContentsLayers(gfx::Size(100, 100)); + m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); + m_hostImpl->setPageScaleFactorAndLimits(1.0f, 0.5f, 4.0f); + initializeRendererAndDrawFrame(); + + { + CompositorFrameMetadata metadata = m_hostImpl->makeCompositorFrameMetadata(); + EXPECT_EQ(gfx::Vector2dF(0.0f, 0.0f), metadata.root_scroll_offset); + EXPECT_EQ(1.0f, metadata.page_scale_factor); + EXPECT_EQ(gfx::SizeF(50.0f, 50.0f), metadata.viewport_size); + EXPECT_EQ(gfx::SizeF(100.0f, 100.0f), metadata.root_layer_size); + EXPECT_EQ(0.5f, metadata.min_page_scale_factor); + EXPECT_EQ(4.0f, metadata.max_page_scale_factor); + } + + // Scrolling should update metadata immediately. + EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Wheel), InputHandlerClient::ScrollStarted); + m_hostImpl->scrollBy(gfx::Point(), gfx::Vector2d(0, 10)); + { + CompositorFrameMetadata metadata = m_hostImpl->makeCompositorFrameMetadata(); + EXPECT_EQ(gfx::Vector2dF(0.0f, 10.0f), metadata.root_scroll_offset); + } + m_hostImpl->scrollEnd(); + + { + CompositorFrameMetadata metadata = m_hostImpl->makeCompositorFrameMetadata(); + EXPECT_EQ(gfx::Vector2dF(0.0f, 10.0f), metadata.root_scroll_offset); + } + + // Page scale should update metadata correctly (shrinking only the viewport). + m_hostImpl->pinchGestureBegin(); + m_hostImpl->pinchGestureUpdate(2.0f, gfx::Point(0, 0)); + m_hostImpl->pinchGestureEnd(); + + { + CompositorFrameMetadata metadata = m_hostImpl->makeCompositorFrameMetadata(); + EXPECT_EQ(gfx::Vector2dF(0.0f, 10.0f), metadata.root_scroll_offset); + EXPECT_EQ(2, metadata.page_scale_factor); + EXPECT_EQ(gfx::SizeF(25.0f, 25.0f), metadata.viewport_size); + EXPECT_EQ(gfx::SizeF(100.0f, 100.0f), metadata.root_layer_size); + EXPECT_EQ(0.5f, metadata.min_page_scale_factor); + EXPECT_EQ(4.0f, metadata.max_page_scale_factor); + } + + // Likewise if set from the main thread. + m_hostImpl->processScrollDeltas(); + m_hostImpl->setPageScaleFactorAndLimits(4.0f, 0.5f, 4.0f); + { + CompositorFrameMetadata metadata = m_hostImpl->makeCompositorFrameMetadata(); + EXPECT_EQ(gfx::Vector2dF(0.0f, 10.0f), metadata.root_scroll_offset); + EXPECT_EQ(4.0f, metadata.page_scale_factor); + EXPECT_EQ(gfx::SizeF(12.5f, 12.5f), metadata.viewport_size); + EXPECT_EQ(gfx::SizeF(100.0f, 100.0f), metadata.root_layer_size); + EXPECT_EQ(0.5f, metadata.min_page_scale_factor); + EXPECT_EQ(4.0f, metadata.max_page_scale_factor); + } +} + class DidDrawCheckLayer : public TiledLayerImpl { public: static scoped_ptr<LayerImpl> create(LayerTreeImpl* treeImpl, int id) { return scoped_ptr<LayerImpl>(new DidDrawCheckLayer(treeImpl, id)); } |