OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
151 } | 151 } |
152 | 152 |
153 static void clearPositionConstraintExceptForLayer(GraphicsLayer* layer, Graphics Layer* except) | 153 static void clearPositionConstraintExceptForLayer(GraphicsLayer* layer, Graphics Layer* except) |
154 { | 154 { |
155 if (layer && layer != except && scrollingWebLayerForGraphicsLayer(layer)) | 155 if (layer && layer != except && scrollingWebLayerForGraphicsLayer(layer)) |
156 scrollingWebLayerForGraphicsLayer(layer)->setPositionConstraint(WebLayer PositionConstraint()); | 156 scrollingWebLayerForGraphicsLayer(layer)->setPositionConstraint(WebLayer PositionConstraint()); |
157 } | 157 } |
158 | 158 |
159 static WebLayerPositionConstraint computePositionConstraint(const RenderLayer* l ayer) | 159 static WebLayerPositionConstraint computePositionConstraint(const RenderLayer* l ayer) |
160 { | 160 { |
161 ASSERT(layer->isComposited()); | 161 ASSERT(layer->backing()); |
162 do { | 162 do { |
163 if (layer->renderer()->style()->position() == FixedPosition) { | 163 if (layer->renderer()->style()->position() == FixedPosition) { |
164 const RenderObject* fixedPositionObject = layer->renderer(); | 164 const RenderObject* fixedPositionObject = layer->renderer(); |
165 bool fixedToRight = !fixedPositionObject->style()->right().isAuto(); | 165 bool fixedToRight = !fixedPositionObject->style()->right().isAuto(); |
166 bool fixedToBottom = !fixedPositionObject->style()->bottom().isAuto( ); | 166 bool fixedToBottom = !fixedPositionObject->style()->bottom().isAuto( ); |
167 return WebLayerPositionConstraint::fixedPosition(fixedToRight, fixed ToBottom); | 167 return WebLayerPositionConstraint::fixedPosition(fixedToRight, fixed ToBottom); |
168 } | 168 } |
169 | 169 |
170 layer = layer->parent(); | 170 layer = layer->parent(); |
171 } while (layer && !layer->isComposited()); | 171 // FIXME: should this walk end at the first layer with any backing? Or s hould it end at the |
172 // first composited layer that does not paint into its ancestor? And what about for | |
173 // squashed layers? For now, keeping this code equivalent to what it has been already. | |
Ian Vollick
2013/10/01 19:46:22
My interpretation of this function:
If any layer
shawnsingh
2013/10/03 03:04:04
I'm not sure if your phrasing means the same thing
| |
174 } while (layer && !layer->backing()); | |
172 return WebLayerPositionConstraint(); | 175 return WebLayerPositionConstraint(); |
173 } | 176 } |
174 | 177 |
175 void ScrollingCoordinator::updateLayerPositionConstraint(RenderLayer* layer) | 178 void ScrollingCoordinator::updateLayerPositionConstraint(RenderLayer* layer) |
176 { | 179 { |
177 ASSERT(layer->backing()); | 180 ASSERT(layer->backing()); |
178 RenderLayerBacking* backing = layer->backing(); | 181 RenderLayerBacking* backing = layer->backing(); |
179 GraphicsLayer* mainLayer = backing->childForSuperlayers(); | 182 GraphicsLayer* mainLayer = backing->childForSuperlayers(); |
180 | 183 |
181 // Avoid unnecessary commits | 184 // Avoid unnecessary commits |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
798 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView->viewportConstrainedObjects(); | 801 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView->viewportConstrainedObjects(); |
799 if (!viewportConstrainedObjects) | 802 if (!viewportConstrainedObjects) |
800 return false; | 803 return false; |
801 | 804 |
802 for (FrameView::ViewportConstrainedObjectSet::const_iterator it = viewportCo nstrainedObjects->begin(), end = viewportConstrainedObjects->end(); it != end; + +it) { | 805 for (FrameView::ViewportConstrainedObjectSet::const_iterator it = viewportCo nstrainedObjects->begin(), end = viewportConstrainedObjects->end(); it != end; + +it) { |
803 RenderObject* viewportConstrainedObject = *it; | 806 RenderObject* viewportConstrainedObject = *it; |
804 if (!viewportConstrainedObject->isBoxModelObject() || !viewportConstrain edObject->hasLayer()) | 807 if (!viewportConstrainedObject->isBoxModelObject() || !viewportConstrain edObject->hasLayer()) |
805 return true; | 808 return true; |
806 RenderLayer* layer = toRenderBoxModelObject(viewportConstrainedObject)-> layer(); | 809 RenderLayer* layer = toRenderBoxModelObject(viewportConstrainedObject)-> layer(); |
807 // Any explicit reason that a fixed position element is not composited s houldn't cause slow scrolling. | 810 // Any explicit reason that a fixed position element is not composited s houldn't cause slow scrolling. |
808 if (!layer->isComposited() && layer->viewportConstrainedNotCompositedRea son() == RenderLayer::NoNotCompositedReason) | 811 if (layer->compositingState() != PaintsIntoOwnBacking && layer->viewport ConstrainedNotCompositedReason() == RenderLayer::NoNotCompositedReason) |
809 return true; | 812 return true; |
810 | 813 |
811 // Composited layers that actually paint into their enclosing ancestor | 814 // Composited layers that actually paint into their enclosing ancestor |
812 // must also force main thread scrolling. | 815 // must also force main thread scrolling. |
813 if (layer->isComposited() && layer->backing()->paintsIntoCompositedAnces tor()) | 816 if (layer->compositingState() == HasOwnBackingButPaintsIntoAncestor) |
814 return true; | 817 return true; |
815 } | 818 } |
816 return false; | 819 return false; |
817 } | 820 } |
818 | 821 |
819 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co nst | 822 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co nst |
820 { | 823 { |
821 // The main thread scrolling reasons are applicable to scrolls of the main | 824 // The main thread scrolling reasons are applicable to scrolls of the main |
822 // frame. If it does not exist or if it is not scrollable, there is no | 825 // frame. If it does not exist or if it is not scrollable, there is no |
823 // reason to force main thread scrolling. | 826 // reason to force main thread scrolling. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
855 stringBuilder.resize(stringBuilder.length() - 2); | 858 stringBuilder.resize(stringBuilder.length() - 2); |
856 return stringBuilder.toString(); | 859 return stringBuilder.toString(); |
857 } | 860 } |
858 | 861 |
859 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const | 862 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const |
860 { | 863 { |
861 return mainThreadScrollingReasonsAsText(mainThreadScrollingReasons()); | 864 return mainThreadScrollingReasonsAsText(mainThreadScrollingReasons()); |
862 } | 865 } |
863 | 866 |
864 } // namespace WebCore | 867 } // namespace WebCore |
OLD | NEW |