| 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/frame/FrameView.h" | 10 #include "core/frame/FrameView.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 { | 82 { |
| 83 return m_compositingTriggers & LegacyOverflowScrollTrigger; | 83 return m_compositingTriggers & LegacyOverflowScrollTrigger; |
| 84 } | 84 } |
| 85 | 85 |
| 86 bool CompositingReasonFinder::isMainFrame() const | 86 bool CompositingReasonFinder::isMainFrame() const |
| 87 { | 87 { |
| 88 // FIXME: LocalFrame::isMainFrame() is probably better. | 88 // FIXME: LocalFrame::isMainFrame() is probably better. |
| 89 return !m_renderView.document().ownerElement(); | 89 return !m_renderView.document().ownerElement(); |
| 90 } | 90 } |
| 91 | 91 |
| 92 CompositingReasons CompositingReasonFinder::suppressStyleDeterminedReasonsIfPoss
ible(const RenderLayer* layer, CompositingReasons styleReasons) const |
| 93 { |
| 94 CompositingReasons adjustedReasons = styleReasons; |
| 95 adjustedReasons &= ~(CompositingReasonWillChangeCompositingHint | Compositin
gReasonWillChangeGpuRasterizationHint); |
| 96 |
| 97 // We can suppress layer creation for animations before animations start, bu
t not |
| 98 // once they're already running on the compositor. |
| 99 if (!layer->renderer()->style()->isRunningAnimationOnCompositor()) |
| 100 adjustedReasons &= ~CompositingReasonActiveAnimation; |
| 101 |
| 102 return adjustedReasons; |
| 103 } |
| 104 |
| 105 |
| 92 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const | 106 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const |
| 93 { | 107 { |
| 94 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons()
; | 108 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons()
; |
| 95 ASSERT(styleDeterminedReasons(layer->renderer()) == styleReasons); | 109 ASSERT(styleDeterminedReasons(layer) == styleReasons); |
| 96 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute
CompositingRequirements); | 110 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute
CompositingRequirements); |
| 97 } | 111 } |
| 98 | 112 |
| 99 // This information doesn't appear to be incorporated into CompositingReasons. | 113 // This information doesn't appear to be incorporated into CompositingReasons. |
| 100 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const | 114 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const |
| 101 { | 115 { |
| 102 // Need this done first to determine overflow. | 116 // Need this done first to determine overflow. |
| 103 ASSERT(!m_renderView.needsLayout()); | 117 ASSERT(!m_renderView.needsLayout()); |
| 104 if (isMainFrame()) | 118 if (isMainFrame()) |
| 105 return false; | 119 return false; |
| 106 | 120 |
| 107 if (!(m_compositingTriggers & ScrollableInnerFrameTrigger)) | 121 if (!(m_compositingTriggers & ScrollableInnerFrameTrigger)) |
| 108 return false; | 122 return false; |
| 109 | 123 |
| 110 FrameView* frameView = m_renderView.frameView(); | 124 FrameView* frameView = m_renderView.frameView(); |
| 111 return frameView->isScrollable(); | 125 return frameView->isScrollable(); |
| 112 } | 126 } |
| 113 | 127 |
| 114 CompositingReasons CompositingReasonFinder::styleDeterminedReasons(RenderObject*
renderer) const | 128 CompositingReasons CompositingReasonFinder::styleDeterminedReasons(const RenderL
ayer* layer) const |
| 115 { | 129 { |
| 116 CompositingReasons directReasons = CompositingReasonNone; | 130 CompositingReasons directReasons = CompositingReasonNone; |
| 131 RenderObject* renderer = layer->renderer(); |
| 117 | 132 |
| 118 if (requiresCompositingForTransform(renderer)) | 133 if (requiresCompositingForTransform(renderer)) |
| 119 directReasons |= CompositingReason3DTransform; | 134 directReasons |= CompositingReason3DTransform; |
| 120 | 135 |
| 121 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) | 136 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) |
| 122 directReasons |= CompositingReasonBackfaceVisibilityHidden; | 137 directReasons |= CompositingReasonBackfaceVisibilityHidden; |
| 123 | 138 |
| 124 if (requiresCompositingForAnimation(renderer)) | 139 if (requiresCompositingForAnimation(renderer)) |
| 125 directReasons |= CompositingReasonActiveAnimation; | 140 directReasons |= CompositingReasonActiveAnimation; |
| 126 | 141 |
| 127 if (requiresCompositingForFilters(renderer)) | 142 if (requiresCompositingForFilters(renderer)) |
| 128 directReasons |= CompositingReasonFilters; | 143 directReasons |= CompositingReasonFilters; |
| 129 | 144 |
| 130 if (requiresCompositingForWillChange(renderer)) | 145 if (requiresCompositingForWillChangeCompositingHint(renderer)) |
| 131 directReasons |= CompositingReasonWillChange; | 146 directReasons |= CompositingReasonWillChangeCompositingHint; |
| 147 |
| 148 if (requiresCompositingForWillChangeGpuRasterizationHint(renderer)) |
| 149 directReasons |= CompositingReasonWillChangeGpuRasterizationHint; |
| 150 |
| 151 if (layer->suppressingCompositedLayerCreation()) |
| 152 directReasons = suppressStyleDeterminedReasonsIfPossible(layer, directRe
asons); |
| 132 | 153 |
| 133 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); | 154 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); |
| 134 return directReasons; | 155 return directReasons; |
| 135 } | 156 } |
| 136 | 157 |
| 137 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend
erer) const | 158 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend
erer) const |
| 138 { | 159 { |
| 139 if (!(m_compositingTriggers & ThreeDTransformTrigger)) | 160 if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
| 140 return false; | 161 return false; |
| 141 | 162 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 153 } | 174 } |
| 154 | 175 |
| 155 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render
er) const | 176 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render
er) const |
| 156 { | 177 { |
| 157 if (!(m_compositingTriggers & FilterTrigger)) | 178 if (!(m_compositingTriggers & FilterTrigger)) |
| 158 return false; | 179 return false; |
| 159 | 180 |
| 160 return renderer->hasFilter(); | 181 return renderer->hasFilter(); |
| 161 } | 182 } |
| 162 | 183 |
| 163 bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObjec
t* renderer) const | 184 bool CompositingReasonFinder::requiresCompositingForWillChangeCompositingHint(co
nst RenderObject* renderer) const |
| 164 { | 185 { |
| 165 if (renderer->style()->hasWillChangeCompositingHint()) | 186 return renderer->style()->hasWillChangeCompositingHint(); |
| 166 return true; | 187 } |
| 167 | 188 |
| 189 bool CompositingReasonFinder::requiresCompositingForWillChangeGpuRasterizationHi
nt(const RenderObject* renderer) const |
| 190 { |
| 168 if (!(m_compositingTriggers & GPURasterizationTrigger)) | 191 if (!(m_compositingTriggers & GPURasterizationTrigger)) |
| 169 return false; | 192 return false; |
| 170 | 193 |
| 171 return renderer->style()->hasWillChangeGpuRasterizationHint(); | 194 return renderer->style()->hasWillChangeGpuRasterizationHint(); |
| 172 } | 195 } |
| 173 | 196 |
| 174 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons
t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const | 197 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons
t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const |
| 175 { | 198 { |
| 176 CompositingReasons directReasons = CompositingReasonNone; | 199 CompositingReasons directReasons = CompositingReasonNone; |
| 177 RenderObject* renderer = layer->renderer(); | 200 RenderObject* renderer = layer->renderer(); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 *needToRecomputeCompositingRequirements = true; | 353 *needToRecomputeCompositingRequirements = true; |
| 331 } | 354 } |
| 332 return false; | 355 return false; |
| 333 } | 356 } |
| 334 } | 357 } |
| 335 | 358 |
| 336 return true; | 359 return true; |
| 337 } | 360 } |
| 338 | 361 |
| 339 } | 362 } |
| OLD | NEW |