Changeset 72954 in webkit
- Timestamp:
- Nov 30, 2010 12:41:59 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r72951 r72954 1 2010-11-30 Vangelis Kokkevis <vangelis@chromium.org> 2 3 Reviewed by Simon Fraser. 4 5 Provide more fine grained control to ports over when to turn on 6 accelerated compositing. 7 https://bugs.webkit.org/show_bug.cgi?id=49998 8 9 The RenderLayerCompositor now checks with the chrome client whether 10 3d transforms, video, plugins, canvas and animation require 11 switching over to the composited path. Layers that overlap composited 12 content will still turn into composited layers regardless of the 13 setting. 14 15 * css/MediaQueryEvaluator.cpp: 16 (WebCore::transform_3dMediaFeatureEval): 17 * page/ChromeClient.h: 18 (WebCore::ChromeClient::allowedCompositingTriggers): 19 * rendering/RenderLayer.cpp: 20 (WebCore::RenderLayer::canRender3DTransforms): 21 (WebCore::RenderLayer::updateTransform): 22 (WebCore::RenderLayer::currentTransform): 23 * rendering/RenderLayer.h: 24 * rendering/RenderLayerBacking.cpp: 25 (WebCore::RenderLayerBacking::updateLayerTransform): 26 * rendering/RenderLayerCompositor.cpp: 27 (WebCore::RenderLayerCompositor::RenderLayerCompositor): 28 (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags): 29 (WebCore::RenderLayerCompositor::canRender3DTransforms): 30 (WebCore::RenderLayerCompositor::requiresCompositingLayer): 31 (WebCore::RenderLayerCompositor::requiresCompositingForTransform): 32 (WebCore::RenderLayerCompositor::requiresCompositingForVideo): 33 (WebCore::RenderLayerCompositor::requiresCompositingForCanvas): 34 (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): 35 (WebCore::RenderLayerCompositor::requiresCompositingForAnimation): 36 * rendering/RenderLayerCompositor.h: 37 1 38 2010-11-30 Xan Lopez <xlopez@igalia.com> 2 39 -
trunk/WebCore/css/MediaQueryEvaluator.cpp
r66968 r72954 481 481 #if USE(ACCELERATED_COMPOSITING) 482 482 if (RenderView* view = frame->contentRenderer()) 483 threeDEnabled = view->compositor()-> hasAcceleratedCompositing();483 threeDEnabled = view->compositor()->canRender3DTransforms(); 484 484 #endif 485 485 -
trunk/WebCore/page/ChromeClient.h
r71541 r72954 237 237 // regardless of the settings. 238 238 virtual bool allowsAcceleratedCompositing() const { return true; } 239 240 enum CompositingTrigger { 241 ThreeDTransformTrigger = 1 << 0, 242 VideoTrigger = 1 << 1, 243 PluginTrigger = 1 << 2, 244 CanvasTrigger = 1 << 3, 245 AnimationTrigger = 1 << 4, 246 AllTriggers = 0xFFFFFFFF 247 }; 248 typedef unsigned CompositingTriggerFlags; 249 250 // Returns a bitfield indicating conditions that can trigger the compositor. 251 virtual CompositingTriggerFlags allowedCompositingTriggers() const { return static_cast<CompositingTriggerFlags>(AllTriggers); } 239 252 #endif 240 253 -
trunk/WebCore/rendering/RenderLayer.cpp
r72839 r72954 250 250 } 251 251 252 bool RenderLayer::canRender3DTransforms() const 253 { 254 #if USE(ACCELERATED_COMPOSITING) 255 return compositor()->canRender3DTransforms(); 256 #else 257 return false; 258 #endif 259 } 260 252 261 void RenderLayer::updateLayerPositions(UpdateLayerPositionsFlags flags, IntPoint* cachedOffset) 253 262 { … … 428 437 m_transform->makeIdentity(); 429 438 box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); 430 makeMatrixRenderable(*m_transform, hasAcceleratedCompositing());439 makeMatrixRenderable(*m_transform, canRender3DTransforms()); 431 440 } 432 441 … … 445 454 RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer()); 446 455 style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); 447 makeMatrixRenderable(currTransform, hasAcceleratedCompositing());456 makeMatrixRenderable(currTransform, canRender3DTransforms()); 448 457 return currTransform; 449 458 } -
trunk/WebCore/rendering/RenderLayer.h
r71674 r72954 289 289 // Returns true if the accelerated compositing is enabled 290 290 bool hasAcceleratedCompositing() const; 291 291 292 bool canRender3DTransforms() const; 293 292 294 void updateLayerPosition(); 293 295 -
trunk/WebCore/rendering/RenderLayerBacking.cpp
r71642 r72954 133 133 if (m_owningLayer->hasTransform()) { 134 134 style->applyTransform(t, toRenderBox(renderer())->borderBoxRect().size(), RenderStyle::ExcludeTransformOrigin); 135 makeMatrixRenderable(t, compositor()-> hasAcceleratedCompositing());135 makeMatrixRenderable(t, compositor()->canRender3DTransforms()); 136 136 } 137 137 -
trunk/WebCore/rendering/RenderLayerCompositor.cpp
r71553 r72954 95 95 , m_updateCompositingLayersTimer(this, &RenderLayerCompositor::updateCompositingLayersTimerFired) 96 96 , m_hasAcceleratedCompositing(true) 97 , m_compositingTriggers(static_cast<ChromeClient::CompositingTriggerFlags>(ChromeClient::AllTriggers)) 97 98 , m_showDebugBorders(false) 98 99 , m_showRepaintCounter(false) … … 131 132 bool showDebugBorders = false; 132 133 bool showRepaintCounter = false; 133 134 134 135 if (Settings* settings = m_renderView->document()->settings()) { 135 136 hasAcceleratedCompositing = settings->acceleratedCompositingEnabled(); … … 143 144 Frame* frame = m_renderView->frameView()->frame(); 144 145 Page* page = frame ? frame->page() : 0; 145 if (page) 146 hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing(); 146 if (page) { 147 ChromeClient* chromeClient = page->chrome()->client(); 148 m_compositingTriggers = chromeClient->allowedCompositingTriggers(); 149 hasAcceleratedCompositing = m_compositingTriggers; 150 } 147 151 } 148 152 149 153 if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter) 150 154 setCompositingLayersNeedRebuild(); 151 155 152 156 m_hasAcceleratedCompositing = hasAcceleratedCompositing; 153 157 m_showDebugBorders = showDebugBorders; 154 158 m_showRepaintCounter = showRepaintCounter; 159 } 160 161 bool RenderLayerCompositor::canRender3DTransforms() const 162 { 163 return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger); 155 164 } 156 165 … … 1128 1137 || requiresCompositingForPlugin(renderer) 1129 1138 || requiresCompositingForIFrame(renderer) 1130 || renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden1139 || (canRender3DTransforms() && renderer->style()->backfaceVisibility() == BackfaceVisibilityHidden) 1131 1140 || clipsCompositingDescendants(layer) 1132 1141 || requiresCompositingForAnimation(renderer); … … 1184 1193 bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* renderer) const 1185 1194 { 1195 if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) 1196 return false; 1197 1186 1198 RenderStyle* style = renderer->style(); 1187 1199 // Note that we ask the renderer if it has a transform, because the style may have transforms, … … 1192 1204 bool RenderLayerCompositor::requiresCompositingForVideo(RenderObject* renderer) const 1193 1205 { 1206 if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) 1207 return false; 1194 1208 #if ENABLE(VIDEO) 1195 1209 if (renderer->isVideo()) { … … 1218 1232 bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer) const 1219 1233 { 1234 if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) 1235 return false; 1236 1220 1237 if (renderer->isCanvas()) { 1221 1238 HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node()); … … 1227 1244 bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const 1228 1245 { 1246 if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) 1247 return false; 1248 1229 1249 bool composite = (renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing()) 1230 1250 || (renderer->isApplet() && toRenderApplet(renderer)->allowsAcceleratedCompositing()); … … 1271 1291 bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* renderer) const 1272 1292 { 1293 if (!(m_compositingTriggers & ChromeClient::AnimationTrigger)) 1294 return false; 1295 1273 1296 if (AnimationController* animController = renderer->animation()) { 1274 1297 return (animController->isRunningAnimationOnRenderer(renderer, CSSPropertyOpacity) && inCompositingMode()) -
trunk/WebCore/rendering/RenderLayerCompositor.h
r71553 r72954 27 27 #define RenderLayerCompositor_h 28 28 29 #include "ChromeClient.h" 29 30 #include "RenderLayer.h" 30 31 #include "RenderLayerBacking.h" … … 68 69 // Returns true if the accelerated compositing is enabled 69 70 bool hasAcceleratedCompositing() const { return m_hasAcceleratedCompositing; } 70 71 72 bool canRender3DTransforms() const; 73 71 74 bool showDebugBorders() const { return m_showDebugBorders; } 72 75 bool showRepaintCounter() const { return m_showRepaintCounter; } … … 233 236 234 237 bool m_hasAcceleratedCompositing; 238 ChromeClient::CompositingTriggerFlags m_compositingTriggers; 239 235 240 bool m_showDebugBorders; 236 241 bool m_showRepaintCounter; -
trunk/WebKit/chromium/ChangeLog
r72901 r72954 1 2010-11-29 Vangelis Kokkevis <vangelis@chromium.org> 2 3 Reviewed by Simon Fraser. 4 5 Provide more fine grained control to ports over when to turn on accelerated 6 compositing. 7 https://bugs.webkit.org/show_bug.cgi?id=49998 8 9 As part of this change, the old hasAcceleratedCompositing method on the ChromeClient 10 has now been replaced by allowedCompositingTriggers which returns a bitfield of 11 all the features which can trigger the compositor. 12 13 * src/ChromeClientImpl.cpp: 14 (WebKit::ChromeClientImpl::allowedCompositingTriggers): 15 * src/ChromeClientImpl.h: 16 1 17 2010-11-30 Jochen Eisinger <jochen@chromium.org> 2 18 -
trunk/WebKit/chromium/src/ChromeClientImpl.cpp
r72403 r72954 808 808 } 809 809 810 bool ChromeClientImpl::allowsAcceleratedCompositing() const 811 { 812 return m_webView->allowsAcceleratedCompositing(); 810 ChromeClient::CompositingTriggerFlags ChromeClientImpl::allowedCompositingTriggers() const 811 { 812 if (!m_webView->allowsAcceleratedCompositing()) 813 return 0; 814 815 return ChromeClient::AllTriggers; 813 816 } 814 817 #endif -
trunk/WebKit/chromium/src/ChromeClientImpl.h
r72403 r72954 153 153 virtual void scheduleCompositingLayerSync(); 154 154 155 // Returns true if accelerated compositing is supported. 156 virtual bool allowsAcceleratedCompositing() const; 155 virtual CompositingTriggerFlags allowedCompositingTriggers() const; 157 156 #endif 158 157 -
trunk/WebKit/qt/ChangeLog
r72910 r72954 1 2010-11-29 Vangelis Kokkevis <vangelis@chromium.org> 2 3 Reviewed by Simon Fraser. 4 5 Provide more fine grained control to ports over when to turn on accelerated 6 compositing. 7 https://bugs.webkit.org/show_bug.cgi?id=49998 8 9 As part of this change, the old hasAcceleratedCompositing method on the ChromeClient 10 has now been replaced by allowedCompositingTriggers which returns a bitfield of 11 all the features which can trigger the compositor. 12 13 14 * WebCoreSupport/ChromeClientQt.cpp: 15 (WebCore::ChromeClientQt::allowedCompositingTriggers): 16 * WebCoreSupport/ChromeClientQt.h: 17 1 18 2010-11-30 Thiago Macieira <thiago.macieira@nokia.com> 2 19 -
trunk/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
r72726 r72954 618 618 } 619 619 620 bool ChromeClientQt::allowsAcceleratedCompositing() const 621 { 622 return (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing()); 620 ChromeClient::CompositingTriggerFlags ChromeClientQt::allowedCompositingTriggers() const 621 { 622 if (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing()) 623 return AllTriggers; 624 625 return 0; 623 626 } 624 627 -
trunk/WebKit/qt/WebCoreSupport/ChromeClientQt.h
r71541 r72954 153 153 virtual void setNeedsOneShotDrawingSynchronization(); 154 154 virtual void scheduleCompositingLayerSync(); 155 virtual bool allowsAcceleratedCompositing() const;155 virtual CompositingTriggerFlags allowedCompositingTriggers() const; 156 156 #endif 157 157
Note: See TracChangeset
for help on using the changeset viewer.