Changeset 45199 in webkit
- Timestamp:
- Jun 25, 2009 3:03:59 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r45198 r45199 1 2009-06-25 Chris Marrin <cmarrin@apple.com> 2 3 Reviewed by Simon Fraser <simon.fraser@apple.com>. 4 5 https://bugs.webkit.org/show_bug.cgi?id=26651 6 7 Preference is named "WebKitAcceleratedCompositingEnabled" 8 and is a boolean value. When false, prevents compositing layers from 9 being created, which prevents hardware animation from running. 10 Also forces video to do software rendering. Added a cache for 11 the flag in RenderLayerCompositing and made it all work 12 on-the-fly when the flag is changed while a page is loaded. 13 14 * WebCore.base.exp: 15 * page/FrameView.cpp: 16 (WebCore::FrameView::updateCompositingLayers): 17 * page/Settings.cpp: 18 (WebCore::setNeedsReapplyStylesInAllFrames): 19 (WebCore::Settings::Settings): 20 (WebCore::Settings::setAcceleratedCompositingEnabled): 21 * page/Settings.h: 22 (WebCore::Settings::acceleratedCompositingEnabled): 23 * rendering/RenderLayer.cpp: 24 (WebCore::RenderLayer::hasAcceleratedCompositing): 25 (WebCore::RenderLayer::updateTransform): 26 (WebCore::RenderLayer::currentTransform): 27 * rendering/RenderLayer.h: 28 * rendering/RenderLayerBacking.cpp: 29 (WebCore::RenderLayerBacking::updateLayerTransform): 30 * rendering/RenderLayerCompositor.cpp: 31 (WebCore::RenderLayerCompositor::RenderLayerCompositor): 32 (WebCore::RenderLayerCompositor::enableCompositingMode): 33 (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag): 34 (WebCore::RenderLayerCompositor::updateCompositingLayers): 35 (WebCore::RenderLayerCompositor::canAccelerateVideoRendering): 36 (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): 37 (WebCore::RenderLayerCompositor::needsToBeComposited): 38 (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): 39 * rendering/RenderLayerCompositor.h: 40 (WebCore::RenderLayerCompositor::hasAcceleratedCompositing): 41 * rendering/RenderObject.h: 42 (WebCore::makeMatrixRenderable): 43 1 44 2009-06-25 Jian Li <jianli@chromium.org> 2 45 -
trunk/WebCore/WebCore.base.exp
r44846 r45199 661 661 __ZN7WebCore8Settings40setTextDirectionSubmenuInclusionBehaviorENS_37TextDirectionSubmenuInclusionBehaviorE 662 662 __ZN7WebCore8Settings41setNeedsKeyboardEventDisambiguationQuirksEb 663 __ZN7WebCore8Settings32setAcceleratedCompositingEnabledEb 663 664 __ZN7WebCore8blankURLEv 664 665 __ZN7WebCore8makeRGBAEiiii -
trunk/WebCore/page/FrameView.cpp
r44940 r45199 421 421 { 422 422 RenderView* view = m_frame->contentRenderer(); 423 if (view && view->compositor()) { 424 // This call will make sure the cached hasAcceleratedCompositing is updated from the pref 425 view->compositor()->cacheAcceleratedCompositingEnabledFlag(); 426 } 427 423 428 if (!view || !view->usesCompositing()) 424 429 return; -
trunk/WebCore/page/Settings.cpp
r44846 r45199 29 29 #include "Frame.h" 30 30 #include "FrameTree.h" 31 #include "FrameView.h" 31 32 #include "HistoryItem.h" 32 33 #include "Page.h" … … 38 39 namespace WebCore { 39 40 40 static void setNeedsReapplyStylesInAllFrames(Page* page) 41 { 42 for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) 41 static void setNeedsReapplyStylesInAllFrames(Page* page, bool /*updateCompositingLayers*/ = false) 42 { 43 for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) { 44 //if (updateCompositingLayers) 45 // frame->view()->updateCompositingLayers(FrameView::ForcedCompositingUpdate); 43 46 frame->setNeedsReapplyStyles(); 47 } 44 48 } 45 49 … … 105 109 , m_downloadableBinaryFontsEnabled(true) 106 110 , m_xssAuditorEnabled(false) 111 , m_acceleratedCompositingEnabled(true) 107 112 { 108 113 // A Frame may not have been created yet, so we initialize the AtomicString … … 465 470 } 466 471 472 void Settings::setAcceleratedCompositingEnabled(bool enabled) 473 { 474 if (m_acceleratedCompositingEnabled == enabled) 475 return; 476 477 m_acceleratedCompositingEnabled = enabled; 478 setNeedsReapplyStylesInAllFrames(m_page, true); 479 } 480 467 481 } // namespace WebCore -
trunk/WebCore/page/Settings.h
r44846 r45199 241 241 void setXSSAuditorEnabled(bool); 242 242 bool xssAuditorEnabled() const { return m_xssAuditorEnabled; } 243 244 void setAcceleratedCompositingEnabled(bool); 245 bool acceleratedCompositingEnabled() const { return m_acceleratedCompositingEnabled; } 243 246 244 247 private: … … 302 305 bool m_downloadableBinaryFontsEnabled : 1; 303 306 bool m_xssAuditorEnabled : 1; 307 bool m_acceleratedCompositingEnabled : 1; 304 308 305 309 #if USE(SAFARI_THEME) -
trunk/WebCore/rendering/RenderLayer.cpp
r45007 r45199 239 239 #endif // USE(ACCELERATED_COMPOSITING) 240 240 241 bool RenderLayer::hasAcceleratedCompositing() const 242 { 243 #if USE(ACCELERATED_COMPOSITING) 244 return compositor()->hasAcceleratedCompositing(); 245 #else 246 return false; 247 #endif 248 } 249 241 250 void RenderLayer::setStaticY(int staticY) 242 251 { … … 340 349 m_transform->makeIdentity(); 341 350 box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); 342 makeMatrixRenderable(*m_transform );351 makeMatrixRenderable(*m_transform, hasAcceleratedCompositing()); 343 352 } 344 353 … … 357 366 RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer()); 358 367 style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); 359 makeMatrixRenderable(currTransform );368 makeMatrixRenderable(currTransform, hasAcceleratedCompositing()); 360 369 return currTransform; 361 370 } -
trunk/WebCore/rendering/RenderLayer.h
r45005 r45199 290 290 void rendererContentChanged(); 291 291 #endif 292 293 // Returns true if the accelerated compositing is enabled 294 bool hasAcceleratedCompositing() const; 292 295 293 296 void updateLayerPosition(); -
trunk/WebCore/rendering/RenderLayerBacking.cpp
r45129 r45199 121 121 if (m_owningLayer->hasTransform()) { 122 122 style->applyTransform(t, toRenderBox(renderer())->borderBoxRect().size(), RenderStyle::ExcludeTransformOrigin); 123 makeMatrixRenderable(t );123 makeMatrixRenderable(t, compositor()->hasAcceleratedCompositing()); 124 124 } 125 125 -
trunk/WebCore/rendering/RenderLayerCompositor.cpp
r44961 r45199 41 41 #include "RenderVideo.h" 42 42 #include "RenderView.h" 43 #include "Settings.h" 43 44 44 45 #if PROFILE_LAYER_REBUILD … … 88 89 , m_rootLayerAttached(false) 89 90 , m_compositingLayersNeedUpdate(false) 91 , m_hasAcceleratedCompositing(true) 90 92 #if PROFILE_LAYER_REBUILD 91 93 , m_rootLayerUpdateCount(0) … … 110 112 if (m_compositing) 111 113 ensureRootPlatformLayer(); 112 } 114 else 115 destroyRootPlatformLayer(); 116 } 117 } 118 119 void RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag() 120 { 121 122 bool hasAcceleratedCompositing = m_renderView->document()->settings() && m_renderView->frameView()->frame()->page()->settings()->acceleratedCompositingEnabled(); 123 124 if (hasAcceleratedCompositing != m_hasAcceleratedCompositing) 125 setCompositingLayersNeedUpdate(); 126 127 m_hasAcceleratedCompositing = hasAcceleratedCompositing; 113 128 } 114 129 … … 174 189 #endif 175 190 ASSERT(updateRoot || !m_compositingLayersNeedUpdate); 191 192 if (!hasAcceleratedCompositing()) 193 enableCompositingMode(false); 176 194 } 177 195 … … 486 504 // FIXME: ideally we need to look at all ancestors for mask or video. But for now, 487 505 // just bail on the obvious cases. 488 if (o->hasMask() || o->hasReflection() )506 if (o->hasMask() || o->hasReflection() || !m_hasAcceleratedCompositing) 489 507 return false; 490 508 … … 515 533 516 534 // host the document layer in the RenderView's root layer 517 if (layer->isRootLayer() )535 if (layer->isRootLayer() && layer->isComposited()) 518 536 parentInRootLayer(layer); 519 537 … … 712 730 bool RenderLayerCompositor::needsToBeComposited(const RenderLayer* layer) const 713 731 { 714 return requiresCompositingLayer(layer) || layer->mustOverlayCompositedLayers();732 return m_hasAcceleratedCompositing && (requiresCompositingLayer(layer) || layer->mustOverlayCompositedLayers()); 715 733 } 716 734 … … 870 888 } 871 889 890 void RenderLayerCompositor::destroyRootPlatformLayer() 891 { 892 if (!m_rootPlatformLayer) 893 return; 894 895 willMoveOffscreen(); 896 delete m_rootPlatformLayer; 897 m_rootPlatformLayer = 0; 898 } 899 872 900 bool RenderLayerCompositor::layerHas3DContent(const RenderLayer* layer) const 873 901 { -
trunk/WebCore/rendering/RenderLayerCompositor.h
r44961 r45199 57 57 // the native view/window system. 58 58 void enableCompositingMode(bool enable = true); 59 60 // Returns true if the accelerated compositing is enabled 61 bool hasAcceleratedCompositing() { return m_hasAcceleratedCompositing; } 62 63 // Copy the acceleratedCompositingEnabledFlag from Settings 64 void cacheAcceleratedCompositingEnabledFlag(); 59 65 60 66 void setCompositingLayersNeedUpdate(bool needUpdate = true); … … 138 144 139 145 void ensureRootPlatformLayer(); 140 146 void destroyRootPlatformLayer(); 147 141 148 // Whether a running transition or animation enforces the need for a compositing layer. 142 149 static bool requiresCompositingForAnimation(RenderObject*); … … 150 157 bool m_rootLayerAttached; 151 158 bool m_compositingLayersNeedUpdate; 159 bool m_hasAcceleratedCompositing; 160 152 161 #if PROFILE_LAYER_REBUILD 153 162 int m_rootLayerUpdateCount; -
trunk/WebCore/rendering/RenderObject.h
r44794 r45199 960 960 } 961 961 962 inline void makeMatrixRenderable(TransformationMatrix& matrix )962 inline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRendering) 963 963 { 964 964 #if !ENABLE(3D_RENDERING) 965 UNUSED_PARAM(has3DRendering); 965 966 matrix.makeAffine(); 966 967 #else 967 UNUSED_PARAM(matrix); 968 if (!has3DRendering) 969 matrix.makeAffine(); 968 970 #endif 969 971 } -
trunk/WebKit/mac/ChangeLog
r45104 r45199 1 2009-06-25 Chris Marrin <cmarrin@apple.com> 2 3 Reviewed by Simon Fraser <simon.fraser@apple.com>. 4 5 https://bugs.webkit.org/show_bug.cgi?id=26651 6 7 Preference is named "WebKitAcceleratedCompositingEnabled" 8 and is a boolean value. When false, prevents compositing layers from 9 being created, which prevents hardware animation from running. 10 Also forces video to do software rendering. Added a cache for 11 the flag in RenderLayerCompositing and made it all work 12 on-the-fly when the flag is changed while a page is loaded. 13 14 * WebView/WebPreferenceKeysPrivate.h: 15 * WebView/WebPreferences.h: 16 * WebView/WebPreferences.mm: 17 (+[WebPreferences initialize]): 18 (-[WebPreferences acceleratedCompositingEnabled]): 19 (-[WebPreferences setAcceleratedCompositingEnabled:]): 20 * WebView/WebView.mm: 21 (-[WebView _preferencesChangedNotification:]): 22 1 23 2009-06-24 Dan Bernstein <mitz@apple.com> 2 24 -
trunk/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
r44846 r45199 83 83 #define WebKitZoomsTextOnlyPreferenceKey @"WebKitZoomsTextOnly" 84 84 #define WebKitXSSAuditorEnabledPreferenceKey @"WebKitXSSAuditorEnabled" 85 #define WebKitAcceleratedCompositingEnabledPreferenceKey @"WebKitAcceleratedCompositingEnabled" 85 86 86 87 // These are private both because callers should be using the cover methods and because the -
trunk/WebKit/mac/WebView/WebPreferences.h
r25768 r45199 438 438 - (WebCacheModel)cacheModel; 439 439 440 /*! 441 @method acceleratedCompositingEnabled 442 */ 443 - (BOOL)acceleratedCompositingEnabled; 444 445 /*! 446 @method setAcceleratedCompositingEnabled: 447 @param enabled 448 */ 449 - (void)setAcceleratedCompositingEnabled:(BOOL)enabled; 450 440 451 @end 441 452 -
trunk/WebKit/mac/WebView/WebPreferences.mm
r44846 r45199 349 349 [NSNumber numberWithBool:YES], WebKitZoomsTextOnlyPreferenceKey, 350 350 [NSNumber numberWithBool:NO], WebKitXSSAuditorEnabledPreferenceKey, 351 [NSNumber numberWithBool:YES], WebKitAcceleratedCompositingEnabledPreferenceKey, 351 352 nil]; 352 353 … … 737 738 { 738 739 return [self _integerValueForKey:WebKitCacheModelPreferenceKey]; 740 } 741 742 - (BOOL)acceleratedCompositingEnabled 743 { 744 return [self _boolValueForKey: WebKitAcceleratedCompositingEnabledPreferenceKey]; 745 } 746 747 - (void)setAcceleratedCompositingEnabled:(BOOL)enabled 748 { 749 [self _setBoolValue: enabled forKey: WebKitAcceleratedCompositingEnabledPreferenceKey]; 739 750 } 740 751 -
trunk/WebKit/mac/WebView/WebView.mm
r45021 r45199 1295 1295 settings->setXSSAuditorEnabled([preferences isXSSAuditorEnabled]); 1296 1296 settings->setEnforceCSSMIMETypeInStrictMode(!WKAppVersionCheckLessThan(@"com.apple.iWeb", -1, 2.1)); 1297 settings->setAcceleratedCompositingEnabled([preferences acceleratedCompositingEnabled]); 1297 1298 } 1298 1299
Note: See TracChangeset
for help on using the changeset viewer.