| 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 |