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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
221 if (!hasOverflowScrollTrigger()) | 221 if (!hasOverflowScrollTrigger()) |
222 return false; | 222 return false; |
223 return layer->scrollParent(); | 223 return layer->scrollParent(); |
224 } | 224 } |
225 | 225 |
226 bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const Rend erLayer* layer) const | 226 bool CompositingReasonFinder::requiresCompositingForOverflowScrolling(const Rend erLayer* layer) const |
227 { | 227 { |
228 return layer->needsCompositedScrolling(); | 228 return layer->needsCompositedScrolling(); |
229 } | 229 } |
230 | 230 |
231 static bool isViewportConstrainedStickyLayer(const RenderLayer* layer) | |
232 { | |
233 ASSERT(layer->renderer()->isStickyPositioned()); | |
234 return !layer->enclosingOverflowClipLayer(ExcludeSelf); | |
235 } | |
236 | |
237 bool CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(const Rend erLayer* layer) | |
238 { | |
239 if (layer->renderer()->isStickyPositioned()) | |
240 return isViewportConstrainedStickyLayer(layer); | |
241 | |
242 if (layer->renderer()->style()->position() != FixedPosition) | |
243 return false; | |
244 | |
245 for (const RenderLayerStackingNode* stackingContainer = layer->stackingNode( ); stackingContainer; | |
246 stackingContainer = stackingContainer->ancestorStackingContainerNode()) { | |
247 if (stackingContainer->layer()->compositingState() != NotComposited | |
248 && stackingContainer->layer()->renderer()->style()->position() == Fi xedPosition) | |
249 return false; | |
250 } | |
251 | |
252 return true; | |
253 } | |
254 | |
255 bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* rende rer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReas on* viewportConstrainedNotCompositedReason, bool* needToRecomputeCompositingRequ irements) const | 231 bool CompositingReasonFinder::requiresCompositingForPosition(RenderObject* rende rer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReas on* viewportConstrainedNotCompositedReason, bool* needToRecomputeCompositingRequ irements) const |
256 { | 232 { |
257 return requiresCompositingForPositionSticky(renderer, layer) || requiresComp ositingForPositionFixed(renderer, layer, viewportConstrainedNotCompositedReason, needToRecomputeCompositingRequirements); | 233 return requiresCompositingForPositionSticky(renderer, layer) || requiresComp ositingForPositionFixed(renderer, layer, viewportConstrainedNotCompositedReason, needToRecomputeCompositingRequirements); |
258 } | 234 } |
259 | 235 |
260 bool CompositingReasonFinder::requiresCompositingForPositionSticky(RenderObject* renderer, const RenderLayer* layer) const | 236 bool CompositingReasonFinder::requiresCompositingForPositionSticky(RenderObject* renderer, const RenderLayer* layer) const |
261 { | 237 { |
262 if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) | 238 if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) |
263 return false; | 239 return false; |
264 if (renderer->style()->position() != StickyPosition) | 240 if (renderer->style()->position() != StickyPosition) |
265 return false; | 241 return false; |
266 // FIXME: This probably isn't correct for accelerated overflow scrolling. cr bug.com/361723 | 242 // FIXME: This probably isn't correct for accelerated overflow scrolling. cr bug.com/361723 |
267 // Instead it should return false only if the layer is not inside a scrollab le region. | 243 // Instead it should return false only if the layer is not inside a scrollab le region. |
268 return isViewportConstrainedStickyLayer(layer); | 244 return !layer->enclosingOverflowClipLayer(ExcludeSelf); |
chrishtr
2014/05/07 20:12:00
I don't get why this is correct..
abarth-chromium
2014/05/07 20:18:54
I just inlined isViewportConstrainedStickyLayer be
chrishtr
2014/05/07 20:20:42
oops, misread the code. ok
| |
269 } | 245 } |
270 | 246 |
271 bool CompositingReasonFinder::requiresCompositingForPositionFixed(RenderObject* renderer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotComposite dReason* viewportConstrainedNotCompositedReason, bool* needToRecomputeCompositin gRequirements) const | 247 bool CompositingReasonFinder::requiresCompositingForPositionFixed(RenderObject* renderer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotComposite dReason* viewportConstrainedNotCompositedReason, bool* needToRecomputeCompositin gRequirements) const |
272 { | 248 { |
273 if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) | 249 if (!(m_compositingTriggers & ViewportConstrainedPositionedTrigger)) |
274 return false; | 250 return false; |
275 | 251 |
276 if (renderer->style()->position() != FixedPosition) | 252 if (renderer->style()->position() != FixedPosition) |
277 return false; | 253 return false; |
278 | 254 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 *needToRecomputeCompositingRequirements = true; | 316 *needToRecomputeCompositingRequirements = true; |
341 } | 317 } |
342 return false; | 318 return false; |
343 } | 319 } |
344 } | 320 } |
345 | 321 |
346 return true; | 322 return true; |
347 } | 323 } |
348 | 324 |
349 } | 325 } |
OLD | NEW |