| 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::suppressWillChangeAndAnimationForGpu
Rasterization(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 |
| 92 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const | 105 CompositingReasons CompositingReasonFinder::directReasons(const RenderLayer* lay
er, bool* needToRecomputeCompositingRequirements) const |
| 93 { | 106 { |
| 94 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons()
; | 107 CompositingReasons styleReasons = layer->styleDeterminedCompositingReasons()
; |
| 95 ASSERT(styleDeterminedReasons(layer->renderer()) == styleReasons); | 108 ASSERT(styleDeterminedReasons(layer->renderer()) == styleReasons); |
| 96 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute
CompositingRequirements); | 109 return styleReasons | nonStyleDeterminedDirectReasons(layer, needToRecompute
CompositingRequirements); |
| 97 } | 110 } |
| 98 | 111 |
| 99 // This information doesn't appear to be incorporated into CompositingReasons. | 112 // This information doesn't appear to be incorporated into CompositingReasons. |
| 100 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const | 113 bool CompositingReasonFinder::requiresCompositingForScrollableFrame() const |
| 101 { | 114 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 120 | 133 |
| 121 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) | 134 if (requiresCompositingForBackfaceVisibilityHidden(renderer)) |
| 122 directReasons |= CompositingReasonBackfaceVisibilityHidden; | 135 directReasons |= CompositingReasonBackfaceVisibilityHidden; |
| 123 | 136 |
| 124 if (requiresCompositingForAnimation(renderer)) | 137 if (requiresCompositingForAnimation(renderer)) |
| 125 directReasons |= CompositingReasonActiveAnimation; | 138 directReasons |= CompositingReasonActiveAnimation; |
| 126 | 139 |
| 127 if (requiresCompositingForFilters(renderer)) | 140 if (requiresCompositingForFilters(renderer)) |
| 128 directReasons |= CompositingReasonFilters; | 141 directReasons |= CompositingReasonFilters; |
| 129 | 142 |
| 130 if (requiresCompositingForWillChange(renderer)) | 143 if (requiresCompositingForWillChangeCompositingHint(renderer)) |
| 131 directReasons |= CompositingReasonWillChange; | 144 directReasons |= CompositingReasonWillChangeCompositingHint; |
| 145 |
| 146 if (requiresCompositingForWillChangeGpuRasterizationHint(renderer)) |
| 147 directReasons |= CompositingReasonWillChangeGpuRasterizationHint; |
| 132 | 148 |
| 133 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); | 149 ASSERT(!(directReasons & ~CompositingReasonComboAllStyleDeterminedReasons)); |
| 134 return directReasons; | 150 return directReasons; |
| 135 } | 151 } |
| 136 | 152 |
| 137 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend
erer) const | 153 bool CompositingReasonFinder::requiresCompositingForTransform(RenderObject* rend
erer) const |
| 138 { | 154 { |
| 139 if (!(m_compositingTriggers & ThreeDTransformTrigger)) | 155 if (!(m_compositingTriggers & ThreeDTransformTrigger)) |
| 140 return false; | 156 return false; |
| 141 | 157 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 153 } | 169 } |
| 154 | 170 |
| 155 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render
er) const | 171 bool CompositingReasonFinder::requiresCompositingForFilters(RenderObject* render
er) const |
| 156 { | 172 { |
| 157 if (!(m_compositingTriggers & FilterTrigger)) | 173 if (!(m_compositingTriggers & FilterTrigger)) |
| 158 return false; | 174 return false; |
| 159 | 175 |
| 160 return renderer->hasFilter(); | 176 return renderer->hasFilter(); |
| 161 } | 177 } |
| 162 | 178 |
| 163 bool CompositingReasonFinder::requiresCompositingForWillChange(const RenderObjec
t* renderer) const | 179 bool CompositingReasonFinder::requiresCompositingForWillChangeCompositingHint(co
nst RenderObject* renderer) const |
| 164 { | 180 { |
| 165 if (renderer->style()->hasWillChangeCompositingHint()) | 181 return renderer->style()->hasWillChangeCompositingHint(); |
| 166 return true; | 182 } |
| 167 | 183 |
| 184 bool CompositingReasonFinder::requiresCompositingForWillChangeGpuRasterizationHi
nt(const RenderObject* renderer) const |
| 185 { |
| 168 if (!(m_compositingTriggers & GPURasterizationTrigger)) | 186 if (!(m_compositingTriggers & GPURasterizationTrigger)) |
| 169 return false; | 187 return false; |
| 170 | 188 |
| 171 return renderer->style()->hasWillChangeGpuRasterizationHint(); | 189 return renderer->style()->hasWillChangeGpuRasterizationHint(); |
| 172 } | 190 } |
| 173 | 191 |
| 174 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons
t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const | 192 CompositingReasons CompositingReasonFinder::nonStyleDeterminedDirectReasons(cons
t RenderLayer* layer, bool* needToRecomputeCompositingRequirements) const |
| 175 { | 193 { |
| 176 CompositingReasons directReasons = CompositingReasonNone; | 194 CompositingReasons directReasons = CompositingReasonNone; |
| 177 RenderObject* renderer = layer->renderer(); | 195 RenderObject* renderer = layer->renderer(); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 *needToRecomputeCompositingRequirements = true; | 354 *needToRecomputeCompositingRequirements = true; |
| 337 } | 355 } |
| 338 return false; | 356 return false; |
| 339 } | 357 } |
| 340 } | 358 } |
| 341 | 359 |
| 342 return true; | 360 return true; |
| 343 } | 361 } |
| 344 | 362 |
| 345 } | 363 } |
| OLD | NEW |