Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: cc/layers/layer_impl.cc

Issue 2611253003: Use private helpers in LayerImpl to shorten property tree references. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« cc/layers/layer_impl.h ('K') | « cc/layers/layer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW
« cc/layers/layer_impl.h ('K') | « cc/layers/layer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698