| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/rendering/compositing/CompositingReasonFinder.h" | 6 #include "core/rendering/compositing/CompositingReasonFinder.h" |
| 7 | 7 |
| 8 #include "CSSPropertyNames.h" | 8 #include "CSSPropertyNames.h" |
| 9 #include "HTMLNames.h" | 9 #include "HTMLNames.h" |
| 10 #include "core/animation/ActiveAnimations.h" | 10 #include "core/animation/ActiveAnimations.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const | 62 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const |
| 63 { | 63 { |
| 64 RenderObject* renderer = layer->renderer(); | 64 RenderObject* renderer = layer->renderer(); |
| 65 CompositingReasons directReasons = CompositingReasonNone; | 65 CompositingReasons directReasons = CompositingReasonNone; |
| 66 | 66 |
| 67 if (requiresCompositingForTransform(renderer)) | 67 if (requiresCompositingForTransform(renderer)) |
| 68 directReasons |= CompositingReason3DTransform; | 68 directReasons |= CompositingReason3DTransform; |
| 69 | 69 |
| 70 // Only zero or one of the following conditions will be true for a given Ren
derLayer. | 70 // Only zero or one of the following conditions will be true for a given Ren
derLayer. |
| 71 // FIXME: These should be handled by overrides of RenderObject::additionalCo
mpositingReasons. | 71 // FIXME: These should be handled by overrides of RenderObject::additionalCo
mpositingReasons. |
| 72 if (requiresCompositingForPlugin(renderer, needToRecomputeCompositingRequire
ments)) | 72 if (requiresCompositingForPlugin(renderer)) |
| 73 directReasons |= CompositingReasonPlugin; | 73 directReasons |= CompositingReasonPlugin; |
| 74 else if (requiresCompositingForFrame(renderer)) | 74 else if (requiresCompositingForFrame(renderer)) |
| 75 directReasons |= CompositingReasonIFrame; | 75 directReasons |= CompositingReasonIFrame; |
| 76 | 76 |
| 77 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) | 77 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) |
| 78 directReasons |= CompositingReasonBackfaceVisibilityHidden; | 78 directReasons |= CompositingReasonBackfaceVisibilityHidden; |
| 79 | 79 |
| 80 if (requiresCompositingForAnimation(renderer)) | 80 if (requiresCompositingForAnimation(renderer)) |
| 81 directReasons |= CompositingReasonActiveAnimation; | 81 directReasons |= CompositingReasonActiveAnimation; |
| 82 | 82 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 { | 124 { |
| 125 if (!(m_compositingTriggers & ThreeDTransformTrigger)) | 125 if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
| 126 return false; | 126 return false; |
| 127 | 127 |
| 128 RenderStyle* style = renderer->style(); | 128 RenderStyle* style = renderer->style(); |
| 129 // Note that we ask the renderer if it has a transform, because the style ma
y have transforms, | 129 // Note that we ask the renderer if it has a transform, because the style ma
y have transforms, |
| 130 // but the renderer may be an inline that doesn't suppport them. | 130 // but the renderer may be an inline that doesn't suppport them. |
| 131 return renderer->hasTransform() && style->transform().has3DOperation(); | 131 return renderer->hasTransform() && style->transform().has3DOperation(); |
| 132 } | 132 } |
| 133 | 133 |
| 134 bool CompositingReasonFinder::requiresCompositingForPlugin(RenderObject* rendere
r, bool* needToRecomputeCompositingRequirements) const | 134 bool CompositingReasonFinder::requiresCompositingForPlugin(RenderObject* rendere
r) const |
| 135 { | 135 { |
| 136 if (!(m_compositingTriggers & PluginTrigger)) | 136 if (!(m_compositingTriggers & PluginTrigger)) |
| 137 return false; | 137 return false; |
| 138 | 138 |
| 139 if (!renderer->isEmbeddedObject() || !toRenderEmbeddedObject(renderer)->allo
wsAcceleratedCompositing()) | 139 return renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->req
uiresAcceleratedCompositing(); |
| 140 return false; | |
| 141 | |
| 142 // FIXME: this seems bogus. If we don't know the layout position/size of the
plugin yet, would't that be handled elsewhere? | |
| 143 *needToRecomputeCompositingRequirements = true; | |
| 144 | |
| 145 RenderWidget* pluginRenderer = toRenderWidget(renderer); | |
| 146 // If we can't reliably know the size of the plugin yet, don't change compos
iting state. | |
| 147 if (pluginRenderer->needsLayout()) | |
| 148 return pluginRenderer->hasLayer() && pluginRenderer->layer()->hasComposi
tedLayerMapping(); | |
| 149 | |
| 150 // Don't go into compositing mode if height or width are zero, or size is 1x
1. | |
| 151 IntRect contentBox = pixelSnappedIntRect(pluginRenderer->contentBoxRect()); | |
| 152 return contentBox.height() * contentBox.width() > 1; | |
| 153 } | 140 } |
| 154 | 141 |
| 155 bool CompositingReasonFinder::requiresCompositingForFrame(RenderObject* renderer
) const | 142 bool CompositingReasonFinder::requiresCompositingForFrame(RenderObject* renderer
) const |
| 156 { | 143 { |
| 157 return renderer->isRenderPart() && toRenderPart(renderer)->requiresAccelerat
edCompositing(); | 144 return renderer->isRenderPart() && toRenderPart(renderer)->requiresAccelerat
edCompositing(); |
| 158 } | 145 } |
| 159 | 146 |
| 160 bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren
derObject* renderer) const | 147 bool CompositingReasonFinder::requiresCompositingForBackfaceVisibilityHidden(Ren
derObject* renderer) const |
| 161 { | 148 { |
| 162 if (!(m_compositingTriggers & ThreeDTransformTrigger)) | 149 if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 | 324 |
| 338 return true; | 325 return true; |
| 339 } | 326 } |
| 340 | 327 |
| 341 bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const Rend
erLayer* layer) const | 328 bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const Rend
erLayer* layer) const |
| 342 { | 329 { |
| 343 return layer->needsCompositedScrolling(); | 330 return layer->needsCompositedScrolling(); |
| 344 } | 331 } |
| 345 | 332 |
| 346 } | 333 } |
| OLD | NEW |