Changeset 132504 in webkit
- Timestamp:
- Oct 25, 2012, 11:08:21 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r132503 r132504 1 2012-10-25 Simon Fraser <simon.fraser@apple.com> 2 3 r132427 changed the tiling behavior of tiled layer TileCaches as well as the page tile cache 4 https://bugs.webkit.org/show_bug.cgi?id=100323 5 6 Reviewed by Anders Carlsson. 7 8 r132427 assumed that TileCaches were only used for the page, and changed the tile 9 size behavior of all non-page TileCaches. 10 11 Fix by giving TiledBacking a new 'CoverageForSlowScrolling' flag which 12 affects the tile size behavior. 13 14 Consolidated the two places that set TileCoverage into one, and in the process 15 reduced FrameView's direct communication with TiledBacking. 16 17 No new tests because we can't test tile size via tests. 18 19 * page/FrameView.cpp: 20 (WebCore::FrameView::didMoveOnscreen): Rely on RenderLayerCompositor to 21 call setIsInWindow() on the main page tile cache. 22 (WebCore::FrameView::willMoveOffscreen): Ditto. 23 (WebCore::FrameView::performPostLayoutTasks): Rather than explicitly tell 24 the TiledBacking that it should do stuff, just tell the compositor that 25 layout happened. 26 * platform/graphics/TiledBacking.h: New CoverageForSlowScrolling flag. 27 * platform/graphics/ca/mac/TileCache.mm: 28 (WebCore::TileCache::tileSizeForCoverageRect): Only use one big tile 29 if the CoverageForSlowScrolling flag is set. 30 * rendering/RenderLayerBacking.cpp: 31 (WebCore::RenderLayerBacking::RenderLayerBacking): layer->isRootLayer() 32 is equivalent to renderer()->isRenderView() and clearer. 33 (WebCore::RenderLayerBacking::tiledBacking): Call adjustTileCacheCoverage(). 34 It would be nice to move the rest of this TiledBacking code from here somehow. 35 (WebCore::RenderLayerBacking::adjustTileCacheCoverage): Update the TileCoverage 36 flags, taking into account horizontal and vertical scrollability independently, 37 and whether we're in slow scrolling mode. 38 * rendering/RenderLayerBacking.h: 39 (RenderLayerBacking): 40 * rendering/RenderLayerCompositor.cpp: 41 (WebCore::RenderLayerCompositor::frameViewDidLayout): Have the page 42 tiled backing update it's coverage flags. 43 (WebCore::RenderLayerCompositor::pageTiledBacking): Utility function. 44 (WebCore::RenderLayerCompositor::didMoveOnscreen): Moved from FrameView. 45 (WebCore::RenderLayerCompositor::willMoveOffscreen): Ditto. 46 * rendering/RenderLayerCompositor.h: 47 (RenderLayerCompositor): 48 1 49 2012-10-25 Elliott Sprehn <esprehn@chromium.org> 2 50 -
trunk/Source/WebCore/page/FrameView.cpp
r132398 r132504 932 932 void FrameView::didMoveOnscreen() 933 933 { 934 #if USE(ACCELERATED_COMPOSITING)935 if (TiledBacking* tiledBacking = this->tiledBacking())936 tiledBacking->setIsInWindow(true);937 #endif938 939 934 if (RenderView* root = rootRenderer(this)) 940 935 root->didMoveOnscreen(); … … 944 939 void FrameView::willMoveOffscreen() 945 940 { 946 #if USE(ACCELERATED_COMPOSITING)947 if (TiledBacking* tiledBacking = this->tiledBacking())948 tiledBacking->setIsInWindow(false);949 #endif950 951 941 if (RenderView* root = rootRenderer(this)) 952 942 root->willMoveOffscreen(); … … 2501 2491 2502 2492 #if USE(ACCELERATED_COMPOSITING) 2503 if (TiledBacking* tiledBacking = this->tiledBacking()) { 2504 if (page) { 2505 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator()) { 2506 bool shouldLimitTileCoverage = !canHaveScrollbars() || scrollingCoordinator->shouldUpdateScrollLayerPositionOnMainThread(); 2507 tiledBacking->setTileCoverage(shouldLimitTileCoverage ? TiledBacking::CoverageForVisibleArea : TiledBacking::CoverageForScrolling); 2508 } 2509 } 2493 if (RenderView* root = rootRenderer(this)) { 2494 if (root->usesCompositing()) 2495 root->compositor()->frameViewDidLayout(); 2510 2496 } 2511 2497 #endif -
trunk/Source/WebCore/platform/graphics/TiledBacking.h
r132301 r132504 44 44 CoverageForVerticalScrolling = 1 << 0, 45 45 CoverageForHorizontalScrolling = 1 << 1, 46 CoverageForSlowScrolling = 1 << 2, // Indicates that we expect to paint a lot on scrolling. 46 47 CoverageForScrolling = CoverageForVerticalScrolling | CoverageForHorizontalScrolling 47 48 }; -
trunk/Source/WebCore/platform/graphics/ca/mac/TileCache.mm
r132427 r132504 335 335 IntSize TileCache::tileSizeForCoverageRect(const IntRect& coverageRect) const 336 336 { 337 if (m_tileCoverage == CoverageForVisibleArea)337 if (m_tileCoverage & CoverageForSlowScrolling) 338 338 return coverageRect.size(); 339 339 return IntSize(defaultTileCacheWidth, defaultTileCacheHeight); -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r132270 r132504 108 108 #endif 109 109 { 110 if ( renderer()->isRenderView()) {110 if (layer->isRootLayer()) { 111 111 Frame* frame = toRenderView(renderer())->frameView()->frame(); 112 112 Page* page = frame ? frame->page() : 0; … … 125 125 126 126 if (m_usingTiledCacheLayer) { 127 TiledBacking* tiledBacking = this->tiledBacking(); 127 128 if (Page* page = renderer()->frame()->page()) { 128 if (TiledBacking* tiledBacking = m_graphicsLayer->tiledBacking()) { 129 Frame* frame = renderer()->frame(); 130 tiledBacking->setIsInWindow(page->isOnscreen()); 131 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator()) { 132 bool shouldLimitTileCoverage = !frame->view()->canHaveScrollbars() || scrollingCoordinator->shouldUpdateScrollLayerPositionOnMainThread(); 133 tiledBacking->setTileCoverage(shouldLimitTileCoverage ? TiledBacking::CoverageForVisibleArea : TiledBacking::CoverageForScrolling); 134 } 135 tiledBacking->setScrollingPerformanceLoggingEnabled(frame->settings() && frame->settings()->scrollingPerformanceLoggingEnabled()); 136 } 129 Frame* frame = renderer()->frame(); 130 tiledBacking->setIsInWindow(page->isOnscreen()); 131 tiledBacking->setScrollingPerformanceLoggingEnabled(frame->settings() && frame->settings()->scrollingPerformanceLoggingEnabled()); 132 adjustTileCacheCoverage(); 137 133 } 138 134 } … … 175 171 { 176 172 return m_usingTiledCacheLayer && m_creatingPrimaryGraphicsLayer; 173 } 174 175 TiledBacking* RenderLayerBacking::tiledBacking() const 176 { 177 return m_graphicsLayer->tiledBacking(); 178 } 179 180 void RenderLayerBacking::adjustTileCacheCoverage() 181 { 182 if (!m_usingTiledCacheLayer) 183 return; 184 185 TiledBacking::TileCoverage tileCoverage = TiledBacking::CoverageForVisibleArea; 186 187 // FIXME: When we use TiledBacking for overflow, this should look at RenderView scrollability. 188 Frame* frame = renderer()->frame(); 189 if (frame) { 190 FrameView* frameView = frame->view(); 191 if (frameView->horizontalScrollbarMode() != ScrollbarAlwaysOff) 192 tileCoverage |= TiledBacking::CoverageForHorizontalScrolling; 193 194 if (frameView->verticalScrollbarMode() != ScrollbarAlwaysOff) 195 tileCoverage |= TiledBacking::CoverageForVerticalScrolling; 196 197 if (ScrollingCoordinator* scrollingCoordinator = frame->page()->scrollingCoordinator()) { 198 if (scrollingCoordinator->shouldUpdateScrollLayerPositionOnMainThread()) 199 tileCoverage |= TiledBacking::CoverageForSlowScrolling; 200 } 201 } 202 203 tiledBacking()->setTileCoverage(tileCoverage); 177 204 } 178 205 -
trunk/Source/WebCore/rendering/RenderLayerBacking.h
r131804 r132504 40 40 class KeyframeList; 41 41 class RenderLayerCompositor; 42 class TiledBacking; 42 43 43 44 enum CompositingLayerType { … … 138 139 139 140 bool usingTileCache() const { return m_usingTiledCacheLayer; } 140 141 TiledBacking* tiledBacking() const; 142 void adjustTileCacheCoverage(); 143 141 144 // GraphicsLayerClient interface 142 145 virtual bool shouldUseTileCache(const GraphicsLayer*) const OVERRIDE; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r132301 r132504 1120 1120 } 1121 1121 1122 void RenderLayerCompositor::frameViewDidLayout() 1123 { 1124 RenderLayerBacking* renderViewBacking = m_renderView->layer()->backing(); 1125 if (renderViewBacking) 1126 renderViewBacking->adjustTileCacheCoverage(); 1127 } 1128 1122 1129 void RenderLayerCompositor::scrollingLayerDidChange(RenderLayer* layer) 1123 1130 { … … 1351 1358 } 1352 1359 1360 TiledBacking* RenderLayerCompositor::pageTiledBacking() const 1361 { 1362 RenderLayerBacking* renderViewBacking = m_renderView->layer()->backing(); 1363 return renderViewBacking ? renderViewBacking->tiledBacking() : 0; 1364 } 1365 1353 1366 void RenderLayerCompositor::didMoveOnscreen() 1354 1367 { 1368 if (TiledBacking* tiledBacking = pageTiledBacking()) 1369 tiledBacking->setIsInWindow(true); 1370 1355 1371 if (!inCompositingMode() || m_rootLayerAttachment != RootLayerUnattached) 1356 1372 return; … … 1362 1378 void RenderLayerCompositor::willMoveOffscreen() 1363 1379 { 1380 if (TiledBacking* tiledBacking = pageTiledBacking()) 1381 tiledBacking->setIsInWindow(false); 1382 1364 1383 if (!inCompositingMode() || m_rootLayerAttachment == RootLayerUnattached) 1365 1384 return; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r132299 r132504 43 43 class RenderVideo; 44 44 #endif 45 class TiledBacking; 45 46 46 47 enum CompositingUpdateType { … … 196 197 void frameViewDidChangeSize(); 197 198 void frameViewDidScroll(); 199 void frameViewDidLayout(); 198 200 199 201 void scrollingLayerDidChange(RenderLayer*); … … 294 296 295 297 Page* page() const; 298 TiledBacking* pageTiledBacking() const; 296 299 297 300 GraphicsLayerFactory* graphicsLayerFactory() const;
Note:
See TracChangeset
for help on using the changeset viewer.