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