| Index: cc/trees/layer_tree_host.cc
|
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
|
| index 48f4864ef4a14e903aba2665fa85a989f725ea8a..a09e4f9fbcb0198ab738a1efe8082a25e66c1008 100644
|
| --- a/cc/trees/layer_tree_host.cc
|
| +++ b/cc/trees/layer_tree_host.cc
|
| @@ -1017,31 +1017,40 @@ void LayerTreeHost::PaintLayerContents(
|
| in_paint_layer_contents_ = false;
|
| }
|
|
|
| -void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
|
| +void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
|
| if (!root_layer_.get())
|
| return;
|
|
|
| + ScopedPtrVector<SwapPromise>::iterator it = info->swap_promises.begin();
|
| + for (; it != info->swap_promises.end(); ++it) {
|
| + scoped_ptr<SwapPromise> swap_promise(info->swap_promises.take(it));
|
| + TRACE_EVENT_FLOW_STEP0("input",
|
| + "LatencyInfo.Flow",
|
| + TRACE_ID_DONT_MANGLE(swap_promise->TraceId()),
|
| + "Main thread scroll update");
|
| + QueueSwapPromise(swap_promise.Pass());
|
| + }
|
| +
|
| gfx::Vector2d inner_viewport_scroll_delta;
|
| gfx::Vector2d outer_viewport_scroll_delta;
|
|
|
| - for (size_t i = 0; i < info.scrolls.size(); ++i) {
|
| - Layer* layer =
|
| - LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
|
| - info.scrolls[i].layer_id);
|
| + for (size_t i = 0; i < info->scrolls.size(); ++i) {
|
| + Layer* layer = LayerTreeHostCommon::FindLayerInSubtree(
|
| + root_layer_.get(), info->scrolls[i].layer_id);
|
| if (!layer)
|
| continue;
|
| if (layer == outer_viewport_scroll_layer_.get()) {
|
| - outer_viewport_scroll_delta += info.scrolls[i].scroll_delta;
|
| + outer_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| } else if (layer == inner_viewport_scroll_layer_.get()) {
|
| - inner_viewport_scroll_delta += info.scrolls[i].scroll_delta;
|
| + inner_viewport_scroll_delta += info->scrolls[i].scroll_delta;
|
| } else {
|
| layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
|
| - info.scrolls[i].scroll_delta);
|
| + info->scrolls[i].scroll_delta);
|
| }
|
| }
|
|
|
| if (!inner_viewport_scroll_delta.IsZero() ||
|
| - !outer_viewport_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
|
| + !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) {
|
| // SetScrollOffsetFromImplSide above could have destroyed the tree,
|
| // so re-get this layer before doing anything to it.
|
|
|
| @@ -1058,11 +1067,11 @@ void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
|
| outer_viewport_scroll_layer_->scroll_offset() +
|
| outer_viewport_scroll_delta);
|
| }
|
| - ApplyPageScaleDeltaFromImplSide(info.page_scale_delta);
|
| + ApplyPageScaleDeltaFromImplSide(info->page_scale_delta);
|
|
|
| client_->ApplyScrollAndScale(
|
| inner_viewport_scroll_delta + outer_viewport_scroll_delta,
|
| - info.page_scale_delta);
|
| + info->page_scale_delta);
|
| }
|
| }
|
|
|
|
|