Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/compositing/CompositingRequirementsUpdater.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositingRequirementsUpdater.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositingRequirementsUpdater.cpp |
| index 54502ea395576daf2d6d81f50626119604972e21..b6966197288d4c19d87b1febe708a4b156851b1f 100644 |
| --- a/third_party/WebKit/Source/core/layout/compositing/CompositingRequirementsUpdater.cpp |
| +++ b/third_party/WebKit/Source/core/layout/compositing/CompositingRequirementsUpdater.cpp |
| @@ -147,12 +147,15 @@ class CompositingRequirementsUpdater::RecursionData { |
| subtree_is_compositing_(false), |
| has_unisolated_composited_blending_descendant_(false), |
| testing_overlap_(true), |
| + has_composited_non_root_ancestor_(false), |
| has_composited_scrolling_ancestor_(false) {} |
| PaintLayer* compositing_ancestor_; |
| bool subtree_is_compositing_; |
| bool has_unisolated_composited_blending_descendant_; |
| bool testing_overlap_; |
| + // Ancestors may be composited but not have composited scrolling layer. |
| + bool has_composited_non_root_ancestor_; |
| bool has_composited_scrolling_ancestor_; |
| }; |
| @@ -373,6 +376,12 @@ void CompositingRequirementsUpdater::UpdateRecursive( |
| RecursionData child_recursion_data = current_recursion_data; |
| child_recursion_data.subtree_is_compositing_ = false; |
| + if (layer->SticksToScroller() && |
| + layer->AncestorOverflowLayer()->ScrollsOverflow() && |
| + current_recursion_data.has_composited_non_root_ancestor_) { |
| + reasons_to_composite |= kCompositingReasonScrollDependentPosition; |
|
chrishtr
2017/05/10 17:48:44
You don't need current_recursion_data.has_composit
yigu
2017/05/10 18:04:13
Done.
|
| + } |
| + |
| bool will_be_composited_or_squashed = |
| can_be_composited && RequiresCompositingOrSquashing(reasons_to_composite); |
| if (will_be_composited_or_squashed) { |
| @@ -387,6 +396,10 @@ void CompositingRequirementsUpdater::UpdateRecursive( |
| // fact that there's an animation running behind this layer, meaning they |
| // can rely on the overlap map testing again. |
| child_recursion_data.testing_overlap_ = true; |
| + |
| + // Tell the descendants they have composited non-root ancestor. |
| + if (!layer->IsRootLayer()) |
| + child_recursion_data.has_composited_non_root_ancestor_ = true; |
| } |
| #if DCHECK_IS_ON() |