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 |