WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-71529-20120120160550.patch (text/plain), 11.50 KB, created by
Alexandre Elias
on 2012-01-20 16:05:51 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alexandre Elias
Created:
2012-01-20 16:05:51 PST
Size:
11.50 KB
patch
obsolete
>Subversion Revision: 105427 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5bdafb412f150329c782130f01fc51ccc12c2c4d..d30c35e64fe66bf9c7585adecc3784a096cf11a2 100755 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,19 @@ >+2012-01-20 Alexandre Elias <aelias@google.com> >+ >+ [chromium] Write unit tests for compositor-thread zooming >+ https://bugs.webkit.org/show_bug.cgi?id=71529 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add unit tests for pinch zoom and page scale animation. Includes >+ small cleanups in CCLayerTreeHostImpl for testability. >+ >+ * platform/graphics/chromium/cc/CCInputHandler.h: >+ * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: >+ (WebCore::CCLayerTreeHostImpl::startPageScaleAnimation): >+ (WebCore::CCLayerTreeHostImpl::setViewportSize): >+ * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: >+ > 2012-01-19 Vsevolod Vlasov <vsevik@chromium.org> > > Web Inspector: Switching tabs in TabbedEditorContainer should reveal selected script in navigator. >diff --git a/Source/WebKit/chromium/ChangeLog b/Source/WebKit/chromium/ChangeLog >index f132d17ecd22be704beb280f3fc26dbe2cf0d572..0b3a2dc538a9bec9459a69f5a1123b8171e5245a 100644 >--- a/Source/WebKit/chromium/ChangeLog >+++ b/Source/WebKit/chromium/ChangeLog >@@ -1,3 +1,17 @@ >+2012-01-20 Alexandre Elias <aelias@google.com> >+ >+ [chromium] Write unit tests for compositor-thread zooming >+ https://bugs.webkit.org/show_bug.cgi?id=71529 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add unit tests for pinch zoom and page scale animation. Includes >+ small cleanups in CCLayerTreeHostImpl for testability. >+ >+ * tests/CCLayerTreeHostImplTest.cpp: >+ (WebKit::CCLayerTreeHostImplTest::setupScrollAndContentsLayers): >+ (WebKit::TEST_F): >+ > 2012-01-18 Kinuko Yasuda <kinuko@chromium.org> > > Cleanup: Move chrome-specific filesystem type handling code (for FileSystem API) under chromium directory >diff --git a/Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h b/Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h >index 1c25fb194a143235f79da2538393c5f65f7d3186..057d79b1a1188c9b019b1b30f7ddf623c10111fe 100644 >--- a/Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h >+++ b/Source/WebCore/platform/graphics/chromium/cc/CCInputHandler.h >@@ -43,7 +43,6 @@ class IntSize; > class CCInputHandlerClient { > WTF_MAKE_NONCOPYABLE(CCInputHandlerClient); > public: >- virtual double currentTimeMs() const = 0; > virtual void setNeedsRedraw() = 0; > > enum ScrollStatus { ScrollFailed, ScrollStarted, ScrollIgnored }; >@@ -73,6 +72,7 @@ public: > virtual void startPageScaleAnimation(const IntSize& targetPosition, > bool anchorPoint, > float pageScale, >+ double startTimeMs, > double durationMs) = 0; > > protected: >diff --git a/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp b/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp >index 02186caaf5a85cb5693bdb135e80cbbadfc9916a..6c2c7426fc0b95001deee8a7094ec9cd8f50c95f 100644 >--- a/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp >+++ b/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp >@@ -114,7 +114,7 @@ void CCLayerTreeHostImpl::animate(double frameBeginTimeMs) > } > } > >-void CCLayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double durationMs) >+void CCLayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double startTimeMs, double durationMs) > { > if (!m_scrollLayerImpl) > return; >@@ -125,7 +125,7 @@ void CCLayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, > IntSize scaledContentSize = m_scrollLayerImpl->children()[0]->contentBounds(); > scaledContentSize.scale(m_pageScaleDelta); > >- m_pageScaleAnimation = CCPageScaleAnimation::create(scrollTotal, scaleTotal, m_viewportSize, scaledContentSize, currentTimeMs()); >+ m_pageScaleAnimation = CCPageScaleAnimation::create(scrollTotal, scaleTotal, m_viewportSize, scaledContentSize, startTimeMs); > > if (anchorPoint) { > IntSize windowAnchor(targetPosition); >@@ -368,7 +368,9 @@ void CCLayerTreeHostImpl::setViewportSize(const IntSize& viewportSize) > > m_viewportSize = viewportSize; > updateMaxScrollPosition(); >- m_layerRenderer->viewportChanged(); >+ >+ if (m_layerRenderer) >+ m_layerRenderer->viewportChanged(); > } > > void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScale, float minPageScale, float maxPageScale) >@@ -450,11 +452,6 @@ void CCLayerTreeHostImpl::updateMaxScrollPosition() > // TODO(aelias): Also update sublayers. > } > >-double CCLayerTreeHostImpl::currentTimeMs() const >-{ >- return monotonicallyIncreasingTime() * 1000.0; >-} >- > void CCLayerTreeHostImpl::setNeedsRedraw() > { > m_client->setNeedsRedrawOnImplThread(); >diff --git a/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h b/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h >index e4d006d4f86e9c26ce71cb7ee4faaa1b975f744a..deba6c86b8bc2cfaad44649d22390fdec6f1abe2 100644 >--- a/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h >+++ b/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h >@@ -62,7 +62,6 @@ public: > virtual ~CCLayerTreeHostImpl(); > > // CCInputHandlerTarget implementation >- virtual double currentTimeMs() const; > virtual void setNeedsRedraw(); > virtual CCInputHandlerClient::ScrollStatus scrollBegin(const IntPoint&); > virtual void scrollBy(const IntSize&); >@@ -113,7 +112,7 @@ public: > void setPageScaleFactorAndLimits(float pageScale, float minPageScale, float maxPageScale); > float pageScale() const { return m_pageScale; } > >- void startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double durationMs); >+ void startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double startTimeMs, double durationMs); > > const CCSettings& settings() const { return m_settings; } > >diff --git a/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp b/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp >index 52278925e1ea099693bc3759dd41e41cdb33c429..8683b84b03ca36ffcd84c25db61954f6e2664dc2 100644 >--- a/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp >+++ b/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp >@@ -74,6 +74,20 @@ public: > ASSERT_EQ(timesEncountered, 1); > } > >+ void setupScrollAndContentsLayers(const IntSize& contentSize) >+ { >+ RefPtr<CCLayerImpl> root = CCLayerImpl::create(0); >+ root->setScrollable(true); >+ root->setScrollPosition(IntPoint(0, 0)); >+ root->setMaxScrollPosition(contentSize); >+ RefPtr<CCLayerImpl> contents = CCLayerImpl::create(1); >+ contents->setDrawsContent(true); >+ contents->setBounds(contentSize); >+ contents->setContentBounds(contentSize); >+ root->addChild(contents); >+ m_hostImpl->setRootLayer(root); >+ } >+ > protected: > DebugScopedSetImplThread m_alwaysImplThread; > OwnPtr<CCLayerTreeHostImpl> m_hostImpl; >@@ -156,6 +170,112 @@ TEST_F(CCLayerTreeHostImplTest, scrollRootCallsCommitAndRedraw) > EXPECT_TRUE(m_didRequestCommit); > } > >+TEST_F(CCLayerTreeHostImplTest, pinchGesture) >+{ >+ setupScrollAndContentsLayers(IntSize(100, 100)); >+ m_hostImpl->setViewportSize(IntSize(50, 50)); >+ >+ CCLayerImpl* scrollLayer = m_hostImpl->scrollLayer(); >+ ASSERT(scrollLayer); >+ >+ const float minPageScale = 0.5, maxPageScale = 4; >+ >+ // Basic pinch zoom in gesture >+ { >+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); >+ scrollLayer->setPageScaleDelta(1); >+ >+ 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); >+ } >+ >+ // Zoom-in clamping >+ { >+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); >+ scrollLayer->setPageScaleDelta(1); >+ float pageScaleDelta = 10; >+ >+ m_hostImpl->pinchGestureBegin(); >+ m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50)); >+ m_hostImpl->pinchGestureEnd(); >+ >+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); >+ EXPECT_EQ(scrollInfo->pageScaleDelta, maxPageScale); >+ } >+ >+ // Zoom-out clamping >+ { >+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); >+ scrollLayer->setPageScaleDelta(1); >+ scrollLayer->setScrollPosition(IntPoint(50, 50)); >+ >+ float pageScaleDelta = 0.1; >+ m_hostImpl->pinchGestureBegin(); >+ m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(0, 0)); >+ m_hostImpl->pinchGestureEnd(); >+ >+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); >+ EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); >+ >+ // Pushed to (0,0) via clamping against contents layer size. >+ expectContains(*scrollInfo.get(), scrollLayer->id(), IntSize(-50, -50)); >+ } >+} >+ >+TEST_F(CCLayerTreeHostImplTest, pageScaleAnimation) >+{ >+ setupScrollAndContentsLayers(IntSize(100, 100)); >+ m_hostImpl->setViewportSize(IntSize(50, 50)); >+ >+ CCLayerImpl* scrollLayer = m_hostImpl->scrollLayer(); >+ ASSERT(scrollLayer); >+ >+ const float minPageScale = 0.5, maxPageScale = 4; >+ const double startTimeMs = 1000; >+ const double durationMs = 100; >+ >+ // Non-anchor zoom-in >+ { >+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); >+ scrollLayer->setPageScaleDelta(1); >+ scrollLayer->setScrollPosition(IntPoint(50, 50)); >+ >+ m_hostImpl->startPageScaleAnimation(IntSize(0, 0), false, 2, startTimeMs, durationMs); >+ m_hostImpl->animate(startTimeMs + durationMs / 2); >+ EXPECT_TRUE(m_didRequestRedraw); >+ m_hostImpl->animate(startTimeMs + durationMs); >+ EXPECT_TRUE(m_didRequestCommit); >+ >+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); >+ EXPECT_EQ(scrollInfo->pageScaleDelta, 2); >+ expectContains(*scrollInfo.get(), scrollLayer->id(), IntSize(-50, -50)); >+ } >+ >+ // Anchor zoom-out >+ { >+ m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); >+ scrollLayer->setPageScaleDelta(1); >+ scrollLayer->setScrollPosition(IntPoint(50, 50)); >+ >+ m_hostImpl->startPageScaleAnimation(IntSize(25, 25), true, minPageScale, startTimeMs, durationMs); >+ m_hostImpl->animate(startTimeMs + durationMs); >+ EXPECT_TRUE(m_didRequestRedraw); >+ EXPECT_TRUE(m_didRequestCommit); >+ >+ OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); >+ EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); >+ // Pushed to (0,0) via clamping against contents layer size. >+ expectContains(*scrollInfo.get(), scrollLayer->id(), IntSize(-50, -50)); >+ } >+} >+ > class BlendStateTrackerContext: public FakeWebGraphicsContext3D { > public: > BlendStateTrackerContext() : m_blend(false) { }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 71529
:
123396
| 123400