| Index: cc/trees/layer_tree_host_common.cc
|
| diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
|
| index e12e272653ab7fa2ed335c41ed084711a0da16c0..b05f8ec0e4a335bbad076c29f097c5de73740d27 100644
|
| --- a/cc/trees/layer_tree_host_common.cc
|
| +++ b/cc/trees/layer_tree_host_common.cc
|
| @@ -46,13 +46,21 @@ static void SortLayers(LayerImplList::iterator first,
|
|
|
| template <typename LayerType>
|
| static gfx::Vector2dF GetEffectiveScrollDelta(LayerType* layer) {
|
| - gfx::Vector2dF scroll_delta = layer->ScrollDelta();
|
| + // Layer's scroll offset can have an integer part and fractional part.
|
| + // Due to Blink's limitation, it only counter-scrolls the position-fixed
|
| + // layer using the integer part of Layer's scroll offset.
|
| + // CC scrolls the layer using the full scroll offset, so we have to
|
| + // add the fractional part of the scroll offset to the effective scroll
|
| + // delta which is used to counter-scroll the position-fixed layer.
|
| + gfx::Vector2dF scroll_delta =
|
| + layer->ScrollDelta() + layer->MainScrollOffsetFractionalPart();
|
| // The scroll parent's scroll delta is the amount we've scrolled on the
|
| // compositor thread since the commit for this layer tree's source frame.
|
| // we last reported to the main thread. I.e., it's the discrepancy between
|
| // a scroll parent's scroll delta and offset, so we must add it here.
|
| if (layer->scroll_parent())
|
| - scroll_delta += layer->scroll_parent()->ScrollDelta();
|
| + scroll_delta += layer->scroll_parent()->ScrollDelta() +
|
| + layer->scroll_parent()->MainScrollOffsetFractionalPart();
|
| return scroll_delta;
|
| }
|
|
|
|
|