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_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
| 7 #include <algorithm> |
7 #include <limits> | 8 #include <limits> |
8 #include <set> | 9 #include <set> |
9 | 10 |
10 #include "base/trace_event/trace_event.h" | 11 #include "base/trace_event/trace_event.h" |
11 #include "base/trace_event/trace_event_argument.h" | 12 #include "base/trace_event/trace_event_argument.h" |
12 #include "cc/animation/keyframed_animation_curve.h" | 13 #include "cc/animation/keyframed_animation_curve.h" |
13 #include "cc/animation/scrollbar_animation_controller.h" | 14 #include "cc/animation/scrollbar_animation_controller.h" |
14 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" | 15 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" |
15 #include "cc/animation/scrollbar_animation_controller_thinning.h" | 16 #include "cc/animation/scrollbar_animation_controller_thinning.h" |
16 #include "cc/base/math_util.h" | 17 #include "cc/base/math_util.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 private: | 70 private: |
70 LayerImpl* layer_; | 71 LayerImpl* layer_; |
71 LayerScrollOffsetDelegate* delegate_; | 72 LayerScrollOffsetDelegate* delegate_; |
72 LayerTreeImpl* layer_tree_impl_; | 73 LayerTreeImpl* layer_tree_impl_; |
73 gfx::ScrollOffset last_set_scroll_offset_; | 74 gfx::ScrollOffset last_set_scroll_offset_; |
74 }; | 75 }; |
75 | 76 |
76 LayerTreeImpl::LayerTreeImpl( | 77 LayerTreeImpl::LayerTreeImpl( |
77 LayerTreeHostImpl* layer_tree_host_impl, | 78 LayerTreeHostImpl* layer_tree_host_impl, |
78 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 79 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
| 80 scoped_refptr<SyncedTopControls> top_controls_shown_ratio, |
79 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 81 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
80 : layer_tree_host_impl_(layer_tree_host_impl), | 82 : layer_tree_host_impl_(layer_tree_host_impl), |
81 source_frame_number_(-1), | 83 source_frame_number_(-1), |
82 hud_layer_(0), | 84 hud_layer_(0), |
83 currently_scrolling_layer_(NULL), | 85 currently_scrolling_layer_(NULL), |
84 root_layer_scroll_offset_delegate_(NULL), | 86 root_layer_scroll_offset_delegate_(NULL), |
85 background_color_(0), | 87 background_color_(0), |
86 has_transparent_background_(false), | 88 has_transparent_background_(false), |
87 overscroll_elasticity_layer_(NULL), | 89 overscroll_elasticity_layer_(NULL), |
88 page_scale_layer_(NULL), | 90 page_scale_layer_(NULL), |
89 inner_viewport_scroll_layer_(NULL), | 91 inner_viewport_scroll_layer_(NULL), |
90 outer_viewport_scroll_layer_(NULL), | 92 outer_viewport_scroll_layer_(NULL), |
91 page_scale_factor_(page_scale_factor), | 93 page_scale_factor_(page_scale_factor), |
92 min_page_scale_factor_(0), | 94 min_page_scale_factor_(0), |
93 max_page_scale_factor_(0), | 95 max_page_scale_factor_(0), |
94 elastic_overscroll_(elastic_overscroll), | 96 elastic_overscroll_(elastic_overscroll), |
95 scrolling_layer_id_from_previous_tree_(0), | 97 scrolling_layer_id_from_previous_tree_(0), |
96 contents_textures_purged_(false), | 98 contents_textures_purged_(false), |
97 viewport_size_invalid_(false), | 99 viewport_size_invalid_(false), |
98 needs_update_draw_properties_(true), | 100 needs_update_draw_properties_(true), |
99 needs_full_tree_sync_(true), | 101 needs_full_tree_sync_(true), |
100 next_activation_forces_redraw_(false), | 102 next_activation_forces_redraw_(false), |
101 has_ever_been_drawn_(false), | 103 has_ever_been_drawn_(false), |
102 render_surface_layer_list_id_(0), | 104 render_surface_layer_list_id_(0), |
103 top_controls_shrink_blink_size_(false), | 105 top_controls_shrink_blink_size_(false), |
104 top_controls_height_(0), | 106 top_controls_height_(0), |
105 top_controls_content_offset_(0), | 107 top_controls_shown_ratio_(top_controls_shown_ratio) { |
106 top_controls_delta_(0), | |
107 sent_top_controls_delta_(0) { | |
108 } | 108 } |
109 | 109 |
110 LayerTreeImpl::~LayerTreeImpl() { | 110 LayerTreeImpl::~LayerTreeImpl() { |
111 BreakSwapPromises(SwapPromise::SWAP_FAILS); | 111 BreakSwapPromises(SwapPromise::SWAP_FAILS); |
112 | 112 |
113 // Need to explicitly clear the tree prior to destroying this so that | 113 // Need to explicitly clear the tree prior to destroying this so that |
114 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. | 114 // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. |
115 DCHECK(!root_layer_); | 115 DCHECK(!root_layer_); |
116 DCHECK(layers_with_copy_output_request_.empty()); | 116 DCHECK(layers_with_copy_output_request_.empty()); |
117 } | 117 } |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 // The request queue should have been processed and does not require a push. | 198 // The request queue should have been processed and does not require a push. |
199 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 199 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
200 | 200 |
201 if (next_activation_forces_redraw_) { | 201 if (next_activation_forces_redraw_) { |
202 target_tree->ForceRedrawNextActivation(); | 202 target_tree->ForceRedrawNextActivation(); |
203 next_activation_forces_redraw_ = false; | 203 next_activation_forces_redraw_ = false; |
204 } | 204 } |
205 | 205 |
206 target_tree->PassSwapPromises(&swap_promise_list_); | 206 target_tree->PassSwapPromises(&swap_promise_list_); |
207 | 207 |
208 // Track the change in top controls height to offset the top_controls_delta | 208 target_tree->set_top_controls_shrink_blink_size( |
209 // properly. This is so that the top controls offset will be maintained | 209 top_controls_shrink_blink_size_); |
210 // across height changes. | 210 target_tree->set_top_controls_height(top_controls_height_); |
211 float top_controls_height_delta = | 211 target_tree->PushTopControls(nullptr); |
212 target_tree->top_controls_height_ - top_controls_height_; | |
213 | |
214 target_tree->top_controls_shrink_blink_size_ = | |
215 top_controls_shrink_blink_size_; | |
216 target_tree->top_controls_height_ = top_controls_height_; | |
217 target_tree->top_controls_content_offset_ = top_controls_content_offset_; | |
218 target_tree->top_controls_delta_ = target_tree->top_controls_delta_ - | |
219 target_tree->sent_top_controls_delta_ - | |
220 top_controls_height_delta; | |
221 target_tree->sent_top_controls_delta_ = 0.f; | |
222 | 212 |
223 // Active tree already shares the page_scale_factor object with pending | 213 // Active tree already shares the page_scale_factor object with pending |
224 // tree so only the limits need to be provided. | 214 // tree so only the limits need to be provided. |
225 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), | 215 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), |
226 max_page_scale_factor()); | 216 max_page_scale_factor()); |
227 target_tree->elastic_overscroll()->PushPendingToActive(); | 217 target_tree->elastic_overscroll()->PushPendingToActive(); |
228 | 218 |
229 target_tree->pending_page_scale_animation_ = | 219 target_tree->pending_page_scale_animation_ = |
230 pending_page_scale_animation_.Pass(); | 220 pending_page_scale_animation_.Pass(); |
231 | 221 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 } | 342 } |
353 if (IsActiveTree()) | 343 if (IsActiveTree()) |
354 changed_page_scale |= page_scale_factor_->PushPendingToActive(); | 344 changed_page_scale |= page_scale_factor_->PushPendingToActive(); |
355 changed_page_scale |= | 345 changed_page_scale |= |
356 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); | 346 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
357 | 347 |
358 if (changed_page_scale) | 348 if (changed_page_scale) |
359 DidUpdatePageScale(); | 349 DidUpdatePageScale(); |
360 } | 350 } |
361 | 351 |
| 352 void LayerTreeImpl::set_top_controls_shrink_blink_size(bool shrink) { |
| 353 if (top_controls_shrink_blink_size_ == shrink) |
| 354 return; |
| 355 |
| 356 top_controls_shrink_blink_size_ = shrink; |
| 357 if (IsActiveTree()) |
| 358 layer_tree_host_impl_->UpdateViewportContainerSizes(); |
| 359 } |
| 360 |
| 361 void LayerTreeImpl::set_top_controls_height(float top_controls_height) { |
| 362 if (top_controls_height_ == top_controls_height) |
| 363 return; |
| 364 |
| 365 top_controls_height_ = top_controls_height; |
| 366 if (IsActiveTree()) |
| 367 layer_tree_host_impl_->UpdateViewportContainerSizes(); |
| 368 } |
| 369 |
| 370 bool LayerTreeImpl::SetCurrentTopControlsShownRatio(float ratio) { |
| 371 ratio = std::max(ratio, 0.f); |
| 372 ratio = std::min(ratio, 1.f); |
| 373 return top_controls_shown_ratio_->SetCurrent(ratio); |
| 374 } |
| 375 |
| 376 void LayerTreeImpl::PushTopControlsFromMainThread( |
| 377 float top_controls_shown_ratio) { |
| 378 PushTopControls(&top_controls_shown_ratio); |
| 379 } |
| 380 |
| 381 void LayerTreeImpl::PushTopControls(const float* top_controls_shown_ratio) { |
| 382 DCHECK(top_controls_shown_ratio || IsActiveTree()); |
| 383 |
| 384 if (top_controls_shown_ratio) { |
| 385 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); |
| 386 top_controls_shown_ratio_->PushFromMainThread(*top_controls_shown_ratio); |
| 387 } |
| 388 if (IsActiveTree()) { |
| 389 if (top_controls_shown_ratio_->PushPendingToActive()) |
| 390 layer_tree_host_impl_->DidChangeTopControlsPosition(); |
| 391 } |
| 392 } |
| 393 |
362 bool LayerTreeImpl::SetPageScaleFactorLimits(float min_page_scale_factor, | 394 bool LayerTreeImpl::SetPageScaleFactorLimits(float min_page_scale_factor, |
363 float max_page_scale_factor) { | 395 float max_page_scale_factor) { |
364 if (min_page_scale_factor == min_page_scale_factor_ && | 396 if (min_page_scale_factor == min_page_scale_factor_ && |
365 max_page_scale_factor == max_page_scale_factor_) | 397 max_page_scale_factor == max_page_scale_factor_) |
366 return false; | 398 return false; |
367 | 399 |
368 min_page_scale_factor_ = min_page_scale_factor; | 400 min_page_scale_factor_ = min_page_scale_factor; |
369 max_page_scale_factor_ = max_page_scale_factor; | 401 max_page_scale_factor_ = max_page_scale_factor; |
370 | 402 |
371 return true; | 403 return true; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 } | 471 } |
440 | 472 |
441 static void ApplySentScrollDeltasFromAbortedCommitTo(LayerImpl* layer) { | 473 static void ApplySentScrollDeltasFromAbortedCommitTo(LayerImpl* layer) { |
442 layer->ApplySentScrollDeltasFromAbortedCommit(); | 474 layer->ApplySentScrollDeltasFromAbortedCommit(); |
443 } | 475 } |
444 | 476 |
445 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { | 477 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { |
446 DCHECK(IsActiveTree()); | 478 DCHECK(IsActiveTree()); |
447 | 479 |
448 page_scale_factor()->AbortCommit(); | 480 page_scale_factor()->AbortCommit(); |
| 481 top_controls_shown_ratio()->AbortCommit(); |
449 elastic_overscroll()->AbortCommit(); | 482 elastic_overscroll()->AbortCommit(); |
450 | 483 |
451 top_controls_content_offset_ += sent_top_controls_delta_; | |
452 top_controls_delta_ -= sent_top_controls_delta_; | |
453 sent_top_controls_delta_ = 0.f; | |
454 | |
455 if (!root_layer()) | 484 if (!root_layer()) |
456 return; | 485 return; |
457 | 486 |
458 LayerTreeHostCommon::CallFunctionForSubtree( | 487 LayerTreeHostCommon::CallFunctionForSubtree( |
459 root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo)); | 488 root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo)); |
460 } | 489 } |
461 | 490 |
462 void LayerTreeImpl::SetViewportLayersFromIds( | 491 void LayerTreeImpl::SetViewportLayersFromIds( |
463 int overscroll_elasticity_layer_id, | 492 int overscroll_elasticity_layer_id, |
464 int page_scale_layer_id, | 493 int page_scale_layer_id, |
(...skipping 1085 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1550 scoped_ptr<PendingPageScaleAnimation> pending_animation) { | 1579 scoped_ptr<PendingPageScaleAnimation> pending_animation) { |
1551 pending_page_scale_animation_ = pending_animation.Pass(); | 1580 pending_page_scale_animation_ = pending_animation.Pass(); |
1552 } | 1581 } |
1553 | 1582 |
1554 scoped_ptr<PendingPageScaleAnimation> | 1583 scoped_ptr<PendingPageScaleAnimation> |
1555 LayerTreeImpl::TakePendingPageScaleAnimation() { | 1584 LayerTreeImpl::TakePendingPageScaleAnimation() { |
1556 return pending_page_scale_animation_.Pass(); | 1585 return pending_page_scale_animation_.Pass(); |
1557 } | 1586 } |
1558 | 1587 |
1559 } // namespace cc | 1588 } // namespace cc |
OLD | NEW |