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 float top_controls_height = 0.f; |
| 352 |
| 353 if (host_impl->top_controls_manager()) |
| 354 top_controls_height = host_impl->top_controls_manager()->controls_height(); |
| 355 |
| 356 sync_tree->set_top_controls_layout_height(top_controls_layout_height_); |
| 357 sync_tree->set_top_controls_top_offset(top_controls_content_offset_ - |
| 358 top_controls_height); |
| 359 sync_tree->set_top_controls_delta( |
| 360 sync_tree->top_controls_delta() - |
| 361 sync_tree->sent_top_controls_delta()); |
| 362 sync_tree->set_sent_top_controls_delta(0.f); |
| 363 |
350 host_impl->SetUseGpuRasterization(UseGpuRasterization()); | 364 host_impl->SetUseGpuRasterization(UseGpuRasterization()); |
351 RecordGpuRasterizationHistogram(); | 365 RecordGpuRasterizationHistogram(); |
352 | 366 |
353 host_impl->SetViewportSize(device_viewport_size_); | 367 host_impl->SetViewportSize(device_viewport_size_); |
354 host_impl->SetTopControlsLayoutHeight(top_controls_layout_height_); | |
355 host_impl->SetDeviceScaleFactor(device_scale_factor_); | 368 host_impl->SetDeviceScaleFactor(device_scale_factor_); |
356 host_impl->SetDebugState(debug_state_); | 369 host_impl->SetDebugState(debug_state_); |
357 if (pending_page_scale_animation_) { | 370 if (pending_page_scale_animation_) { |
358 host_impl->StartPageScaleAnimation( | 371 host_impl->StartPageScaleAnimation( |
359 pending_page_scale_animation_->target_offset, | 372 pending_page_scale_animation_->target_offset, |
360 pending_page_scale_animation_->use_anchor, | 373 pending_page_scale_animation_->use_anchor, |
361 pending_page_scale_animation_->scale, | 374 pending_page_scale_animation_->scale, |
362 pending_page_scale_animation_->duration); | 375 pending_page_scale_animation_->duration); |
363 pending_page_scale_animation_.reset(); | 376 pending_page_scale_animation_.reset(); |
364 } | 377 } |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 | 633 |
621 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { | 634 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) { |
622 if (device_viewport_size == device_viewport_size_) | 635 if (device_viewport_size == device_viewport_size_) |
623 return; | 636 return; |
624 | 637 |
625 device_viewport_size_ = device_viewport_size; | 638 device_viewport_size_ = device_viewport_size; |
626 | 639 |
627 SetNeedsCommit(); | 640 SetNeedsCommit(); |
628 } | 641 } |
629 | 642 |
630 void LayerTreeHost::SetTopControlsLayoutHeight( | 643 void LayerTreeHost::SetTopControlsLayoutHeight(float height) { |
631 float top_controls_layout_height) { | 644 if (top_controls_layout_height_ == height) |
632 if (top_controls_layout_height_ == top_controls_layout_height) | |
633 return; | 645 return; |
634 | 646 |
635 top_controls_layout_height_ = top_controls_layout_height; | 647 top_controls_layout_height_ = height; |
636 SetNeedsCommit(); | 648 SetNeedsCommit(); |
637 } | 649 } |
638 | 650 |
| 651 void LayerTreeHost::SetTopControlsContentOffset(float offset) { |
| 652 if (top_controls_content_offset_ == offset) |
| 653 return; |
| 654 |
| 655 top_controls_content_offset_ = offset; |
| 656 SetNeedsCommit(); |
| 657 } |
| 658 |
639 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { | 659 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { |
640 DCHECK(CommitRequested()); | 660 DCHECK(CommitRequested()); |
641 page_scale_factor_ *= page_scale_delta; | 661 page_scale_factor_ *= page_scale_delta; |
642 } | 662 } |
643 | 663 |
644 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, | 664 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, |
645 float min_page_scale_factor, | 665 float min_page_scale_factor, |
646 float max_page_scale_factor) { | 666 float max_page_scale_factor) { |
647 if (page_scale_factor == page_scale_factor_ && | 667 if (page_scale_factor == page_scale_factor_ && |
648 min_page_scale_factor == min_page_scale_factor_ && | 668 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; | 1085 outer_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1066 } else if (layer == inner_viewport_scroll_layer_.get()) { | 1086 } else if (layer == inner_viewport_scroll_layer_.get()) { |
1067 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; | 1087 inner_viewport_scroll_delta += info->scrolls[i].scroll_delta; |
1068 } else { | 1088 } else { |
1069 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1089 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
1070 info->scrolls[i].scroll_delta); | 1090 info->scrolls[i].scroll_delta); |
1071 } | 1091 } |
1072 } | 1092 } |
1073 | 1093 |
1074 if (!inner_viewport_scroll_delta.IsZero() || | 1094 if (!inner_viewport_scroll_delta.IsZero() || |
1075 !outer_viewport_scroll_delta.IsZero() || info->page_scale_delta != 1.f) { | 1095 !outer_viewport_scroll_delta.IsZero() || |
| 1096 info->page_scale_delta != 1.f || |
| 1097 info->top_controls_delta) { |
1076 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1098 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
1077 // so re-get this layer before doing anything to it. | 1099 // so re-get this layer before doing anything to it. |
1078 | 1100 |
1079 // Preemptively apply the scroll offset and scale delta here before sending | 1101 // 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 | 1102 // 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. | 1103 // value, then the layer can early out without needing a full commit. |
1082 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. | 1104 DCHECK(inner_viewport_scroll_layer_.get()); // We should always have this. |
1083 | 1105 |
1084 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1106 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1085 inner_viewport_scroll_layer_->scroll_offset() + | 1107 inner_viewport_scroll_layer_->scroll_offset() + |
1086 inner_viewport_scroll_delta); | 1108 inner_viewport_scroll_delta); |
1087 if (outer_viewport_scroll_layer_.get()) { | 1109 if (outer_viewport_scroll_layer_.get()) { |
1088 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( | 1110 outer_viewport_scroll_layer_->SetScrollOffsetFromImplSide( |
1089 outer_viewport_scroll_layer_->scroll_offset() + | 1111 outer_viewport_scroll_layer_->scroll_offset() + |
1090 outer_viewport_scroll_delta); | 1112 outer_viewport_scroll_delta); |
1091 } | 1113 } |
1092 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); | 1114 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); |
1093 | 1115 |
1094 client_->ApplyScrollAndScale( | 1116 client_->ApplyViewportDeltas( |
1095 inner_viewport_scroll_delta + outer_viewport_scroll_delta, | 1117 inner_viewport_scroll_delta + outer_viewport_scroll_delta, |
1096 info->page_scale_delta); | 1118 info->page_scale_delta, |
| 1119 info->top_controls_delta); |
1097 } | 1120 } |
1098 } | 1121 } |
1099 | 1122 |
1100 void LayerTreeHost::StartRateLimiter() { | 1123 void LayerTreeHost::StartRateLimiter() { |
1101 if (inside_begin_main_frame_) | 1124 if (inside_begin_main_frame_) |
1102 return; | 1125 return; |
1103 | 1126 |
1104 if (!rate_limit_timer_.IsRunning()) { | 1127 if (!rate_limit_timer_.IsRunning()) { |
1105 rate_limit_timer_.Start(FROM_HERE, | 1128 rate_limit_timer_.Start(FROM_HERE, |
1106 base::TimeDelta(), | 1129 base::TimeDelta(), |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 swap_promise_list_.push_back(swap_promise.Pass()); | 1324 swap_promise_list_.push_back(swap_promise.Pass()); |
1302 } | 1325 } |
1303 | 1326 |
1304 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { | 1327 void LayerTreeHost::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
1305 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 1328 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
1306 swap_promise_list_[i]->DidNotSwap(reason); | 1329 swap_promise_list_[i]->DidNotSwap(reason); |
1307 swap_promise_list_.clear(); | 1330 swap_promise_list_.clear(); |
1308 } | 1331 } |
1309 | 1332 |
1310 } // namespace cc | 1333 } // namespace cc |
OLD | NEW |