OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 } | 128 } |
129 | 129 |
130 void LayerImpl::SetDebugInfo( | 130 void LayerImpl::SetDebugInfo( |
131 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> debug_info) { | 131 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> debug_info) { |
132 owned_debug_info_ = std::move(debug_info); | 132 owned_debug_info_ = std::move(debug_info); |
133 debug_info_ = owned_debug_info_.get(); | 133 debug_info_ = owned_debug_info_.get(); |
134 SetNeedsPushProperties(); | 134 SetNeedsPushProperties(); |
135 } | 135 } |
136 | 136 |
137 void LayerImpl::DistributeScroll(ScrollState* scroll_state) { | 137 void LayerImpl::DistributeScroll(ScrollState* scroll_state) { |
138 ScrollTree& scroll_tree = layer_tree_impl()->property_trees()->scroll_tree; | 138 ScrollTree& scroll_tree = GetScrollTree(); |
139 ScrollNode* scroll_node = scroll_tree.Node(scroll_tree_index()); | 139 ScrollNode* scroll_node = scroll_tree.Node(scroll_tree_index()); |
140 scroll_tree.DistributeScroll(scroll_node, scroll_state); | 140 scroll_tree.DistributeScroll(scroll_node, scroll_state); |
141 } | 141 } |
142 | 142 |
143 void LayerImpl::SetTransformTreeIndex(int index) { | 143 void LayerImpl::SetTransformTreeIndex(int index) { |
144 transform_tree_index_ = index; | 144 transform_tree_index_ = index; |
145 } | 145 } |
146 | 146 |
147 void LayerImpl::SetClipTreeIndex(int index) { | 147 void LayerImpl::SetClipTreeIndex(int index) { |
148 clip_tree_index_ = index; | 148 clip_tree_index_ = index; |
149 } | 149 } |
150 | 150 |
151 void LayerImpl::SetEffectTreeIndex(int index) { | 151 void LayerImpl::SetEffectTreeIndex(int index) { |
152 effect_tree_index_ = index; | 152 effect_tree_index_ = index; |
153 } | 153 } |
154 | 154 |
155 int LayerImpl::render_target_effect_tree_index() const { | 155 int LayerImpl::render_target_effect_tree_index() const { |
156 EffectNode* effect_node = | 156 EffectNode* effect_node = GetEffectTree().Node(effect_tree_index_); |
157 layer_tree_impl_->property_trees()->effect_tree.Node(effect_tree_index_); | 157 return effect_node->render_surface ? effect_node->id : effect_node->target_id; |
158 if (effect_node->render_surface) | |
159 return effect_node->id; | |
160 else | |
161 return effect_node->target_id; | |
162 } | 158 } |
163 | 159 |
164 void LayerImpl::SetScrollTreeIndex(int index) { | 160 void LayerImpl::SetScrollTreeIndex(int index) { |
165 scroll_tree_index_ = index; | 161 scroll_tree_index_ = index; |
166 } | 162 } |
167 | 163 |
168 void LayerImpl::ClearRenderSurfaceLayerList() { | 164 void LayerImpl::ClearRenderSurfaceLayerList() { |
169 if (render_surface_) | 165 if (render_surface_) |
170 render_surface_->ClearLayerLists(); | 166 render_surface_->ClearLayerLists(); |
171 } | 167 } |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 } | 275 } |
280 } | 276 } |
281 | 277 |
282 void LayerImpl::GetContentsResourceId(ResourceId* resource_id, | 278 void LayerImpl::GetContentsResourceId(ResourceId* resource_id, |
283 gfx::Size* resource_size) const { | 279 gfx::Size* resource_size) const { |
284 NOTREACHED(); | 280 NOTREACHED(); |
285 *resource_id = 0; | 281 *resource_id = 0; |
286 } | 282 } |
287 | 283 |
288 gfx::Vector2dF LayerImpl::ScrollBy(const gfx::Vector2dF& scroll) { | 284 gfx::Vector2dF LayerImpl::ScrollBy(const gfx::Vector2dF& scroll) { |
289 ScrollTree& scroll_tree = layer_tree_impl()->property_trees()->scroll_tree; | 285 ScrollTree& scroll_tree = GetScrollTree(); |
290 ScrollNode* scroll_node = scroll_tree.Node(scroll_tree_index()); | 286 ScrollNode* scroll_node = scroll_tree.Node(scroll_tree_index()); |
291 return scroll_tree.ScrollBy(scroll_node, scroll, layer_tree_impl()); | 287 return scroll_tree.ScrollBy(scroll_node, scroll, layer_tree_impl()); |
292 } | 288 } |
293 | 289 |
294 void LayerImpl::SetScrollClipLayer(int scroll_clip_layer_id) { | 290 void LayerImpl::SetScrollClipLayer(int scroll_clip_layer_id) { |
295 if (scroll_clip_layer_id_ == scroll_clip_layer_id) | 291 if (scroll_clip_layer_id_ == scroll_clip_layer_id) |
296 return; | 292 return; |
297 | 293 |
298 layer_tree_impl()->UnregisterScrollLayer(this); | 294 layer_tree_impl()->UnregisterScrollLayer(this); |
299 scroll_clip_layer_id_ = scroll_clip_layer_id; | 295 scroll_clip_layer_id_ = scroll_clip_layer_id; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 layer->SetDebugInfo(std::move(owned_debug_info_)); | 384 layer->SetDebugInfo(std::move(owned_debug_info_)); |
389 | 385 |
390 // Reset any state that should be cleared for the next update. | 386 // Reset any state that should be cleared for the next update. |
391 layer_property_changed_ = false; | 387 layer_property_changed_ = false; |
392 needs_push_properties_ = false; | 388 needs_push_properties_ = false; |
393 update_rect_ = gfx::Rect(); | 389 update_rect_ = gfx::Rect(); |
394 layer_tree_impl()->RemoveLayerShouldPushProperties(this); | 390 layer_tree_impl()->RemoveLayerShouldPushProperties(this); |
395 } | 391 } |
396 | 392 |
397 bool LayerImpl::IsAffectedByPageScale() const { | 393 bool LayerImpl::IsAffectedByPageScale() const { |
398 TransformTree& transform_tree = | 394 TransformTree& transform_tree = GetTransformTree(); |
399 layer_tree_impl()->property_trees()->transform_tree; | |
400 return transform_tree.Node(transform_tree_index()) | 395 return transform_tree.Node(transform_tree_index()) |
401 ->in_subtree_of_page_scale_layer; | 396 ->in_subtree_of_page_scale_layer; |
402 } | 397 } |
403 | 398 |
404 gfx::Vector2dF LayerImpl::FixedContainerSizeDelta() const { | 399 gfx::Vector2dF LayerImpl::FixedContainerSizeDelta() const { |
405 LayerImpl* scroll_clip_layer = | 400 LayerImpl* scroll_clip_layer = |
406 layer_tree_impl()->LayerById(scroll_clip_layer_id_); | 401 layer_tree_impl()->LayerById(scroll_clip_layer_id_); |
407 if (!scroll_clip_layer) | 402 if (!scroll_clip_layer) |
408 return gfx::Vector2dF(); | 403 return gfx::Vector2dF(); |
409 | 404 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 list = new base::ListValue; | 444 list = new base::ListValue; |
450 for (size_t i = 0; i < test_properties()->children.size(); ++i) | 445 for (size_t i = 0; i < test_properties()->children.size(); ++i) |
451 list->Append(test_properties()->children[i]->LayerTreeAsJson()); | 446 list->Append(test_properties()->children[i]->LayerTreeAsJson()); |
452 result->Set("Children", list); | 447 result->Set("Children", list); |
453 | 448 |
454 return result; | 449 return result; |
455 } | 450 } |
456 | 451 |
457 bool LayerImpl::LayerPropertyChanged() const { | 452 bool LayerImpl::LayerPropertyChanged() const { |
458 if (layer_property_changed_ || | 453 if (layer_property_changed_ || |
459 (layer_tree_impl()->property_trees() && | 454 (GetPropertyTrees() && GetPropertyTrees()->full_tree_damaged)) |
460 layer_tree_impl()->property_trees()->full_tree_damaged)) | |
461 return true; | 455 return true; |
462 if (transform_tree_index() == TransformTree::kInvalidNodeId) | 456 if (transform_tree_index() == TransformTree::kInvalidNodeId) |
463 return false; | 457 return false; |
464 TransformNode* transform_node = | 458 TransformNode* transform_node = |
465 layer_tree_impl()->property_trees()->transform_tree.Node( | 459 GetTransformTree().Node(transform_tree_index()); |
466 transform_tree_index()); | |
467 if (transform_node && transform_node->transform_changed) | 460 if (transform_node && transform_node->transform_changed) |
468 return true; | 461 return true; |
469 if (effect_tree_index() == EffectTree::kInvalidNodeId) | 462 if (effect_tree_index() == EffectTree::kInvalidNodeId) |
470 return false; | 463 return false; |
471 EffectNode* effect_node = | 464 EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); |
472 layer_tree_impl()->property_trees()->effect_tree.Node( | |
473 effect_tree_index()); | |
474 if (effect_node && effect_node->effect_changed) | 465 if (effect_node && effect_node->effect_changed) |
475 return true; | 466 return true; |
476 return false; | 467 return false; |
477 } | 468 } |
478 | 469 |
479 void LayerImpl::NoteLayerPropertyChanged() { | 470 void LayerImpl::NoteLayerPropertyChanged() { |
480 layer_property_changed_ = true; | 471 layer_property_changed_ = true; |
481 layer_tree_impl()->set_needs_update_draw_properties(); | 472 layer_tree_impl()->set_needs_update_draw_properties(); |
482 SetNeedsPushProperties(); | 473 SetNeedsPushProperties(); |
483 } | 474 } |
(...skipping 16 matching lines...) Expand all Loading... |
500 needs_push_properties_ = false; | 491 needs_push_properties_ = false; |
501 | 492 |
502 update_rect_.SetRect(0, 0, 0, 0); | 493 update_rect_.SetRect(0, 0, 0, 0); |
503 damage_rect_.SetRect(0, 0, 0, 0); | 494 damage_rect_.SetRect(0, 0, 0, 0); |
504 | 495 |
505 if (render_surface_) | 496 if (render_surface_) |
506 render_surface_->ResetPropertyChangedFlags(); | 497 render_surface_->ResetPropertyChangedFlags(); |
507 } | 498 } |
508 | 499 |
509 int LayerImpl::num_copy_requests_in_target_subtree() { | 500 int LayerImpl::num_copy_requests_in_target_subtree() { |
510 return layer_tree_impl() | 501 return GetEffectTree() |
511 ->property_trees() | 502 .Node(effect_tree_index()) |
512 ->effect_tree.Node(effect_tree_index()) | |
513 ->num_copy_requests_in_subtree; | 503 ->num_copy_requests_in_subtree; |
514 } | 504 } |
515 | 505 |
516 void LayerImpl::UpdatePropertyTreeTransformIsAnimated(bool is_animated) { | 506 void LayerImpl::UpdatePropertyTreeTransformIsAnimated(bool is_animated) { |
517 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 507 PropertyTrees* property_trees = GetPropertyTrees(); |
518 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 508 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
519 id())) { | 509 id())) { |
520 TransformNode* node = property_trees->transform_tree.Node( | 510 TransformTree& transform_tree = GetTransformTree(); |
521 property_trees->transform_id_to_index_map[id()]); | 511 TransformNode* node = |
| 512 transform_tree.Node(property_trees->transform_id_to_index_map[id()]); |
522 // A LayerImpl's own current state is insufficient for determining whether | 513 // A LayerImpl's own current state is insufficient for determining whether |
523 // it owns a TransformNode, since this depends on the state of the | 514 // it owns a TransformNode, since this depends on the state of the |
524 // corresponding Layer at the time of the last commit. For example, if | 515 // corresponding Layer at the time of the last commit. For example, if |
525 // |is_animated| is false, this might mean a transform animation just ticked | 516 // |is_animated| is false, this might mean a transform animation just ticked |
526 // past its finish point (so the LayerImpl still owns a TransformNode) or it | 517 // past its finish point (so the LayerImpl still owns a TransformNode) or it |
527 // might mean that a transform animation was removed during commit or | 518 // might mean that a transform animation was removed during commit or |
528 // activation (and, in that case, the LayerImpl will no longer own a | 519 // activation (and, in that case, the LayerImpl will no longer own a |
529 // TransformNode, unless it has non-animation-related reasons for owning a | 520 // TransformNode, unless it has non-animation-related reasons for owning a |
530 // node). | 521 // node). |
531 if (node->has_potential_animation != is_animated) { | 522 if (node->has_potential_animation != is_animated) { |
532 node->has_potential_animation = is_animated; | 523 node->has_potential_animation = is_animated; |
533 if (is_animated) { | 524 if (is_animated) { |
534 node->has_only_translation_animations = HasOnlyTranslationTransforms(); | 525 node->has_only_translation_animations = HasOnlyTranslationTransforms(); |
535 } else { | 526 } else { |
536 node->has_only_translation_animations = true; | 527 node->has_only_translation_animations = true; |
537 } | 528 } |
538 | 529 |
539 property_trees->transform_tree.set_needs_update(true); | 530 transform_tree.set_needs_update(true); |
540 layer_tree_impl()->set_needs_update_draw_properties(); | 531 layer_tree_impl()->set_needs_update_draw_properties(); |
541 } | 532 } |
542 } | 533 } |
543 } | 534 } |
544 | 535 |
545 void LayerImpl::UpdatePropertyTreeForScrollingAndAnimationIfNeeded() { | 536 void LayerImpl::UpdatePropertyTreeForScrollingAndAnimationIfNeeded() { |
546 if (scrollable()) | 537 if (scrollable()) |
547 UpdatePropertyTreeScrollOffset(); | 538 UpdatePropertyTreeScrollOffset(); |
548 | 539 |
549 if (HasAnyAnimationTargetingProperty(TargetProperty::TRANSFORM)) { | 540 if (HasAnyAnimationTargetingProperty(TargetProperty::TRANSFORM)) { |
550 UpdatePropertyTreeTransformIsAnimated( | 541 UpdatePropertyTreeTransformIsAnimated( |
551 HasPotentiallyRunningTransformAnimation()); | 542 HasPotentiallyRunningTransformAnimation()); |
552 } | 543 } |
553 } | 544 } |
554 | 545 |
555 gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const { | 546 gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const { |
556 return CurrentScrollOffset(); | 547 return CurrentScrollOffset(); |
557 } | 548 } |
558 | 549 |
559 void LayerImpl::OnIsAnimatingChanged(const PropertyAnimationState& mask, | 550 void LayerImpl::OnIsAnimatingChanged(const PropertyAnimationState& mask, |
560 const PropertyAnimationState& state) { | 551 const PropertyAnimationState& state) { |
561 DCHECK(layer_tree_impl_); | 552 DCHECK(layer_tree_impl_); |
562 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 553 PropertyTrees* property_trees = GetPropertyTrees(); |
563 | 554 |
564 TransformNode* transform_node = nullptr; | 555 TransformNode* transform_node = nullptr; |
565 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 556 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
566 id())) { | 557 id())) { |
567 transform_node = property_trees->transform_tree.Node( | 558 transform_node = GetTransformTree().Node( |
568 property_trees->transform_id_to_index_map[id()]); | 559 property_trees->transform_id_to_index_map[id()]); |
569 } | 560 } |
570 | 561 |
571 EffectNode* effect_node = nullptr; | 562 EffectNode* effect_node = nullptr; |
572 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { | 563 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { |
573 effect_node = property_trees->effect_tree.Node( | 564 effect_node = |
574 property_trees->effect_id_to_index_map[id()]); | 565 GetEffectTree().Node(property_trees->effect_id_to_index_map[id()]); |
575 } | 566 } |
576 | 567 |
577 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; | 568 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; |
578 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { | 569 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { |
579 switch (property) { | 570 switch (property) { |
580 case TargetProperty::TRANSFORM: | 571 case TargetProperty::TRANSFORM: |
581 if (transform_node) { | 572 if (transform_node) { |
582 if (mask.currently_running[property]) | 573 if (mask.currently_running[property]) |
583 transform_node->is_currently_animating = | 574 transform_node->is_currently_animating = |
584 state.currently_running[property]; | 575 state.currently_running[property]; |
585 if (mask.potentially_animating[property]) { | 576 if (mask.potentially_animating[property]) { |
586 UpdatePropertyTreeTransformIsAnimated( | 577 UpdatePropertyTreeTransformIsAnimated( |
587 state.potentially_animating[property]); | 578 state.potentially_animating[property]); |
588 was_ever_ready_since_last_transform_animation_ = false; | 579 was_ever_ready_since_last_transform_animation_ = false; |
589 } | 580 } |
590 } | 581 } |
591 break; | 582 break; |
592 case TargetProperty::OPACITY: | 583 case TargetProperty::OPACITY: |
593 if (effect_node) { | 584 if (effect_node) { |
594 if (mask.currently_running[property]) | 585 if (mask.currently_running[property]) |
595 effect_node->is_currently_animating_opacity = | 586 effect_node->is_currently_animating_opacity = |
596 state.currently_running[property]; | 587 state.currently_running[property]; |
597 if (mask.potentially_animating[property]) { | 588 if (mask.potentially_animating[property]) { |
598 effect_node->has_potential_opacity_animation = | 589 effect_node->has_potential_opacity_animation = |
599 state.potentially_animating[property]; | 590 state.potentially_animating[property]; |
600 property_trees->effect_tree.set_needs_update(true); | 591 GetEffectTree().set_needs_update(true); |
601 } | 592 } |
602 } | 593 } |
603 break; | 594 break; |
604 case TargetProperty::FILTER: | 595 case TargetProperty::FILTER: |
605 if (effect_node) { | 596 if (effect_node) { |
606 if (mask.currently_running[property]) | 597 if (mask.currently_running[property]) |
607 effect_node->is_currently_animating_filter = | 598 effect_node->is_currently_animating_filter = |
608 state.currently_running[property]; | 599 state.currently_running[property]; |
609 if (mask.potentially_animating[property]) | 600 if (mask.potentially_animating[property]) |
610 effect_node->has_potential_filter_animation = | 601 effect_node->has_potential_filter_animation = |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 NoteLayerPropertyChanged(); | 634 NoteLayerPropertyChanged(); |
644 } | 635 } |
645 | 636 |
646 void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { | 637 void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { |
647 DCHECK(IsActive()); | 638 DCHECK(IsActive()); |
648 if (bounds_delta_ == bounds_delta) | 639 if (bounds_delta_ == bounds_delta) |
649 return; | 640 return; |
650 | 641 |
651 bounds_delta_ = bounds_delta; | 642 bounds_delta_ = bounds_delta; |
652 | 643 |
653 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 644 PropertyTrees* property_trees = GetPropertyTrees(); |
654 if (this == layer_tree_impl()->InnerViewportContainerLayer()) | 645 if (this == layer_tree_impl()->InnerViewportContainerLayer()) |
655 property_trees->SetInnerViewportContainerBoundsDelta(bounds_delta); | 646 property_trees->SetInnerViewportContainerBoundsDelta(bounds_delta); |
656 else if (this == layer_tree_impl()->OuterViewportContainerLayer()) | 647 else if (this == layer_tree_impl()->OuterViewportContainerLayer()) |
657 property_trees->SetOuterViewportContainerBoundsDelta(bounds_delta); | 648 property_trees->SetOuterViewportContainerBoundsDelta(bounds_delta); |
658 else if (this == layer_tree_impl()->InnerViewportScrollLayer()) | 649 else if (this == layer_tree_impl()->InnerViewportScrollLayer()) |
659 property_trees->SetInnerViewportScrollBoundsDelta(bounds_delta); | 650 property_trees->SetInnerViewportScrollBoundsDelta(bounds_delta); |
660 | 651 |
661 layer_tree_impl()->DidUpdateScrollState(id()); | 652 layer_tree_impl()->DidUpdateScrollState(id()); |
662 | 653 |
663 if (masks_to_bounds()) { | 654 if (masks_to_bounds()) { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 | 713 |
723 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { | 714 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { |
724 masks_to_bounds_ = masks_to_bounds; | 715 masks_to_bounds_ = masks_to_bounds; |
725 } | 716 } |
726 | 717 |
727 void LayerImpl::SetContentsOpaque(bool opaque) { | 718 void LayerImpl::SetContentsOpaque(bool opaque) { |
728 contents_opaque_ = opaque; | 719 contents_opaque_ = opaque; |
729 } | 720 } |
730 | 721 |
731 float LayerImpl::Opacity() const { | 722 float LayerImpl::Opacity() const { |
732 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 723 PropertyTrees* property_trees = GetPropertyTrees(); |
733 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 724 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
734 return 1.f; | 725 return 1.f; |
735 EffectNode* node = property_trees->effect_tree.Node( | 726 EffectNode* node = |
736 property_trees->effect_id_to_index_map[id()]); | 727 GetEffectTree().Node(property_trees->effect_id_to_index_map[id()]); |
737 return node->opacity; | 728 return node->opacity; |
738 } | 729 } |
739 | 730 |
740 const gfx::Transform& LayerImpl::Transform() const { | 731 const gfx::Transform& LayerImpl::Transform() const { |
741 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 732 PropertyTrees* property_trees = GetPropertyTrees(); |
742 DCHECK(property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 733 DCHECK(property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
743 id())); | 734 id())); |
744 TransformNode* node = property_trees->transform_tree.Node( | 735 TransformNode* node = |
745 property_trees->transform_id_to_index_map[id()]); | 736 GetTransformTree().Node(property_trees->transform_id_to_index_map[id()]); |
746 return node->local; | 737 return node->local; |
747 } | 738 } |
748 | 739 |
749 void LayerImpl::SetElementId(ElementId element_id) { | 740 void LayerImpl::SetElementId(ElementId element_id) { |
750 if (element_id == element_id_) | 741 if (element_id == element_id_) |
751 return; | 742 return; |
752 | 743 |
753 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), | 744 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), |
754 "LayerImpl::SetElementId", "element", | 745 "LayerImpl::SetElementId", "element", |
755 element_id.AsValue().release()); | 746 element_id.AsValue().release()); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 update_rect_ = update_rect; | 822 update_rect_ = update_rect; |
832 SetNeedsPushProperties(); | 823 SetNeedsPushProperties(); |
833 } | 824 } |
834 | 825 |
835 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { | 826 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { |
836 damage_rect_.Union(damage_rect); | 827 damage_rect_.Union(damage_rect); |
837 } | 828 } |
838 | 829 |
839 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) { | 830 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) { |
840 DCHECK(IsActive()); | 831 DCHECK(IsActive()); |
841 if (layer_tree_impl()->property_trees()->scroll_tree.SetScrollOffset( | 832 if (GetScrollTree().SetScrollOffset(id(), scroll_offset)) |
842 id(), scroll_offset)) | |
843 layer_tree_impl()->DidUpdateScrollOffset(id()); | 833 layer_tree_impl()->DidUpdateScrollOffset(id()); |
844 } | 834 } |
845 | 835 |
846 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const { | 836 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const { |
847 return layer_tree_impl()->property_trees()->scroll_tree.current_scroll_offset( | 837 return GetScrollTree().current_scroll_offset(id()); |
848 id()); | |
849 } | 838 } |
850 | 839 |
851 void LayerImpl::UpdatePropertyTreeScrollOffset() { | 840 void LayerImpl::UpdatePropertyTreeScrollOffset() { |
852 // TODO(enne): in the future, scrolling should update the scroll tree | 841 // TODO(enne): in the future, scrolling should update the scroll tree |
853 // directly instead of going through layers. | 842 // directly instead of going through layers. |
854 TransformTree& transform_tree = | 843 TransformTree& transform_tree = GetTransformTree(); |
855 layer_tree_impl()->property_trees()->transform_tree; | |
856 TransformNode* node = transform_tree.Node(transform_tree_index_); | 844 TransformNode* node = transform_tree.Node(transform_tree_index_); |
857 gfx::ScrollOffset current_offset = CurrentScrollOffset(); | 845 gfx::ScrollOffset current_offset = CurrentScrollOffset(); |
858 if (node->scroll_offset != current_offset) { | 846 if (node->scroll_offset != current_offset) { |
859 node->scroll_offset = current_offset; | 847 node->scroll_offset = current_offset; |
860 node->needs_local_transform_update = true; | 848 node->needs_local_transform_update = true; |
861 transform_tree.set_needs_update(true); | 849 transform_tree.set_needs_update(true); |
862 } | 850 } |
863 } | 851 } |
864 | 852 |
865 SimpleEnclosedRegion LayerImpl::VisibleOpaqueRegion() const { | 853 SimpleEnclosedRegion LayerImpl::VisibleOpaqueRegion() const { |
866 if (contents_opaque()) | 854 if (contents_opaque()) |
867 return SimpleEnclosedRegion(visible_layer_rect()); | 855 return SimpleEnclosedRegion(visible_layer_rect()); |
868 return SimpleEnclosedRegion(); | 856 return SimpleEnclosedRegion(); |
869 } | 857 } |
870 | 858 |
871 void LayerImpl::DidBeginTracing() {} | 859 void LayerImpl::DidBeginTracing() {} |
872 | 860 |
873 void LayerImpl::ReleaseResources() {} | 861 void LayerImpl::ReleaseResources() {} |
874 | 862 |
875 void LayerImpl::ReleaseTileResources() {} | 863 void LayerImpl::ReleaseTileResources() {} |
876 | 864 |
877 void LayerImpl::RecreateTileResources() {} | 865 void LayerImpl::RecreateTileResources() {} |
878 | 866 |
879 gfx::ScrollOffset LayerImpl::MaxScrollOffset() const { | 867 gfx::ScrollOffset LayerImpl::MaxScrollOffset() const { |
880 return layer_tree_impl()->property_trees()->scroll_tree.MaxScrollOffset( | 868 return GetScrollTree().MaxScrollOffset(scroll_tree_index()); |
881 scroll_tree_index()); | |
882 } | 869 } |
883 | 870 |
884 gfx::ScrollOffset LayerImpl::ClampScrollOffsetToLimits( | 871 gfx::ScrollOffset LayerImpl::ClampScrollOffsetToLimits( |
885 gfx::ScrollOffset offset) const { | 872 gfx::ScrollOffset offset) const { |
886 offset.SetToMin(MaxScrollOffset()); | 873 offset.SetToMin(MaxScrollOffset()); |
887 offset.SetToMax(gfx::ScrollOffset()); | 874 offset.SetToMax(gfx::ScrollOffset()); |
888 return offset; | 875 return offset; |
889 } | 876 } |
890 | 877 |
891 gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() { | 878 gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 if (should_have_render_surface) { | 987 if (should_have_render_surface) { |
1001 render_surface_ = base::MakeUnique<RenderSurfaceImpl>(this); | 988 render_surface_ = base::MakeUnique<RenderSurfaceImpl>(this); |
1002 return; | 989 return; |
1003 } | 990 } |
1004 render_surface_.reset(); | 991 render_surface_.reset(); |
1005 } | 992 } |
1006 | 993 |
1007 gfx::Transform LayerImpl::DrawTransform() const { | 994 gfx::Transform LayerImpl::DrawTransform() const { |
1008 // Only drawn layers have up-to-date draw properties. | 995 // Only drawn layers have up-to-date draw properties. |
1009 if (!is_drawn_render_surface_layer_list_member()) { | 996 if (!is_drawn_render_surface_layer_list_member()) { |
1010 if (layer_tree_impl()->property_trees()->non_root_surfaces_enabled) { | 997 if (GetPropertyTrees()->non_root_surfaces_enabled) { |
1011 return draw_property_utils::DrawTransform( | 998 return draw_property_utils::DrawTransform(this, GetTransformTree(), |
1012 this, layer_tree_impl()->property_trees()->transform_tree, | 999 GetEffectTree()); |
1013 layer_tree_impl()->property_trees()->effect_tree); | |
1014 } else { | 1000 } else { |
1015 return draw_property_utils::ScreenSpaceTransform( | 1001 return draw_property_utils::ScreenSpaceTransform(this, |
1016 this, layer_tree_impl()->property_trees()->transform_tree); | 1002 GetTransformTree()); |
1017 } | 1003 } |
1018 } | 1004 } |
1019 | 1005 |
1020 return draw_properties().target_space_transform; | 1006 return draw_properties().target_space_transform; |
1021 } | 1007 } |
1022 | 1008 |
1023 gfx::Transform LayerImpl::ScreenSpaceTransform() const { | 1009 gfx::Transform LayerImpl::ScreenSpaceTransform() const { |
1024 // Only drawn layers have up-to-date draw properties. | 1010 // Only drawn layers have up-to-date draw properties. |
1025 if (!is_drawn_render_surface_layer_list_member()) { | 1011 if (!is_drawn_render_surface_layer_list_member()) { |
1026 return draw_property_utils::ScreenSpaceTransform( | 1012 return draw_property_utils::ScreenSpaceTransform(this, GetTransformTree()); |
1027 this, layer_tree_impl()->property_trees()->transform_tree); | |
1028 } | 1013 } |
1029 | 1014 |
1030 return draw_properties().screen_space_transform; | 1015 return draw_properties().screen_space_transform; |
1031 } | 1016 } |
1032 | 1017 |
1033 bool LayerImpl::CanUseLCDText() const { | 1018 bool LayerImpl::CanUseLCDText() const { |
1034 if (layer_tree_impl()->settings().layers_always_allowed_lcd_text) | 1019 if (layer_tree_impl()->settings().layers_always_allowed_lcd_text) |
1035 return true; | 1020 return true; |
1036 if (!layer_tree_impl()->settings().can_use_lcd_text) | 1021 if (!layer_tree_impl()->settings().can_use_lcd_text) |
1037 return false; | 1022 return false; |
1038 if (!contents_opaque()) | 1023 if (!contents_opaque()) |
1039 return false; | 1024 return false; |
1040 | 1025 |
1041 if (layer_tree_impl() | 1026 if (GetEffectTree().Node(effect_tree_index())->screen_space_opacity != 1.f) |
1042 ->property_trees() | |
1043 ->effect_tree.Node(effect_tree_index()) | |
1044 ->screen_space_opacity != 1.f) | |
1045 return false; | 1027 return false; |
1046 if (!layer_tree_impl() | 1028 if (!GetTransformTree() |
1047 ->property_trees() | 1029 .Node(transform_tree_index()) |
1048 ->transform_tree.Node(transform_tree_index()) | |
1049 ->node_and_ancestors_have_only_integer_translation) | 1030 ->node_and_ancestors_have_only_integer_translation) |
1050 return false; | 1031 return false; |
1051 if (static_cast<int>(offset_to_transform_parent().x()) != | 1032 if (static_cast<int>(offset_to_transform_parent().x()) != |
1052 offset_to_transform_parent().x()) | 1033 offset_to_transform_parent().x()) |
1053 return false; | 1034 return false; |
1054 if (static_cast<int>(offset_to_transform_parent().y()) != | 1035 if (static_cast<int>(offset_to_transform_parent().y()) != |
1055 offset_to_transform_parent().y()) | 1036 offset_to_transform_parent().y()) |
1056 return false; | 1037 return false; |
1057 return true; | 1038 return true; |
1058 } | 1039 } |
1059 | 1040 |
1060 Region LayerImpl::GetInvalidationRegionForDebugging() { | 1041 Region LayerImpl::GetInvalidationRegionForDebugging() { |
1061 return Region(update_rect_); | 1042 return Region(update_rect_); |
1062 } | 1043 } |
1063 | 1044 |
1064 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { | 1045 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { |
1065 return MathUtil::MapEnclosingClippedRect(DrawTransform(), | 1046 return MathUtil::MapEnclosingClippedRect(DrawTransform(), |
1066 gfx::Rect(bounds())); | 1047 gfx::Rect(bounds())); |
1067 } | 1048 } |
1068 | 1049 |
1069 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1050 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
1070 gfx::Transform scaled_draw_transform = DrawTransform(); | 1051 gfx::Transform scaled_draw_transform = DrawTransform(); |
1071 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1052 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
1072 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); | 1053 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
1073 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1054 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
1074 gfx::Rect(scaled_bounds)); | 1055 gfx::Rect(scaled_bounds)); |
1075 } | 1056 } |
1076 | 1057 |
1077 RenderSurfaceImpl* LayerImpl::render_target() { | 1058 RenderSurfaceImpl* LayerImpl::render_target() { |
1078 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; | 1059 return GetEffectTree() |
1079 return effect_tree.Node(render_target_effect_tree_index())->render_surface; | 1060 .Node(render_target_effect_tree_index()) |
| 1061 ->render_surface; |
1080 } | 1062 } |
1081 | 1063 |
1082 const RenderSurfaceImpl* LayerImpl::render_target() const { | 1064 const RenderSurfaceImpl* LayerImpl::render_target() const { |
1083 const EffectTree& effect_tree = | 1065 return GetEffectTree() |
1084 layer_tree_impl_->property_trees()->effect_tree; | 1066 .Node(render_target_effect_tree_index()) |
1085 return effect_tree.Node(render_target_effect_tree_index())->render_surface; | 1067 ->render_surface; |
1086 } | 1068 } |
1087 | 1069 |
1088 bool LayerImpl::IsHidden() const { | 1070 bool LayerImpl::IsHidden() const { |
1089 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; | 1071 EffectNode* node = GetEffectTree().Node(effect_tree_index_); |
1090 EffectNode* node = effect_tree.Node(effect_tree_index_); | |
1091 return node->screen_space_opacity == 0.f; | 1072 return node->screen_space_opacity == 0.f; |
1092 } | 1073 } |
1093 | 1074 |
1094 float LayerImpl::GetIdealContentsScale() const { | 1075 float LayerImpl::GetIdealContentsScale() const { |
1095 float page_scale = IsAffectedByPageScale() | 1076 float page_scale = IsAffectedByPageScale() |
1096 ? layer_tree_impl()->current_page_scale_factor() | 1077 ? layer_tree_impl()->current_page_scale_factor() |
1097 : 1.f; | 1078 : 1.f; |
1098 float device_scale = layer_tree_impl()->device_scale_factor(); | 1079 float device_scale = layer_tree_impl()->device_scale_factor(); |
1099 | 1080 |
1100 float default_scale = page_scale * device_scale; | 1081 float default_scale = page_scale * device_scale; |
1101 if (!layer_tree_impl() | 1082 if (!layer_tree_impl() |
1102 ->settings() | 1083 ->settings() |
1103 .layer_transforms_should_scale_layer_contents) { | 1084 .layer_transforms_should_scale_layer_contents) { |
1104 return default_scale; | 1085 return default_scale; |
1105 } | 1086 } |
1106 | 1087 |
1107 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1088 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1108 ScreenSpaceTransform(), default_scale); | 1089 ScreenSpaceTransform(), default_scale); |
1109 return std::max(transform_scales.x(), transform_scales.y()); | 1090 return std::max(transform_scales.x(), transform_scales.y()); |
1110 } | 1091 } |
1111 | 1092 |
| 1093 PropertyTrees* LayerImpl::GetPropertyTrees() const { |
| 1094 return layer_tree_impl_->property_trees(); |
| 1095 } |
| 1096 |
| 1097 EffectTree& LayerImpl::GetEffectTree() const { |
| 1098 return GetPropertyTrees()->effect_tree; |
| 1099 } |
| 1100 |
| 1101 ScrollTree& LayerImpl::GetScrollTree() const { |
| 1102 return GetPropertyTrees()->scroll_tree; |
| 1103 } |
| 1104 |
| 1105 TransformTree& LayerImpl::GetTransformTree() const { |
| 1106 return GetPropertyTrees()->transform_tree; |
| 1107 } |
| 1108 |
1112 } // namespace cc | 1109 } // namespace cc |
OLD | NEW |