Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Unified Diff: cc/CCLayerTreeHostImplTest.cpp

Issue 10916279: Chromium compositor change implementing page-scale driven pinch-zoom. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove dependency on content_common from cc for access to kEnablePinchZoomInCompositor. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/CCLayerTreeHostImplTest.cpp
===================================================================
--- cc/CCLayerTreeHostImplTest.cpp (revision 158825)
+++ cc/CCLayerTreeHostImplTest.cpp (working copy)
@@ -452,6 +452,60 @@
EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(75, 75));
}
+TEST_F(CCLayerTreeHostImplTest, implPinchZoom)
+{
+ CCSettings::setPageScalePinchZoomEnabled(true);
+ setupScrollAndContentsLayers(IntSize(100, 100));
+ m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
+ initializeRendererAndDrawFrame();
+
+ CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
+ ASSERT(scrollLayer);
+
+ const float minPageScale = 1, maxPageScale = 4;
+ const WebTransformationMatrix identityScaleTransform;
+
+ // The impl-based pinch zoome should not adjust the max scroll position.
+ {
+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
+ scrollLayer->setImplTransform(identityScaleTransform);
+ scrollLayer->setScrollDelta(IntSize());
+
+ float pageScaleDelta = 2;
+ m_hostImpl->pinchGestureBegin();
+ m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50));
+ m_hostImpl->pinchGestureEnd();
+ EXPECT_TRUE(m_didRequestRedraw);
+ EXPECT_TRUE(m_didRequestCommit);
+
+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas();
+ EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
+
+ EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(50, 50));
+ }
+
+ // Scrolling after a pinch gesture should always be in local space. The scroll deltas do not
+ // have the page scale factor applied.
+ {
+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
+ scrollLayer->setImplTransform(identityScaleTransform);
+ scrollLayer->setScrollDelta(IntSize());
+
+ float pageScaleDelta = 2;
+ m_hostImpl->pinchGestureBegin();
+ m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50));
+ m_hostImpl->pinchGestureEnd();
+
+ IntSize scrollDelta(0, 10);
+ EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollStarted);
+ m_hostImpl->scrollBy(IntPoint(), scrollDelta);
+ m_hostImpl->scrollEnd();
+
+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas();
+ expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), scrollDelta);
+ }
+}
+
TEST_F(CCLayerTreeHostImplTest, pinchGesture)
aelias_OOO_until_Jul13 2012/09/26 23:15:09 Hmm... all of these tests should really be run in
Jeff Timanus 2012/10/01 21:42:36 I converted all of these tests to parametrized, an
{
setupScrollAndContentsLayers(IntSize(100, 100));
@@ -462,11 +516,12 @@
ASSERT(scrollLayer);
const float minPageScale = 0.5, maxPageScale = 4;
+ const WebTransformationMatrix identityScaleTransform;
// Basic pinch zoom in gesture
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollDelta(IntSize());
float pageScaleDelta = 2;
@@ -483,7 +538,7 @@
// Zoom-in clamping
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollDelta(IntSize());
float pageScaleDelta = 10;
@@ -498,7 +553,7 @@
// Zoom-out clamping
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollDelta(IntSize());
scrollLayer->setScrollPosition(IntPoint(50, 50));
@@ -517,7 +572,7 @@
// Two-finger panning
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollDelta(IntSize());
scrollLayer->setScrollPosition(IntPoint(20, 20));
@@ -547,11 +602,12 @@
const double duration = 0.1;
const double halfwayThroughAnimation = startTime + duration / 2;
const double endTime = startTime + duration;
+ const WebTransformationMatrix identityScaleTransform;
// Non-anchor zoom-in
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollPosition(IntPoint(50, 50));
m_hostImpl->startPageScaleAnimation(IntSize(0, 0), false, 2, startTime, duration);
@@ -568,7 +624,7 @@
// Anchor zoom-out
{
m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
- scrollLayer->setPageScaleDelta(1);
+ scrollLayer->setImplTransform(identityScaleTransform);
scrollLayer->setScrollPosition(IntPoint(50, 50));
m_hostImpl->startPageScaleAnimation(IntSize(25, 25), true, minPageScale, startTime, duration);
@@ -1046,7 +1102,7 @@
EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll);
// The page scale delta remains constant because the impl thread did not scale.
- EXPECT_EQ(m_hostImpl->rootLayer()->pageScaleDelta(), 1);
+ EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), WebTransformationMatrix());
}
TEST_F(CCLayerTreeHostImplTest, scrollRootAndChangePageScaleOnImplThread)
@@ -1070,6 +1126,7 @@
m_hostImpl->pinchGestureBegin();
m_hostImpl->pinchGestureUpdate(pageScale, IntPoint());
m_hostImpl->pinchGestureEnd();
+ m_hostImpl->updateRootScrollLayerImplTransform();
// The scroll delta is not scaled because the main thread did not scale.
OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas();
@@ -1079,14 +1136,20 @@
EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll);
// The page scale delta should match the new scale on the impl side.
- EXPECT_EQ(m_hostImpl->rootLayer()->pageScaleDelta(), pageScale);
+ WebTransformationMatrix expectedScale;
+ expectedScale.scale(pageScale);
+ EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedScale);
}
TEST_F(CCLayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly)
{
IntSize surfaceSize(10, 10);
float defaultPageScale = 1;
+ WebTransformationMatrix defaultPageScaleMatrix;
+
float newPageScale = 2;
+ WebTransformationMatrix newPageScaleMatrix;
+ newPageScaleMatrix.scale(newPageScale);
// Create a normal scrollable root layer and another scrollable child layer.
setupScrollAndContentsLayers(surfaceSize);
@@ -1101,11 +1164,12 @@
m_hostImpl->pinchGestureBegin();
m_hostImpl->pinchGestureUpdate(newPageScale, IntPoint());
m_hostImpl->pinchGestureEnd();
+ m_hostImpl->updateRootScrollLayerImplTransform();
// The page scale delta should only be applied to the scrollable root layer.
- EXPECT_EQ(root->pageScaleDelta(), newPageScale);
- EXPECT_EQ(child->pageScaleDelta(), defaultPageScale);
- EXPECT_EQ(grandChild->pageScaleDelta(), defaultPageScale);
+ EXPECT_EQ(root->implTransform(), newPageScaleMatrix);
+ EXPECT_EQ(child->implTransform(), defaultPageScaleMatrix);
+ EXPECT_EQ(grandChild->implTransform(), defaultPageScaleMatrix);
// Make sure all the layers are drawn with the page scale delta applied, i.e., the page scale
// delta on the root layer is applied hierarchically.
@@ -1148,6 +1212,8 @@
float pageScale = 2;
m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale);
+ m_hostImpl->updateRootScrollLayerImplTransform();
+
// The scale should apply to the scroll delta.
expectedScrollDelta.scale(pageScale);
OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas();
@@ -1157,7 +1223,8 @@
EXPECT_EQ(child->maxScrollPosition(), expectedMaxScroll);
// The page scale delta remains constant because the impl thread did not scale.
- EXPECT_EQ(child->pageScaleDelta(), 1);
+ WebTransformationMatrix identityTransform;
+ EXPECT_EQ(child->implTransform(), WebTransformationMatrix());
}
TEST_F(CCLayerTreeHostImplTest, scrollChildBeyondLimit)

Powered by Google App Engine
This is Rietveld 408576698