Chromium Code Reviews| 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 |