Changeset 168119 in webkit
- Timestamp:
- May 1, 2014 1:56:21 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r168112 r168119 1 2014-05-01 Simon Fraser <simon.fraser@apple.com> 2 3 Don't always make backing store for -webkit-backface-visibility:hidden 4 https://bugs.webkit.org/show_bug.cgi?id=132420 5 6 Reviewed by Sam Weinig. 7 8 Dump layers for elements with backface-visibility: hidden with various types 9 of ancestors. 10 11 * compositing/backing/backface-visibility-expected.txt: Added. 12 * compositing/backing/backface-visibility-in-3dtransformed-expected.txt: Added. 13 * compositing/backing/backface-visibility-in-3dtransformed.html: Added. 14 * compositing/backing/backface-visibility-in-transformed-expected.txt: Added. 15 * compositing/backing/backface-visibility-in-transformed.html: Added. 16 * compositing/backing/backface-visibility.html: Added. 17 * inspector-protocol/layers/layers-anonymous.html: Don't use backface-visibility 18 for force a layer. 19 1 20 2014-05-01 Brent Fulgham <bfulgham@apple.com> 2 21 -
trunk/LayoutTests/inspector-protocol/layers/layers-anonymous.html
r147538 r168119 128 128 #first-letter::first-letter { 129 129 float: left; 130 -webkit- backface-visibility: hidden;130 -webkit-transform: translateZ(0); 131 131 } 132 132 -
trunk/Source/WebCore/ChangeLog
r168115 r168119 1 2014-05-01 Simon Fraser <simon.fraser@apple.com> 2 3 Don't always make backing store for -webkit-backface-visibility:hidden 4 https://bugs.webkit.org/show_bug.cgi?id=132420 5 6 Reviewed by Sam Weinig. 7 8 Previously, -webkit-backface-visibility:hidden unconditionally created 9 compositing layers with backing store. This results in high memory use 10 on pages with this style applied to many elements (a cargo-cult "optimization"). 11 12 Fix by only having -webkit-backface-visibility:hidden create compositing layers 13 if some ancestor has a 3D transform. That's the only scenario in which the 14 element can be flipped around to reveal the back side, so the only time we need 15 to do compositing for this property. In future, we could be smarter, and only 16 consider 3D transforms in the current preserve-3d context. 17 18 Tests: compositing/backing/backface-visibility-in-3dtransformed.html 19 compositing/backing/backface-visibility-in-transformed.html 20 compositing/backing/backface-visibility.html 21 22 * rendering/RenderLayer.cpp: 23 (WebCore::RenderLayer::RenderLayer): 24 (WebCore::RenderLayer::updateLayerPositions): 25 (WebCore::RenderLayer::hitTestLayer): 26 * rendering/RenderLayer.h: 27 * rendering/RenderLayerCompositor.cpp: 28 (WebCore::RenderLayerCompositor::requiresCompositingLayer): 29 (WebCore::RenderLayerCompositor::requiresOwnBackingStore): 30 (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility): 31 * rendering/RenderLayerCompositor.h: 32 1 33 2014-05-01 Alex Christensen <achristensen@webkit.org> 2 34 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r168076 r168119 170 170 , m_has3DTransformedDescendant(false) 171 171 , m_hasCompositingDescendant(false) 172 , m_hasTransformedAncestor(false) 173 , m_has3DTransformedAncestor(false) 172 174 , m_indirectCompositingReason(NoIndirectCompositingReason) 173 175 , m_viewportConstrainedNotCompositedReason(NoNotCompositedReason) … … 450 452 451 453 m_repaintStatus = NeedsNormalRepaint; 454 m_hasTransformedAncestor = flags & SeenTransformedLayer; 455 m_has3DTransformedAncestor = flags & Seen3DTransformedLayer; 452 456 453 457 // Go ahead and update the reflection's position and size. … … 467 471 if (renderer().hasColumns()) 468 472 flags |= UpdatePagination; 473 474 if (transform()) { 475 flags |= SeenTransformedLayer; 476 if (!transform()->isAffine()) 477 flags |= Seen3DTransformedLayer; 478 } 469 479 470 480 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) … … 4932 4942 ASSERT(transformState); 4933 4943 localTransformState = const_cast<HitTestingTransformState*>(transformState); 4934 } else if (transformState || m_has3DTransformedDescendant|| preserves3D()) {4944 } else if (transformState || has3DTransformedDescendant() || preserves3D()) { 4935 4945 // We need transform state for the first time, or to offset the container state, so create it here. 4936 4946 localTransformState = createLocalTransformState(rootLayer, containerLayer, hitTestRect, hitTestLocation, transformState); -
trunk/Source/WebCore/rendering/RenderLayer.h
r167970 r168119 500 500 IsCompositingUpdateRoot = 1 << 2, 501 501 UpdateCompositingLayers = 1 << 3, 502 UpdatePagination = 1 << 4 502 UpdatePagination = 1 << 4, 503 SeenTransformedLayer = 1 << 5, 504 Seen3DTransformedLayer = 1 << 6 503 505 }; 504 506 typedef unsigned UpdateLayerPositionsFlags; … … 1114 1116 bool checkIfDescendantClippingContextNeedsUpdate(bool isClipping); 1115 1117 1116 // This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do.1117 void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; }1118 1118 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendant; } 1119 1119 1120 bool hasTransformedAncestor() const { return m_hasTransformedAncestor; } 1121 bool has3DTransformedAncestor() const { return m_has3DTransformedAncestor; } 1122 1120 1123 void dirty3DTransformedDescendantStatus(); 1121 1124 // Both updates the status, and returns true if descendants of this have 3d. … … 1254 1257 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. 1255 1258 bool m_hasCompositingDescendant : 1; // In the z-order tree. 1259 1260 bool m_hasTransformedAncestor : 1; 1261 bool m_has3DTransformedAncestor : 1; 1262 1256 1263 unsigned m_indirectCompositingReason : 3; 1257 1264 unsigned m_viewportConstrainedNotCompositedReason : 2; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r168079 r168119 2033 2033 || requiresCompositingForPlugin(*renderer) 2034 2034 || requiresCompositingForFrame(*renderer) 2035 || (canRender3DTransforms() && renderer->style().backfaceVisibility() == BackfaceVisibilityHidden)2035 || requiresCompositingForBackfaceVisibility(*renderer) 2036 2036 || clipsCompositingDescendants(*renderer->layer()) 2037 2037 || requiresCompositingForAnimation(*renderer) … … 2076 2076 || requiresCompositingForPlugin(renderer) 2077 2077 || requiresCompositingForFrame(renderer) 2078 || (canRender3DTransforms() && renderer.style().backfaceVisibility() == BackfaceVisibilityHidden)2078 || requiresCompositingForBackfaceVisibility(renderer) 2079 2079 || requiresCompositingForAnimation(renderer) 2080 2080 || requiresCompositingForFilters(renderer) … … 2341 2341 // but the renderer may be an inline that doesn't suppport them. 2342 2342 return renderer.hasTransform() && renderer.style().transform().has3DOperation(); 2343 } 2344 2345 bool RenderLayerCompositor::requiresCompositingForBackfaceVisibility(RenderLayerModelObject& renderer) const 2346 { 2347 if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) 2348 return false; 2349 2350 return renderer.style().backfaceVisibility() == BackfaceVisibilityHidden && renderer.layer()->has3DTransformedAncestor(); 2343 2351 } 2344 2352 -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r167316 r168119 393 393 bool requiresCompositingForAnimation(RenderLayerModelObject&) const; 394 394 bool requiresCompositingForTransform(RenderLayerModelObject&) const; 395 bool requiresCompositingForBackfaceVisibility(RenderLayerModelObject&) const; 395 396 bool requiresCompositingForVideo(RenderLayerModelObject&) const; 396 397 bool requiresCompositingForCanvas(RenderLayerModelObject&) const; -
trunk/WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme
r168065 r168119 116 116 <BuildableReference 117 117 BuildableIdentifier = "primary" 118 BlueprintIdentifier = " 1AD7451818D0D26C006F3A1E"119 BuildableName = "WebKit .framework"120 BlueprintName = "WebKit "118 BlueprintIdentifier = "9398100A0824BF01008DF038" 119 BuildableName = "WebKitLegacy.framework" 120 BlueprintName = "WebKitLegacy" 121 121 ReferencedContainer = "container:Source/WebKit/WebKit.xcodeproj"> 122 122 </BuildableReference> -
trunk/WebKit.xcworkspace/xcshareddata/xcschemes/All Source.xcscheme
r168065 r168119 116 116 <BuildableReference 117 117 BuildableIdentifier = "primary" 118 BlueprintIdentifier = " 1AD7451818D0D26C006F3A1E"119 BuildableName = "WebKit .framework"120 BlueprintName = "WebKit "118 BlueprintIdentifier = "9398100A0824BF01008DF038" 119 BuildableName = "WebKitLegacy.framework" 120 BlueprintName = "WebKitLegacy" 121 121 ReferencedContainer = "container:Source/WebKit/WebKit.xcodeproj"> 122 122 </BuildableReference>
Note: See TracChangeset
for help on using the changeset viewer.