| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 LayerImpl* inner_container = InnerViewportContainerLayer(); | 293 LayerImpl* inner_container = InnerViewportContainerLayer(); |
| 294 LayerImpl* outer_container = OuterViewportContainerLayer(); | 294 LayerImpl* outer_container = OuterViewportContainerLayer(); |
| 295 | 295 |
| 296 UpdateClipTreeForBoundsDeltaOnLayer(inner_container, | 296 UpdateClipTreeForBoundsDeltaOnLayer(inner_container, |
| 297 &property_trees_.clip_tree); | 297 &property_trees_.clip_tree); |
| 298 UpdateClipTreeForBoundsDeltaOnLayer(InnerViewportScrollLayer(), | 298 UpdateClipTreeForBoundsDeltaOnLayer(InnerViewportScrollLayer(), |
| 299 &property_trees_.clip_tree); | 299 &property_trees_.clip_tree); |
| 300 UpdateClipTreeForBoundsDeltaOnLayer(outer_container, | 300 UpdateClipTreeForBoundsDeltaOnLayer(outer_container, |
| 301 &property_trees_.clip_tree); | 301 &property_trees_.clip_tree); |
| 302 | 302 |
| 303 TransformTree& transform_tree = property_trees_.transform_tree; | |
| 304 if (inner_container) | 303 if (inner_container) |
| 305 transform_tree.SetInnerViewportBoundsDelta(inner_container->bounds_delta()); | 304 property_trees_.SetInnerViewportContainerBoundsDelta( |
| 305 inner_container->bounds_delta()); |
| 306 if (outer_container) | 306 if (outer_container) |
| 307 transform_tree.SetOuterViewportBoundsDelta(outer_container->bounds_delta()); | 307 property_trees_.SetOuterViewportContainerBoundsDelta( |
| 308 outer_container->bounds_delta()); |
| 308 } | 309 } |
| 309 | 310 |
| 310 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 311 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| 311 // The request queue should have been processed and does not require a push. | 312 // The request queue should have been processed and does not require a push. |
| 312 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 313 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 313 | 314 |
| 314 target_tree->SetPropertyTrees(property_trees_); | 315 target_tree->SetPropertyTrees(property_trees_); |
| 316 target_tree->property_trees()->SetupInternalPointers(); |
| 315 | 317 |
| 316 if (next_activation_forces_redraw_) { | 318 if (next_activation_forces_redraw_) { |
| 317 target_tree->ForceRedrawNextActivation(); | 319 target_tree->ForceRedrawNextActivation(); |
| 318 next_activation_forces_redraw_ = false; | 320 next_activation_forces_redraw_ = false; |
| 319 } | 321 } |
| 320 | 322 |
| 321 target_tree->PassSwapPromises(&swap_promise_list_); | 323 target_tree->PassSwapPromises(&swap_promise_list_); |
| 322 | 324 |
| 323 target_tree->set_top_controls_shrink_blink_size( | 325 target_tree->set_top_controls_shrink_blink_size( |
| 324 top_controls_shrink_blink_size_); | 326 top_controls_shrink_blink_size_); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 // after begin frame and updates from animations that have ticked since begin | 479 // after begin frame and updates from animations that have ticked since begin |
| 478 // frame to a newly-committed property tree. | 480 // frame to a newly-committed property tree. |
| 479 if (!root_layer()) | 481 if (!root_layer()) |
| 480 return; | 482 return; |
| 481 LayerTreeHostCommon::CallFunctionForSubtree( | 483 LayerTreeHostCommon::CallFunctionForSubtree( |
| 482 root_layer(), [](LayerImpl* layer) { | 484 root_layer(), [](LayerImpl* layer) { |
| 483 layer->UpdatePropertyTreeForScrollingAndAnimationIfNeeded(); | 485 layer->UpdatePropertyTreeForScrollingAndAnimationIfNeeded(); |
| 484 }); | 486 }); |
| 485 } | 487 } |
| 486 | 488 |
| 487 void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { | 489 void LayerTreeImpl::SetPageScaleOnActiveTreeForTesting( |
| 490 float active_page_scale) { |
| 488 DCHECK(IsActiveTree()); | 491 DCHECK(IsActiveTree()); |
| 489 if (page_scale_factor()->SetCurrent( | 492 if (page_scale_factor()->SetCurrent( |
| 490 ClampPageScaleFactorToLimits(active_page_scale))) | 493 ClampPageScaleFactorToLimits(active_page_scale))) |
| 491 DidUpdatePageScale(); | 494 DidUpdatePageScale(); |
| 492 } | 495 } |
| 493 | 496 |
| 497 void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) { |
| 498 DCHECK(IsActiveTree()); |
| 499 if (page_scale_factor()->SetCurrent( |
| 500 ClampPageScaleFactorToLimits(active_page_scale))) { |
| 501 gfx::Transform identity_transform; |
| 502 UpdatePageScaleFactorInPropertyTrees( |
| 503 property_trees(), PageScaleLayer(), |
| 504 ClampPageScaleFactorToLimits(active_page_scale), device_scale_factor(), |
| 505 identity_transform); |
| 506 DidUpdatePageScale(); |
| 507 } |
| 508 } |
| 509 |
| 494 void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, | 510 void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, |
| 495 float min_page_scale_factor, | 511 float min_page_scale_factor, |
| 496 float max_page_scale_factor) { | 512 float max_page_scale_factor) { |
| 497 PushPageScaleFactorAndLimits(&page_scale_factor, min_page_scale_factor, | 513 PushPageScaleFactorAndLimits(&page_scale_factor, min_page_scale_factor, |
| 498 max_page_scale_factor); | 514 max_page_scale_factor); |
| 499 } | 515 } |
| 500 | 516 |
| 501 void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, | 517 void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, |
| 502 float min_page_scale_factor, | 518 float min_page_scale_factor, |
| 503 float max_page_scale_factor) { | 519 float max_page_scale_factor) { |
| 504 DCHECK(page_scale_factor || IsActiveTree()); | 520 DCHECK(page_scale_factor || IsActiveTree()); |
| 505 bool changed_page_scale = false; | 521 bool changed_page_scale = false; |
| 522 |
| 523 changed_page_scale |= |
| 524 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
| 525 |
| 506 if (page_scale_factor) { | 526 if (page_scale_factor) { |
| 507 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); | 527 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); |
| 508 changed_page_scale |= page_scale_factor_->Delta() != 1.f; | 528 changed_page_scale |= page_scale_factor_->Delta() != 1.f; |
| 509 // TODO(enne): Once CDP goes away, ignore this call below. The only time | 529 // TODO(enne): Once CDP goes away, ignore this call below. The only time |
| 510 // the property trees will differ is if there's been a page scale on the | 530 // the property trees will differ is if there's been a page scale on the |
| 511 // compositor thread after the begin frame, which is the delta check above. | 531 // compositor thread after the begin frame, which is the delta check above. |
| 512 changed_page_scale |= | 532 changed_page_scale |= |
| 513 page_scale_factor_->PushFromMainThread(*page_scale_factor); | 533 page_scale_factor_->PushFromMainThread(*page_scale_factor); |
| 534 if (PageScaleLayer()) { |
| 535 gfx::Transform identity_transform; |
| 536 UpdatePageScaleFactorInPropertyTrees( |
| 537 property_trees(), PageScaleLayer(), |
| 538 ClampPageScaleFactorToLimits(*page_scale_factor), |
| 539 device_scale_factor(), identity_transform); |
| 540 } else { |
| 541 property_trees()->transform_tree.set_page_scale_factor( |
| 542 ClampPageScaleFactorToLimits(*page_scale_factor)); |
| 543 } |
| 544 } else { |
| 545 // Active tree already knows the page_scale_factor, needs to update the |
| 546 // factor in transform tree. |
| 547 if (PageScaleLayer()) { |
| 548 gfx::Transform identity_transform; |
| 549 UpdatePageScaleFactorInPropertyTrees( |
| 550 property_trees(), PageScaleLayer(), |
| 551 ClampPageScaleFactorToLimits( |
| 552 page_scale_factor_->Current(IsActiveTree())), |
| 553 device_scale_factor(), identity_transform); |
| 554 } else { |
| 555 property_trees()->transform_tree.set_page_scale_factor( |
| 556 ClampPageScaleFactorToLimits( |
| 557 page_scale_factor_->Current(IsActiveTree()))); |
| 558 } |
| 514 } | 559 } |
| 560 |
| 515 if (IsActiveTree()) { | 561 if (IsActiveTree()) { |
| 516 // TODO(enne): Pushing from pending to active should never require | 562 // TODO(enne): Pushing from pending to active should never require |
| 517 // DidUpdatePageScale. The values should already be set by the fully | 563 // DidUpdatePageScale. The values should already be set by the fully |
| 518 // computed property trees being synced from one tree to another. Remove | 564 // computed property trees being synced from one tree to another. Remove |
| 519 // this once CDP goes away. | 565 // this once CDP goes away. |
| 520 changed_page_scale |= page_scale_factor_->PushPendingToActive(); | 566 changed_page_scale |= page_scale_factor_->PushPendingToActive(); |
| 521 } | 567 } |
| 522 | 568 |
| 523 changed_page_scale |= | |
| 524 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); | |
| 525 | |
| 526 if (changed_page_scale) | 569 if (changed_page_scale) |
| 527 DidUpdatePageScale(); | 570 DidUpdatePageScale(); |
| 528 } | 571 } |
| 529 | 572 |
| 530 void LayerTreeImpl::set_top_controls_shrink_blink_size(bool shrink) { | 573 void LayerTreeImpl::set_top_controls_shrink_blink_size(bool shrink) { |
| 531 if (top_controls_shrink_blink_size_ == shrink) | 574 if (top_controls_shrink_blink_size_ == shrink) |
| 532 return; | 575 return; |
| 533 | 576 |
| 534 top_controls_shrink_blink_size_ = shrink; | 577 top_controls_shrink_blink_size_ = shrink; |
| 535 if (IsActiveTree()) | 578 if (IsActiveTree()) |
| (...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2050 const gfx::BoxF& box, | 2093 const gfx::BoxF& box, |
| 2051 gfx::BoxF* bounds) const { | 2094 gfx::BoxF* bounds) const { |
| 2052 *bounds = gfx::BoxF(); | 2095 *bounds = gfx::BoxF(); |
| 2053 return layer_tree_host_impl_->animation_host() | 2096 return layer_tree_host_impl_->animation_host() |
| 2054 ? layer_tree_host_impl_->animation_host() | 2097 ? layer_tree_host_impl_->animation_host() |
| 2055 ->TransformAnimationBoundsForBox(layer->id(), box, bounds) | 2098 ->TransformAnimationBoundsForBox(layer->id(), box, bounds) |
| 2056 : true; | 2099 : true; |
| 2057 } | 2100 } |
| 2058 | 2101 |
| 2059 } // namespace cc | 2102 } // namespace cc |
| OLD | NEW |