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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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_layout_height_(0.f), |
| 110 top_controls_content_offset_(0.f), |
110 device_scale_factor_(1.f), | 111 device_scale_factor_(1.f), |
111 visible_(true), | 112 visible_(true), |
112 page_scale_factor_(1.f), | 113 page_scale_factor_(1.f), |
113 min_page_scale_factor_(1.f), | 114 min_page_scale_factor_(1.f), |
114 max_page_scale_factor_(1.f), | 115 max_page_scale_factor_(1.f), |
115 has_gpu_rasterization_trigger_(false), | 116 has_gpu_rasterization_trigger_(false), |
116 content_is_suitable_for_gpu_rasterization_(true), | 117 content_is_suitable_for_gpu_rasterization_(true), |
117 gpu_rasterization_histogram_recorded_(false), | 118 gpu_rasterization_histogram_recorded_(false), |
118 background_color_(SK_ColorWHITE), | 119 background_color_(SK_ColorWHITE), |
119 has_transparent_background_(false), | 120 has_transparent_background_(false), |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 float page_scale_delta = | 341 float page_scale_delta = |
341 sync_tree->page_scale_delta() / sync_tree->sent_page_scale_delta(); | 342 sync_tree->page_scale_delta() / sync_tree->sent_page_scale_delta(); |
342 sync_tree->SetPageScaleValues(page_scale_factor_, | 343 sync_tree->SetPageScaleValues(page_scale_factor_, |
343 min_page_scale_factor_, | 344 min_page_scale_factor_, |
344 max_page_scale_factor_, | 345 max_page_scale_factor_, |
345 page_scale_delta); | 346 page_scale_delta); |
346 sync_tree->set_sent_page_scale_delta(1.f); | 347 sync_tree->set_sent_page_scale_delta(1.f); |
347 | 348 |
348 sync_tree->PassSwapPromises(&swap_promise_list_); | 349 sync_tree->PassSwapPromises(&swap_promise_list_); |
349 | 350 |
| 351 sync_tree->set_top_controls_layout_height(top_controls_layout_height_); |
| 352 sync_tree->set_top_controls_content_offset(top_controls_content_offset_); |
| 353 sync_tree->set_top_controls_delta( |
| 354 sync_tree->top_controls_delta() - |
| 355 sync_tree->sent_top_controls_delta()); |
| 356 sync_tree->set_sent_top_controls_delta(0.f); |
| 357 |
350 host_impl->SetUseGpuRasterization(UseGpuRasterization()); | 358 host_impl->SetUseGpuRasterization(UseGpuRasterization()); |
351 RecordGpuRasterizationHistogram(); | 359 RecordGpuRasterizationHistogram(); |
352 | 360 |
353 host_impl->SetViewportSize(device_viewport_size_); | 361 host_impl->SetViewportSize(device_viewport_size_); |
354 host_impl->SetTopControlsLayoutHeight(top_controls_layout_height_); | |
355 host_impl->SetDeviceScaleFactor(device_scale_factor_); | 362 host_impl->SetDeviceScaleFactor(device_scale_factor_); |
356 host_impl->SetDebugState(debug_state_); | 363 host_impl->SetDebugState(debug_state_); |
357 if (pending_page_scale_animation_) { | 364 if (pending_page_scale_animation_) { |
358 host_impl->StartPageScaleAnimation( | 365 host_impl->StartPageScaleAnimation( |
359 pending_page_scale_animation_->target_offset, | 366 pending_page_scale_animation_->target_offset, |
360 pending_page_scale_animation_->use_anchor, | 367 pending_page_scale_animation_->use_anchor, |
361 pending_page_scale_animation_->scale, | 368 pending_page_scale_animation_->scale, |
362 pending_page_scale_animation_->duration); | 369 pending_page_scale_animation_->duration); |
363 pending_page_scale_animation_.reset(); | 370 pending_page_scale_animation_.reset(); |
364 } | 371 } |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 | 627 |
621 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { | 628 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { |
622 if (device_viewport_size == device_viewport_size_) | 629 if (device_viewport_size == device_viewport_size_) |
623 return; | 630 return; |
624 | 631 |
625 device_viewport_size_ = device_viewport_size; | 632 device_viewport_size_ = device_viewport_size; |
626 | 633 |
627 SetNeedsCommit(); | 634 SetNeedsCommit(); |
628 } | 635 } |
629 | 636 |
630 void LayerTreeHost::SetTopControlsLayoutHeight( | 637 void LayerTreeHost::SetTopControlsLayoutHeight(float height) { |
631 float top_controls_layout_height) { | 638 if (top_controls_layout_height_ == height) |
632 if (top_controls_layout_height_ == top_controls_layout_height) | |
633 return; | 639 return; |
634 | 640 |
635 top_controls_layout_height_ = top_controls_layout_height; | 641 top_controls_layout_height_ = height; |
636 SetNeedsCommit(); | 642 SetNeedsCommit(); |
637 } | 643 } |
638 | 644 |
| 645 void LayerTreeHost::SetTopControlsContentOffset(float offset) { |
| 646 if (top_controls_content_offset_ == offset) |
| 647 return; |
| 648 |
| 649 top_controls_content_offset_ = offset; |
| 650 SetNeedsCommit(); |
| 651 } |
| 652 |
639 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { | 653 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { |
640 DCHECK(CommitRequested()); | 654 DCHECK(CommitRequested()); |
641 page_scale_factor_ *= page_scale_delta; | 655 page_scale_factor_ *= page_scale_delta; |
642 } | 656 } |
643 | 657 |
644 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, | 658 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, |
645 float min_page_scale_factor, | 659 float min_page_scale_factor, |
646 float max_page_scale_factor) { | 660 float max_page_scale_factor) { |
647 if (page_scale_factor == page_scale_factor_ && | 661 if (page_scale_factor == page_scale_factor_ && |
648 min_page_scale_factor == min_page_scale_factor_ && | 662 min_page_scale_factor == min_page_scale_factor_ && |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1065 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1079 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1066 } else if (layer == inner_viewport_scroll_layer_.get()) { | 1080 } else if (layer == inner_viewport_scroll_layer_.get()) { |
1067 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1081 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1068 } else { | 1082 } else { |
1069 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1083 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
1070 info->scrolls[i].scroll_delta); | 1084 info->scrolls[i].scroll_delta); |
1071 } | 1085 } |
1072 } | 1086 } |
1073 | 1087 |
1074 if (!inner_viewport_scroll_delta.IsZero() || | 1088 if (!inner_viewport_scroll_delta.IsZero() || |
1075 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) { | 1089 !outer_viewport_scroll_delta.IsZero() || |
| 1090 info->page_scale_delta != 1.f || |
| 1091 info->top_controls_delta) { |
1076 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1092 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
1077 // so re-get this layer before doing anything to it. | 1093 // so re-get this layer before doing anything to it. |
1078 | 1094 |
1079 // Preemptively apply the scroll offset and scale delta here before sending | 1095 // 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 | 1096 // 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. | 1097 // value, then the layer can early out without needing a full commit. |
1082 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. | 1098 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. |
1083 | 1099 |
1084 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1100 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1085 inner_viewport_scroll_layer_->scroll_offset() + | 1101 inner_viewport_scroll_layer_->scroll_offset() + |
1086 inner_viewport_scroll_delta); | 1102 inner_viewport_scroll_delta); |
1087 if (outer_viewport_scroll_layer_.get()) { | 1103 if (outer_viewport_scroll_layer_.get()) { |
1088 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1104 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1089 outer_viewport_scroll_layer_->scroll_offset() + | 1105 outer_viewport_scroll_layer_->scroll_offset() + |
1090 outer_viewport_scroll_delta); | 1106 outer_viewport_scroll_delta); |
1091 } | 1107 } |
1092 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); | 1108 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); |
1093 | 1109 |
1094 client_->ApplyScrollAndScale( | 1110 client_->ApplyViewportProperties( |
1095 inner_viewport_scroll_delta + outer_viewport_scroll_delta, | 1111 inner_viewport_scroll_delta + outer_viewport_scroll_delta, |
1096 info->page_scale_delta); | 1112 info->page_scale_delta, |
| 1113 info->top_controls_delta); |
1097 } | 1114 } |
1098 } | 1115 } |
1099 | 1116 |
1100 void LayerTreeHost::StartRateLimiter() { | 1117 void LayerTreeHost::StartRateLimiter() { |
1101 if (inside_begin_main_frame_) | 1118 if (inside_begin_main_frame_) |
1102 return; | 1119 return; |
1103 | 1120 |
1104 if (!rate_limit_timer_.IsRunning()) { | 1121 if (!rate_limit_timer_.IsRunning()) { |
1105 rate_limit_timer_.Start(FROM_HERE, | 1122 rate_limit_timer_.Start(FROM_HERE, |
1106 base::TimeDelta(), | 1123 base::TimeDelta(), |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 swap_promise_list_.push_back(swap_promise.Pass()); | 1318 swap_promise_list_.push_back(swap_promise.Pass()); |
1302 } | 1319 } |
1303 | 1320 |
1304 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1321 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1305 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1322 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1306 swap_promise_list_[i]->DidNotSwap(reason); | 1323 swap_promise_list_[i]->DidNotSwap(reason); |
1307 swap_promise_list_.clear(); | 1324 swap_promise_list_.clear(); |
1308 } | 1325 } |
1309 | 1326 |
1310 } // namespace cc | 1327 } // namespace cc |
OLD | NEW |