| 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..f21ed3fb153db4bf4c06d3e7a787c719afff1091 100644
|
| --- a/cc/trees/layer_tree_host_common.cc
|
| +++ b/cc/trees/layer_tree_host_common.cc
|
| @@ -6,7 +6,7 @@
|
|
|
| #include <algorithm>
|
|
|
| -#include "base/debug/trace_event.h"
|
| +#include "base/trace_event/trace_event.h"
|
| #include "cc/base/math_util.h"
|
| #include "cc/layers/heads_up_display_layer_impl.h"
|
| #include "cc/layers/layer.h"
|
| @@ -46,19 +46,28 @@ 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 ScrollCompensationAdjustment (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->ScrollCompensationAdjustment();
|
| // 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->ScrollCompensationAdjustment();
|
| return scroll_delta;
|
| }
|
|
|
| template <typename LayerType>
|
| -static gfx::ScrollOffset GetEffectiveTotalScrollOffset(LayerType* layer) {
|
| - gfx::ScrollOffset offset = layer->TotalScrollOffset();
|
| +static gfx::ScrollOffset GetEffectiveCurrentScrollOffset(LayerType* layer) {
|
| + gfx::ScrollOffset offset = layer->CurrentScrollOffset();
|
| // The scroll parent's total scroll offset (scroll offset + scroll delta)
|
| // can't be used because its scroll offset has already been applied to the
|
| // scroll children's positions by the main thread layer positioning code.
|
| @@ -1666,7 +1675,7 @@ static void CalculateDrawPropertiesInternal(
|
| layer->parent()->screen_space_transform_is_animating();
|
| }
|
| gfx::Point3F transform_origin = layer->transform_origin();
|
| - gfx::ScrollOffset scroll_offset = GetEffectiveTotalScrollOffset(layer);
|
| + gfx::ScrollOffset scroll_offset = GetEffectiveCurrentScrollOffset(layer);
|
| gfx::PointF position =
|
| layer->position() - ScrollOffsetToVector2dF(scroll_offset);
|
| gfx::Transform combined_transform = data_from_ancestor.parent_matrix;
|
|
|