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->compositedLayerMapping()); | 161 ASSERT(layer->isComposited()); |
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 | 171 } while (layer && !layer->isComposited()); |
172 // Composited layers that inherit a fixed position state will be positio
ned with respect to the nearest compositedLayerMapping's GraphicsLayer. | |
173 // So, once we find a layer that has its own compositedLayerMapping, we
can stop searching for a fixed position RenderObject. | |
174 } while (layer && layer->compositedLayerMapping()); | |
175 return WebLayerPositionConstraint(); | 172 return WebLayerPositionConstraint(); |
176 } | 173 } |
177 | 174 |
178 void ScrollingCoordinator::updateLayerPositionConstraint(RenderLayer* layer) | 175 void ScrollingCoordinator::updateLayerPositionConstraint(RenderLayer* layer) |
179 { | 176 { |
180 ASSERT(layer->compositedLayerMapping()); | 177 ASSERT(layer->compositedLayerMapping()); |
181 CompositedLayerMapping* compositedLayerMapping = layer->compositedLayerMappi
ng(); | 178 CompositedLayerMapping* compositedLayerMapping = layer->compositedLayerMappi
ng(); |
182 GraphicsLayer* mainLayer = compositedLayerMapping->childForSuperlayers(); | 179 GraphicsLayer* mainLayer = compositedLayerMapping->childForSuperlayers(); |
183 | 180 |
184 // Avoid unnecessary commits | 181 // Avoid unnecessary commits |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects =
frameView->viewportConstrainedObjects(); | 798 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects =
frameView->viewportConstrainedObjects(); |
802 if (!viewportConstrainedObjects) | 799 if (!viewportConstrainedObjects) |
803 return false; | 800 return false; |
804 | 801 |
805 for (FrameView::ViewportConstrainedObjectSet::const_iterator it = viewportCo
nstrainedObjects->begin(), end = viewportConstrainedObjects->end(); it != end; +
+it) { | 802 for (FrameView::ViewportConstrainedObjectSet::const_iterator it = viewportCo
nstrainedObjects->begin(), end = viewportConstrainedObjects->end(); it != end; +
+it) { |
806 RenderObject* viewportConstrainedObject = *it; | 803 RenderObject* viewportConstrainedObject = *it; |
807 if (!viewportConstrainedObject->isBoxModelObject() || !viewportConstrain
edObject->hasLayer()) | 804 if (!viewportConstrainedObject->isBoxModelObject() || !viewportConstrain
edObject->hasLayer()) |
808 return true; | 805 return true; |
809 RenderLayer* layer = toRenderBoxModelObject(viewportConstrainedObject)->
layer(); | 806 RenderLayer* layer = toRenderBoxModelObject(viewportConstrainedObject)->
layer(); |
810 // Any explicit reason that a fixed position element is not composited s
houldn't cause slow scrolling. | 807 // Any explicit reason that a fixed position element is not composited s
houldn't cause slow scrolling. |
811 if (layer->compositingState() != PaintsIntoOwnBacking && layer->viewport
ConstrainedNotCompositedReason() == RenderLayer::NoNotCompositedReason) | 808 if (!layer->isComposited() && layer->viewportConstrainedNotCompositedRea
son() == RenderLayer::NoNotCompositedReason) |
812 return true; | 809 return true; |
813 | 810 |
814 // Composited layers that actually paint into their enclosing ancestor | 811 // Composited layers that actually paint into their enclosing ancestor |
815 // must also force main thread scrolling. | 812 // must also force main thread scrolling. |
816 if (layer->compositingState() == HasOwnBackingButPaintsIntoAncestor) | 813 if (layer->isComposited() && layer->compositedLayerMapping()->paintsInto
CompositedAncestor()) |
817 return true; | 814 return true; |
818 } | 815 } |
819 return false; | 816 return false; |
820 } | 817 } |
821 | 818 |
822 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co
nst | 819 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co
nst |
823 { | 820 { |
824 // The main thread scrolling reasons are applicable to scrolls of the main | 821 // The main thread scrolling reasons are applicable to scrolls of the main |
825 // frame. If it does not exist or if it is not scrollable, there is no | 822 // frame. If it does not exist or if it is not scrollable, there is no |
826 // reason to force main thread scrolling. | 823 // reason to force main thread scrolling. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 stringBuilder.resize(stringBuilder.length() - 2); | 855 stringBuilder.resize(stringBuilder.length() - 2); |
859 return stringBuilder.toString(); | 856 return stringBuilder.toString(); |
860 } | 857 } |
861 | 858 |
862 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const | 859 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const |
863 { | 860 { |
864 return mainThreadScrollingReasonsAsText(mainThreadScrollingReasons()); | 861 return mainThreadScrollingReasonsAsText(mainThreadScrollingReasons()); |
865 } | 862 } |
866 | 863 |
867 } // namespace WebCore | 864 } // namespace WebCore |
OLD | NEW |