Changeset 108937 in webkit
- Timestamp:
- Feb 26, 2012 5:04:20 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r108936 r108937 1 2012-02-26 James Robinson <jamesr@chromium.org> 2 3 [chromium] Wire up shouldUpdateScrollPositionOnMainThread and nonFastScrollableRegion to compositor 4 https://bugs.webkit.org/show_bug.cgi?id=79155 5 6 Reviewed by Adam Barth. 7 8 This hooks up ScrollingCoordinator::setNonFastScrollableRegion() and 9 ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread() to the chromium compositor 10 implementation and implements them on the impl thread. 11 12 New compositor behavior is covered by unit tests in LayerChromiumTests and CCLayerTreeHostImplTests. The rest is 13 just glue code. 14 15 * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp: 16 (WebCore::ScrollingCoordinator::setNonFastScrollableRegion): 17 (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread): 18 * platform/graphics/chromium/LayerChromium.cpp: 19 (WebCore::LayerChromium::LayerChromium): 20 (WebCore::LayerChromium::setShouldScrollOnMainThread): 21 (WebCore): 22 (WebCore::LayerChromium::setNonFastScrollableRegion): 23 (WebCore::LayerChromium::pushPropertiesTo): 24 * platform/graphics/chromium/LayerChromium.h: 25 (WebCore): 26 (LayerChromium): 27 * platform/graphics/chromium/cc/CCLayerImpl.cpp: 28 (WebCore::CCLayerImpl::CCLayerImpl): 29 * platform/graphics/chromium/cc/CCLayerImpl.h: 30 (WebCore::CCLayerImpl::shouldScrollOnMainThread): 31 (WebCore::CCLayerImpl::setShouldScrollOnMainThread): 32 (CCLayerImpl): 33 (WebCore::CCLayerImpl::nonFastScrollableRegion): 34 (WebCore::CCLayerImpl::setNonFastScrollableRegion): 35 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 36 (WebCore::CCLayerTreeHostImpl::scrollBegin): 37 1 38 2012-02-26 Kentaro Hara <haraken@chromium.org> 2 39 -
trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp
r108698 r108937 74 74 } 75 75 76 void ScrollingCoordinator::setNonFastScrollableRegion(const Region& )76 void ScrollingCoordinator::setNonFastScrollableRegion(const Region& region) 77 77 { 78 // FIXME: Implement! 78 if (LayerChromium* layer = m_private->scrollLayer()) 79 layer->setNonFastScrollableRegion(region); 79 80 } 80 81 … … 94 95 void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(bool should) 95 96 { 96 // FIXME: Implement! 97 if (LayerChromium* layer = m_private->scrollLayer()) 98 layer->setShouldScrollOnMainThread(should); 97 99 } 98 100 -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
r108886 r108937 43 43 #include "PlatformContextSkia.h" 44 44 #endif 45 #include "Region.h"46 45 #include "RenderLayerBacking.h" 47 46 #include "TextStream.h" … … 65 64 , m_layerAnimationController(CCLayerAnimationController::create()) 66 65 , m_scrollable(false) 66 , m_shouldScrollOnMainThread(false) 67 67 , m_haveWheelEventHandlers(false) 68 , m_nonFastScrollableRegionChanged(false) 68 69 , m_anchorPoint(0.5, 0.5) 69 70 , m_backgroundColor(0, 0, 0, 0) … … 441 442 } 442 443 444 void LayerChromium::setShouldScrollOnMainThread(bool shouldScrollOnMainThread) 445 { 446 if (m_shouldScrollOnMainThread == shouldScrollOnMainThread) 447 return; 448 m_shouldScrollOnMainThread = shouldScrollOnMainThread; 449 setNeedsCommit(); 450 } 451 443 452 void LayerChromium::setHaveWheelEventHandlers(bool haveWheelEventHandlers) 444 453 { … … 446 455 return; 447 456 m_haveWheelEventHandlers = haveWheelEventHandlers; 457 setNeedsCommit(); 458 } 459 460 void LayerChromium::setNonFastScrollableRegion(const Region& region) 461 { 462 if (m_nonFastScrollableRegion == region) 463 return; 464 m_nonFastScrollableRegion = region; 465 m_nonFastScrollableRegionChanged = true; 448 466 setNeedsCommit(); 449 467 } … … 503 521 layer->setMasksToBounds(m_masksToBounds); 504 522 layer->setScrollable(m_scrollable); 523 layer->setShouldScrollOnMainThread(m_shouldScrollOnMainThread); 505 524 layer->setHaveWheelEventHandlers(m_haveWheelEventHandlers); 525 // Copying a Region is more expensive than most layer properties, since it involves copying two Vectors that may be 526 // arbitrarily large depending on page content, so we only push the property if it's changed. 527 if (m_nonFastScrollableRegionChanged) { 528 layer->setNonFastScrollableRegion(m_nonFastScrollableRegion); 529 m_nonFastScrollableRegionChanged = false; 530 } 506 531 layer->setName(m_name); 507 532 layer->setOpaque(m_opaque); -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.h
r108886 r108937 40 40 #include "PlatformString.h" 41 41 #include "ProgramBinding.h" 42 #include "Region.h" 42 43 #include "RenderSurfaceChromium.h" 43 44 #include "ShaderChromium.h" … … 61 62 class CCTextureUpdater; 62 63 class GraphicsContext3D; 63 class Region;64 64 65 65 // Base class for composited layers. Special layer types are derived from … … 135 135 136 136 void setScrollable(bool); 137 void setShouldScrollOnMainThread(bool); 137 138 void setHaveWheelEventHandlers(bool); 139 void setNonFastScrollableRegion(const Region&); 138 140 139 141 IntSize scrollDelta() const { return IntSize(); } … … 285 287 IntPoint m_scrollPosition; 286 288 bool m_scrollable; 289 bool m_shouldScrollOnMainThread; 287 290 bool m_haveWheelEventHandlers; 291 Region m_nonFastScrollableRegion; 292 bool m_nonFastScrollableRegionChanged; 288 293 FloatPoint m_position; 289 294 FloatPoint m_anchorPoint; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp
r108886 r108937 49 49 , m_anchorPointZ(0) 50 50 , m_scrollable(false) 51 , m_shouldScrollOnMainThread(false) 51 52 , m_haveWheelEventHandlers(false) 52 53 , m_backgroundCoversViewport(false) -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h
r108886 r108937 31 31 #include "FloatRect.h" 32 32 #include "IntRect.h" 33 #include "Region.h" 33 34 #include "TextStream.h" 34 35 #include "TransformationMatrix.h" … … 182 183 void setScrollable(bool scrollable) { m_scrollable = scrollable; } 183 184 185 bool shouldScrollOnMainThread() const { return m_shouldScrollOnMainThread; } 186 void setShouldScrollOnMainThread(bool shouldScrollOnMainThread) { m_shouldScrollOnMainThread = shouldScrollOnMainThread; } 187 184 188 bool haveWheelEventHandlers() const { return m_haveWheelEventHandlers; } 185 189 void setHaveWheelEventHandlers(bool haveWheelEventHandlers) { m_haveWheelEventHandlers = haveWheelEventHandlers; } 190 191 const Region& nonFastScrollableRegion() const { return m_nonFastScrollableRegion; } 192 void setNonFastScrollableRegion(const Region& region) { m_nonFastScrollableRegion = region; } 186 193 187 194 const IntRect& visibleLayerRect() const { return m_visibleLayerRect; } … … 252 259 IntPoint m_scrollPosition; 253 260 bool m_scrollable; 261 bool m_shouldScrollOnMainThread; 254 262 bool m_haveWheelEventHandlers; 263 Region m_nonFastScrollableRegion; 255 264 Color m_backgroundColor; 256 265 bool m_backgroundCoversViewport; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r108886 r108937 489 489 } 490 490 491 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoint& point, CCInputHandlerClient::ScrollInputType type)491 CCInputHandlerClient::ScrollStatus CCLayerTreeHostImpl::scrollBegin(const IntPoint& viewportPoint, CCInputHandlerClient::ScrollInputType type) 492 492 { 493 493 // TODO: Check for scrollable sublayers. … … 495 495 TRACE_EVENT("scrollBegin Ignored no scrollable", this, 0); 496 496 return ScrollIgnored; 497 } 498 499 if (m_scrollLayerImpl->shouldScrollOnMainThread()) { 500 TRACE_EVENT("scrollBegin Failed shouldScrollOnMainThread", this, 0); 501 return ScrollFailed; 502 } 503 504 IntPoint scrollLayerContentPoint(m_scrollLayerImpl->screenSpaceTransform().inverse().mapPoint(viewportPoint)); 505 if (m_scrollLayerImpl->nonFastScrollableRegion().contains(scrollLayerContentPoint)) { 506 TRACE_EVENT("scrollBegin Failed nonFastScrollableRegion", this, 0); 507 return ScrollFailed; 497 508 } 498 509 -
trunk/Source/WebKit/chromium/ChangeLog
r108902 r108937 1 2012-02-26 James Robinson <jamesr@chromium.org> 2 3 [chromium] Wire up shouldUpdateScrollPositionOnMainThread and nonFastScrollableRegion to compositor 4 https://bugs.webkit.org/show_bug.cgi?id=79155 5 6 Reviewed by Adam Barth. 7 8 Add new tests for shouldScrollOnMainThread and nonFastScrollableRegion properties. 9 10 * tests/CCLayerTreeHostImplTest.cpp: 11 (WebKit::TEST_F): 12 (WebKit): 13 * tests/LayerChromiumTest.cpp: 14 1 15 2012-02-25 Adrienne Walker <enne@google.com> 2 16 -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp
r108886 r108937 206 206 } 207 207 208 TEST_F(CCLayerTreeHostImplTest, shouldScrollOnMainThread) 209 { 210 RefPtr<CCLayerImpl> root = CCLayerImpl::create(0); 211 root->setScrollable(true); 212 root->setScrollPosition(IntPoint(0, 0)); 213 root->setMaxScrollPosition(IntSize(100, 100)); 214 m_hostImpl->setRootLayer(root); 215 root->setShouldScrollOnMainThread(true); 216 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollFailed); 217 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Gesture), CCInputHandlerClient::ScrollFailed); 218 } 219 220 TEST_F(CCLayerTreeHostImplTest, nonFastScrollableRegionBasic) 221 { 222 RefPtr<CCLayerImpl> root = CCLayerImpl::create(0); 223 root->setScrollable(true); 224 root->setScrollPosition(IntPoint(0, 0)); 225 root->setMaxScrollPosition(IntSize(100, 100)); 226 m_hostImpl->setRootLayer(root); 227 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); 228 // All scroll types inside the non-fast scrollable region should fail. 229 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollFailed); 230 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), CCInputHandlerClient::Gesture), CCInputHandlerClient::ScrollFailed); 231 232 // All scroll types outside this region should succeed. 233 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollStarted); 234 m_hostImpl->scrollBy(IntSize(0, 10)); 235 m_hostImpl->scrollEnd(); 236 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), CCInputHandlerClient::Gesture), CCInputHandlerClient::ScrollStarted); 237 m_hostImpl->scrollBy(IntSize(0, 10)); 238 m_hostImpl->scrollEnd(); 239 } 240 241 TEST_F(CCLayerTreeHostImplTest, nonFastScrollableRegionWithOffset) 242 { 243 GraphicsContext3D::Attributes attrs; 244 RefPtr<GraphicsContext3D> context = GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FakeWebGraphicsContext3D()), attrs, 0, GraphicsContext3D::RenderDirectlyToHostWindow, GraphicsContext3DPrivate::ForUseOnThisThread); 245 m_hostImpl->initializeLayerRenderer(context); 246 247 RefPtr<CCLayerImpl> root = CCLayerImpl::create(0); 248 root->setScrollable(true); 249 root->setScrollPosition(IntPoint(0, 0)); 250 root->setMaxScrollPosition(IntSize(100, 100)); 251 m_hostImpl->setRootLayer(root); 252 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); 253 root->setPosition(FloatPoint(-25, 0)); 254 m_hostImpl->drawLayers(); // Update draw transforms so we can correctly map points into layer space. 255 256 // This point would fall into the non-fast scrollable region except that we've moved the layer down by 25 pixels. 257 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(40, 10), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollStarted); 258 m_hostImpl->scrollBy(IntSize(0, 1)); 259 m_hostImpl->scrollEnd(); 260 261 // This point is still inside the non-fast region. 262 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(10, 10), CCInputHandlerClient::Wheel), CCInputHandlerClient::ScrollFailed); 263 } 264 208 265 TEST_F(CCLayerTreeHostImplTest, pinchGesture) 209 266 { -
trunk/Source/WebKit/chromium/tests/LayerChromiumTest.cpp
r108698 r108937 516 516 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setSublayerTransform(TransformationMatrix(0, 0, 0, 0, 0, 0))); 517 517 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollable(true)); 518 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setShouldScrollOnMainThread(true)); 519 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNonFastScrollableRegion(Region(IntRect(1, 1, 2, 2)))); 518 520 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setHaveWheelEventHandlers(true)); 519 521 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollPosition(IntPoint(10, 10)));
Note: See TracChangeset
for help on using the changeset viewer.