OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <stack> | 8 #include <stack> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 next_ui_resource_id_(1), | 99 next_ui_resource_id_(1), |
100 inside_begin_main_frame_(false), | 100 inside_begin_main_frame_(false), |
101 needs_full_tree_sync_(true), | 101 needs_full_tree_sync_(true), |
102 client_(client), | 102 client_(client), |
103 source_frame_number_(0), | 103 source_frame_number_(0), |
104 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), | 104 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), |
105 output_surface_lost_(true), | 105 output_surface_lost_(true), |
106 num_failed_recreate_attempts_(0), | 106 num_failed_recreate_attempts_(0), |
107 settings_(settings), | 107 settings_(settings), |
108 debug_state_(settings.initial_debug_state), | 108 debug_state_(settings.initial_debug_state), |
109 top_controls_layout_height_(0.f), | 109 top_controls_content_offset_(0.f), |
110 device_scale_factor_(1.f), | 110 device_scale_factor_(1.f), |
111 visible_(true), | 111 visible_(true), |
112 page_scale_factor_(1.f), | 112 page_scale_factor_(1.f), |
113 min_page_scale_factor_(1.f), | 113 min_page_scale_factor_(1.f), |
114 max_page_scale_factor_(1.f), | 114 max_page_scale_factor_(1.f), |
115 has_gpu_rasterization_trigger_(false), | 115 has_gpu_rasterization_trigger_(false), |
116 content_is_suitable_for_gpu_rasterization_(true), | 116 content_is_suitable_for_gpu_rasterization_(true), |
117 gpu_rasterization_histogram_recorded_(false), | 117 gpu_rasterization_histogram_recorded_(false), |
118 background_color_(SK_ColorWHITE), | 118 background_color_(SK_ColorWHITE), |
119 has_transparent_background_(false), | 119 has_transparent_background_(false), |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 float page_scale_delta = | 340 float page_scale_delta = |
341 sync_tree->page_scale_delta() / sync_tree->sent_page_scale_delta(); | 341 sync_tree->page_scale_delta() / sync_tree->sent_page_scale_delta(); |
342 sync_tree->SetPageScaleValues(page_scale_factor_, | 342 sync_tree->SetPageScaleValues(page_scale_factor_, |
343 min_page_scale_factor_, | 343 min_page_scale_factor_, |
344 max_page_scale_factor_, | 344 max_page_scale_factor_, |
345 page_scale_delta); | 345 page_scale_delta); |
346 sync_tree->set_sent_page_scale_delta(1.f); | 346 sync_tree->set_sent_page_scale_delta(1.f); |
347 | 347 |
348 sync_tree->PassSwapPromises(&swap_promise_list_); | 348 sync_tree->PassSwapPromises(&swap_promise_list_); |
349 | 349 |
| 350 sync_tree->set_top_controls_content_offset(top_controls_content_offset_); |
| 351 sync_tree->set_top_controls_delta( |
| 352 sync_tree->top_controls_delta() - |
| 353 sync_tree->sent_top_controls_delta()); |
| 354 sync_tree->set_sent_top_controls_delta(0.f); |
| 355 |
350 host_impl->SetUseGpuRasterization(UseGpuRasterization()); | 356 host_impl->SetUseGpuRasterization(UseGpuRasterization()); |
351 RecordGpuRasterizationHistogram(); | 357 RecordGpuRasterizationHistogram(); |
352 | 358 |
353 host_impl->SetViewportSize(device_viewport_size_); | 359 host_impl->SetViewportSize(device_viewport_size_); |
354 host_impl->SetTopControlsLayoutHeight(top_controls_layout_height_); | |
355 host_impl->SetDeviceScaleFactor(device_scale_factor_); | 360 host_impl->SetDeviceScaleFactor(device_scale_factor_); |
356 host_impl->SetDebugState(debug_state_); | 361 host_impl->SetDebugState(debug_state_); |
357 if (pending_page_scale_animation_) { | 362 if (pending_page_scale_animation_) { |
358 host_impl->StartPageScaleAnimation( | 363 host_impl->StartPageScaleAnimation( |
359 pending_page_scale_animation_->target_offset, | 364 pending_page_scale_animation_->target_offset, |
360 pending_page_scale_animation_->use_anchor, | 365 pending_page_scale_animation_->use_anchor, |
361 pending_page_scale_animation_->scale, | 366 pending_page_scale_animation_->scale, |
362 pending_page_scale_animation_->duration); | 367 pending_page_scale_animation_->duration); |
363 pending_page_scale_animation_.reset(); | 368 pending_page_scale_animation_.reset(); |
364 } | 369 } |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 | 625 |
621 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { | 626 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { |
622 if (device_viewport_size == device_viewport_size_) | 627 if (device_viewport_size == device_viewport_size_) |
623 return; | 628 return; |
624 | 629 |
625 device_viewport_size_ = device_viewport_size; | 630 device_viewport_size_ = device_viewport_size; |
626 | 631 |
627 SetNeedsCommit(); | 632 SetNeedsCommit(); |
628 } | 633 } |
629 | 634 |
630 void LayerTreeHost::SetTopControlsLayoutHeight( | 635 void LayerTreeHost::SetTopControlsContentOffset(float offset) { |
631 float top_controls_layout_height) { | 636 if (top_controls_content_offset_ == offset) |
632 if (top_controls_layout_height_ == top_controls_layout_height) | |
633 return; | 637 return; |
634 | 638 |
635 top_controls_layout_height_ = top_controls_layout_height; | 639 top_controls_content_offset_ = offset; |
636 SetNeedsCommit(); | 640 SetNeedsCommit(); |
637 } | 641 } |
638 | 642 |
639 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { | 643 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { |
640 DCHECK(CommitRequested()); | 644 DCHECK(CommitRequested()); |
641 page_scale_factor_ *= page_scale_delta; | 645 page_scale_factor_ *= page_scale_delta; |
642 } | 646 } |
643 | 647 |
644 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, | 648 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, |
645 float min_page_scale_factor, | 649 float min_page_scale_factor, |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1065 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1069 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1066 } else if (layer == inner_viewport_scroll_layer_.get()) { | 1070 } else if (layer == inner_viewport_scroll_layer_.get()) { |
1067 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1071 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1068 } else { | 1072 } else { |
1069 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1073 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
1070 info->scrolls[i].scroll_delta); | 1074 info->scrolls[i].scroll_delta); |
1071 } | 1075 } |
1072 } | 1076 } |
1073 | 1077 |
1074 if (!inner_viewport_scroll_delta.IsZero() || | 1078 if (!inner_viewport_scroll_delta.IsZero() || |
1075 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) { | 1079 !outer_viewport_scroll_delta.IsZero() || |
| 1080 info->page_scale_delta != 1.f || |
| 1081 info->top_controls_content_offset != top_controls_content_offset_) { |
1076 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1082 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
1077 // so re-get this layer before doing anything to it. | 1083 // so re-get this layer before doing anything to it. |
1078 | 1084 |
1079 // Preemptively apply the scroll offset and scale delta here before sending | 1085 // Preemptively apply the scroll offset and scale delta here before sending |
1080 // it to the client. If the client comes back and sets it to the same | 1086 // it to the client. If the client comes back and sets it to the same |
1081 // value, then the layer can early out without needing a full commit. | 1087 // value, then the layer can early out without needing a full commit. |
1082 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. | 1088 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. |
1083 | 1089 |
| 1090 // TODO(bokan): Fold this call into the client_->ApplyScrollAndScale call |
| 1091 // below once single viewport pinch is removed. |
| 1092 client_->SetTopControlsContentOffset(info->top_controls_content_offset); |
| 1093 |
1084 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1094 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1085 inner_viewport_scroll_layer_->scroll_offset() + | 1095 inner_viewport_scroll_layer_->scroll_offset() + |
1086 inner_viewport_scroll_delta); | 1096 inner_viewport_scroll_delta); |
1087 if (outer_viewport_scroll_layer_.get()) { | 1097 if (outer_viewport_scroll_layer_.get()) { |
1088 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1098 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1089 outer_viewport_scroll_layer_->scroll_offset() + | 1099 outer_viewport_scroll_layer_->scroll_offset() + |
1090 outer_viewport_scroll_delta); | 1100 outer_viewport_scroll_delta); |
1091 } | 1101 } |
1092 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); | 1102 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); |
1093 | 1103 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 swap_promise_list_.push_back(swap_promise.Pass()); | 1311 swap_promise_list_.push_back(swap_promise.Pass()); |
1302 } | 1312 } |
1303 | 1313 |
1304 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1314 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1305 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1315 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1306 swap_promise_list_[i]->DidNotSwap(reason); | 1316 swap_promise_list_[i]->DidNotSwap(reason); |
1307 swap_promise_list_.clear(); | 1317 swap_promise_list_.clear(); |
1308 } | 1318 } |
1309 | 1319 |
1310 } // namespace cc | 1320 } // namespace cc |
OLD | NEW |