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

Side by Side Diff: cc/trees/layer_tree_impl.cc

Issue 2860293002: Change cc::ElementId to be a uint64_t (Closed)
Patch Set: none Created 3 years, 7 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
OLDNEW
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 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 512
513 LayerImplList::reverse_iterator LayerTreeImpl::rbegin() { 513 LayerImplList::reverse_iterator LayerTreeImpl::rbegin() {
514 return layer_list_.rbegin(); 514 return layer_list_.rbegin();
515 } 515 }
516 516
517 LayerImplList::reverse_iterator LayerTreeImpl::rend() { 517 LayerImplList::reverse_iterator LayerTreeImpl::rend() {
518 return layer_list_.rend(); 518 return layer_list_.rend();
519 } 519 }
520 520
521 int LayerTreeImpl::LayerIdByElementId(ElementId element_id) const { 521 int LayerTreeImpl::LayerIdByElementId(ElementId element_id) const {
522 auto iter = element_layers_map_.find(element_id); 522 auto iter = element_layers_map_.find(element_id.id);
wkorman 2017/05/08 18:23:24 Similar to my prev comment re: hash, there must be
523 if (iter == element_layers_map_.end()) 523 if (iter == element_layers_map_.end())
524 return Layer::INVALID_ID; 524 return Layer::INVALID_ID;
525 525
526 return iter->second; 526 return iter->second;
527 } 527 }
528 528
529 LayerImpl* LayerTreeImpl::LayerByElementId(ElementId element_id) const { 529 LayerImpl* LayerTreeImpl::LayerByElementId(ElementId element_id) const {
530 return LayerById(LayerIdByElementId(element_id)); 530 return LayerById(LayerIdByElementId(element_id));
531 } 531 }
532 532
533 void LayerTreeImpl::AddToElementMap(LayerImpl* layer) { 533 void LayerTreeImpl::AddToElementMap(LayerImpl* layer) {
534 ElementId element_id = layer->element_id(); 534 ElementId element_id = layer->element_id();
535 if (!element_id) 535 if (!element_id)
536 return; 536 return;
537 537
538 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), 538 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
539 "LayerTreeImpl::AddToElementMap", "element", 539 "LayerTreeImpl::AddToElementMap", "element", element_id.id,
540 element_id.AsValue().release(), "layer_id", layer->id()); 540 "layer_id", layer->id());
541 541
542 #if DCHECK_IS_ON() 542 #if DCHECK_IS_ON()
543 LayerImpl* existing_layer = LayerByElementId(element_id); 543 LayerImpl* existing_layer = LayerByElementId(element_id);
544 bool element_id_collision_detected = 544 bool element_id_collision_detected =
545 existing_layer && existing_layer != layer; 545 existing_layer && existing_layer != layer;
546 546
547 // TODO(pdr): Remove this suppression and always check for id collisions. 547 // TODO(pdr): Remove this suppression and always check for id collisions.
548 // This is a temporary suppression for SPV2 which generates unnecessary 548 // This is a temporary suppression for SPV2 which generates unnecessary
549 // layers that collide. Remove once crbug.com/693693 is fixed. 549 // layers that collide. Remove once crbug.com/693693 is fixed.
550 if (!settings().use_layer_lists) 550 if (!settings().use_layer_lists)
551 DCHECK(!element_id_collision_detected); 551 DCHECK(!element_id_collision_detected);
552 #endif 552 #endif
553 553
554 element_layers_map_[element_id] = layer->id(); 554 element_layers_map_[element_id.id] = layer->id();
555 555
556 layer_tree_host_impl_->mutator_host()->RegisterElement( 556 layer_tree_host_impl_->mutator_host()->RegisterElement(
557 element_id, 557 element_id,
558 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); 558 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
559 } 559 }
560 560
561 void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) { 561 void LayerTreeImpl::RemoveFromElementMap(LayerImpl* layer) {
562 if (!layer->element_id()) 562 if (!layer->element_id())
563 return; 563 return;
564 564
565 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), 565 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
566 "LayerTreeImpl::RemoveFromElementMap", "element", 566 "LayerTreeImpl::RemoveFromElementMap", "element",
567 layer->element_id().AsValue().release(), "layer_id", 567 layer->element_id().id, "layer_id", layer->id());
568 layer->id());
569 568
570 layer_tree_host_impl_->mutator_host()->UnregisterElement( 569 layer_tree_host_impl_->mutator_host()->UnregisterElement(
571 layer->element_id(), 570 layer->element_id(),
572 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING); 571 IsActiveTree() ? ElementListType::ACTIVE : ElementListType::PENDING);
573 572
574 element_layers_map_.erase(layer->element_id()); 573 element_layers_map_.erase(layer->element_id().id);
575 } 574 }
576 575
577 void LayerTreeImpl::AddToOpacityAnimationsMap(int id, float opacity) { 576 void LayerTreeImpl::AddToOpacityAnimationsMap(int id, float opacity) {
578 if (LayerImpl* layer = LayerById(id)) 577 if (LayerImpl* layer = LayerById(id))
579 element_id_to_opacity_animations_[layer->element_id()] = opacity; 578 element_id_to_opacity_animations_[layer->element_id().id] = opacity;
580 } 579 }
581 580
582 void LayerTreeImpl::SetTransformMutated(ElementId element_id, 581 void LayerTreeImpl::SetTransformMutated(ElementId element_id,
583 const gfx::Transform& transform) { 582 const gfx::Transform& transform) {
584 DCHECK_EQ(1u, property_trees()->element_id_to_transform_node_index.count( 583 DCHECK_EQ(1u, property_trees()->element_id_to_transform_node_index.count(
585 element_id)); 584 element_id));
586 element_id_to_transform_animations_[element_id] = transform; 585 element_id_to_transform_animations_[element_id.id] = transform;
587 if (!property_trees()->transform_tree.OnTransformAnimated(element_id, 586 if (!property_trees()->transform_tree.OnTransformAnimated(element_id,
588 transform)) 587 transform))
589 return; 588 return;
590 589
591 if (LayerImpl* layer = LayerByElementId(element_id)) 590 if (LayerImpl* layer = LayerByElementId(element_id))
592 layer->set_was_ever_ready_since_last_transform_animation(false); 591 layer->set_was_ever_ready_since_last_transform_animation(false);
593 592
594 set_needs_update_draw_properties(); 593 set_needs_update_draw_properties();
595 } 594 }
596 595
597 void LayerTreeImpl::SetOpacityMutated(ElementId element_id, float opacity) { 596 void LayerTreeImpl::SetOpacityMutated(ElementId element_id, float opacity) {
598 DCHECK_EQ( 597 DCHECK_EQ(
599 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); 598 1u, property_trees()->element_id_to_effect_node_index.count(element_id));
600 element_id_to_opacity_animations_[element_id] = opacity; 599 element_id_to_opacity_animations_[element_id.id] = opacity;
601 if (property_trees()->effect_tree.OnOpacityAnimated(element_id, opacity)) 600 if (property_trees()->effect_tree.OnOpacityAnimated(element_id, opacity))
602 set_needs_update_draw_properties(); 601 set_needs_update_draw_properties();
603 } 602 }
604 603
605 void LayerTreeImpl::SetFilterMutated(ElementId element_id, 604 void LayerTreeImpl::SetFilterMutated(ElementId element_id,
606 const FilterOperations& filters) { 605 const FilterOperations& filters) {
607 DCHECK_EQ( 606 DCHECK_EQ(
608 1u, property_trees()->element_id_to_effect_node_index.count(element_id)); 607 1u, property_trees()->element_id_to_effect_node_index.count(element_id));
609 element_id_to_filter_animations_[element_id] = filters; 608 element_id_to_filter_animations_[element_id.id] = filters;
610 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters)) 609 if (property_trees()->effect_tree.OnFilterAnimated(element_id, filters))
611 set_needs_update_draw_properties(); 610 set_needs_update_draw_properties();
612 } 611 }
613 612
614 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const { 613 LayerImpl* LayerTreeImpl::InnerViewportContainerLayer() const {
615 return InnerViewportScrollLayer() 614 return InnerViewportScrollLayer()
616 ? InnerViewportScrollLayer()->scroll_clip_layer() 615 ? InnerViewportScrollLayer()->scroll_clip_layer()
617 : NULL; 616 : NULL;
618 } 617 }
619 618
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 // frame to a newly-committed property tree. 693 // frame to a newly-committed property tree.
695 if (layer_list_.empty()) 694 if (layer_list_.empty())
696 return; 695 return;
697 696
698 // Entries from |element_id_to_*_animations_| should be deleted only after 697 // Entries from |element_id_to_*_animations_| should be deleted only after
699 // they have been synchronized with the main thread, which will not be the 698 // they have been synchronized with the main thread, which will not be the
700 // case if this is an impl-side invalidation. 699 // case if this is an impl-side invalidation.
701 const bool can_delete_animations = !is_impl_side_update; 700 const bool can_delete_animations = !is_impl_side_update;
702 auto element_id_to_opacity = element_id_to_opacity_animations_.begin(); 701 auto element_id_to_opacity = element_id_to_opacity_animations_.begin();
703 while (element_id_to_opacity != element_id_to_opacity_animations_.end()) { 702 while (element_id_to_opacity != element_id_to_opacity_animations_.end()) {
704 const ElementId id = element_id_to_opacity->first; 703 ElementId element_id;
704 element_id.id = element_id_to_opacity->first;
705 if (EffectNode* node = 705 if (EffectNode* node =
706 property_trees_.effect_tree.FindNodeFromElementId(id)) { 706 property_trees_.effect_tree.FindNodeFromElementId(element_id)) {
707 if ((!node->is_currently_animating_opacity || 707 if ((!node->is_currently_animating_opacity ||
708 node->opacity == element_id_to_opacity->second) && 708 node->opacity == element_id_to_opacity->second) &&
709 can_delete_animations) { 709 can_delete_animations) {
710 element_id_to_opacity_animations_.erase(element_id_to_opacity++); 710 element_id_to_opacity_animations_.erase(element_id_to_opacity++);
711 continue; 711 continue;
712 } 712 }
713 node->opacity = element_id_to_opacity->second; 713 node->opacity = element_id_to_opacity->second;
714 property_trees_.effect_tree.set_needs_update(true); 714 property_trees_.effect_tree.set_needs_update(true);
715 } 715 }
716 ++element_id_to_opacity; 716 ++element_id_to_opacity;
717 } 717 }
718 718
719 auto element_id_to_filter = element_id_to_filter_animations_.begin(); 719 auto element_id_to_filter = element_id_to_filter_animations_.begin();
720 while (element_id_to_filter != element_id_to_filter_animations_.end()) { 720 while (element_id_to_filter != element_id_to_filter_animations_.end()) {
721 const ElementId id = element_id_to_filter->first; 721 ElementId element_id;
722 element_id.id = element_id_to_filter->first;
722 if (EffectNode* node = 723 if (EffectNode* node =
723 property_trees_.effect_tree.FindNodeFromElementId(id)) { 724 property_trees_.effect_tree.FindNodeFromElementId(element_id)) {
724 if ((!node->is_currently_animating_filter || 725 if ((!node->is_currently_animating_filter ||
725 node->filters == element_id_to_filter->second) && 726 node->filters == element_id_to_filter->second) &&
726 can_delete_animations) { 727 can_delete_animations) {
727 element_id_to_filter_animations_.erase(element_id_to_filter++); 728 element_id_to_filter_animations_.erase(element_id_to_filter++);
728 continue; 729 continue;
729 } 730 }
730 node->filters = element_id_to_filter->second; 731 node->filters = element_id_to_filter->second;
731 property_trees_.effect_tree.set_needs_update(true); 732 property_trees_.effect_tree.set_needs_update(true);
732 } 733 }
733 ++element_id_to_filter; 734 ++element_id_to_filter;
734 } 735 }
735 736
736 auto element_id_to_transform = element_id_to_transform_animations_.begin(); 737 auto element_id_to_transform = element_id_to_transform_animations_.begin();
737 while (element_id_to_transform != element_id_to_transform_animations_.end()) { 738 while (element_id_to_transform != element_id_to_transform_animations_.end()) {
738 const ElementId id = element_id_to_transform->first; 739 ElementId element_id;
740 element_id.id = element_id_to_transform->first;
739 if (TransformNode* node = 741 if (TransformNode* node =
740 property_trees_.transform_tree.FindNodeFromElementId(id)) { 742 property_trees_.transform_tree.FindNodeFromElementId(element_id)) {
741 if ((!node->is_currently_animating || 743 if ((!node->is_currently_animating ||
742 node->local == element_id_to_transform->second) && 744 node->local == element_id_to_transform->second) &&
743 can_delete_animations) { 745 can_delete_animations) {
744 element_id_to_transform_animations_.erase(element_id_to_transform++); 746 element_id_to_transform_animations_.erase(element_id_to_transform++);
745 continue; 747 continue;
746 } 748 }
747 node->local = element_id_to_transform->second; 749 node->local = element_id_to_transform->second;
748 node->needs_local_transform_update = true; 750 node->needs_local_transform_update = true;
749 property_trees_.transform_tree.set_needs_update(true); 751 property_trees_.transform_tree.set_needs_update(true);
750 } 752 }
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 980
979 void LayerTreeImpl::ClearViewportLayers() { 981 void LayerTreeImpl::ClearViewportLayers() {
980 overscroll_elasticity_layer_id_ = Layer::INVALID_ID; 982 overscroll_elasticity_layer_id_ = Layer::INVALID_ID;
981 page_scale_layer_id_ = Layer::INVALID_ID; 983 page_scale_layer_id_ = Layer::INVALID_ID;
982 inner_viewport_scroll_layer_id_ = Layer::INVALID_ID; 984 inner_viewport_scroll_layer_id_ = Layer::INVALID_ID;
983 outer_viewport_scroll_layer_id_ = Layer::INVALID_ID; 985 outer_viewport_scroll_layer_id_ = Layer::INVALID_ID;
984 } 986 }
985 987
986 // For unit tests, we use the layer's id as its element id. 988 // For unit tests, we use the layer's id as its element id.
987 static void SetElementIdForTesting(LayerImpl* layer) { 989 static void SetElementIdForTesting(LayerImpl* layer) {
988 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); 990 ElementId element_id;
991 element_id.id = layer->id();
992 layer->SetElementId(element_id);
989 } 993 }
990 994
991 void LayerTreeImpl::SetElementIdsForTesting() { 995 void LayerTreeImpl::SetElementIdsForTesting() {
992 LayerListIterator<LayerImpl> it(root_layer_for_testing_); 996 LayerListIterator<LayerImpl> it(root_layer_for_testing_);
993 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) { 997 for (; it != LayerListIterator<LayerImpl>(nullptr); ++it) {
994 if (!it->element_id()) 998 if (!it->element_id())
995 SetElementIdForTesting(*it); 999 SetElementIdForTesting(*it);
996 } 1000 }
997 } 1001 }
998 1002
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 } 1230 }
1227 1231
1228 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) { 1232 void LayerTreeImpl::RegisterLayer(LayerImpl* layer) {
1229 DCHECK(!LayerById(layer->id())); 1233 DCHECK(!LayerById(layer->id()));
1230 layer_id_map_[layer->id()] = layer; 1234 layer_id_map_[layer->id()] = layer;
1231 } 1235 }
1232 1236
1233 void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) { 1237 void LayerTreeImpl::UnregisterLayer(LayerImpl* layer) {
1234 DCHECK(LayerById(layer->id())); 1238 DCHECK(LayerById(layer->id()));
1235 layers_that_should_push_properties_.erase(layer); 1239 layers_that_should_push_properties_.erase(layer);
1236 element_id_to_transform_animations_.erase(layer->element_id()); 1240 element_id_to_transform_animations_.erase(layer->element_id().id);
1237 element_id_to_opacity_animations_.erase(layer->element_id()); 1241 element_id_to_opacity_animations_.erase(layer->element_id().id);
1238 element_id_to_filter_animations_.erase(layer->element_id()); 1242 element_id_to_filter_animations_.erase(layer->element_id().id);
1239 layer_id_map_.erase(layer->id()); 1243 layer_id_map_.erase(layer->id());
1240 } 1244 }
1241 1245
1242 // These manage ownership of the LayerImpl. 1246 // These manage ownership of the LayerImpl.
1243 void LayerTreeImpl::AddLayer(std::unique_ptr<LayerImpl> layer) { 1247 void LayerTreeImpl::AddLayer(std::unique_ptr<LayerImpl> layer) {
1244 DCHECK(std::find(layers_->begin(), layers_->end(), layer) == layers_->end()); 1248 DCHECK(std::find(layers_->begin(), layers_->end(), layer) == layers_->end());
1245 DCHECK(layer); 1249 DCHECK(layer);
1246 layers_->push_back(std::move(layer)); 1250 layers_->push_back(std::move(layer));
1247 set_needs_update_draw_properties(); 1251 set_needs_update_draw_properties();
1248 } 1252 }
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 2092
2089 void LayerTreeImpl::ResetAllChangeTracking() { 2093 void LayerTreeImpl::ResetAllChangeTracking() {
2090 layers_that_should_push_properties_.clear(); 2094 layers_that_should_push_properties_.clear();
2091 // Iterate over all layers, including masks. 2095 // Iterate over all layers, including masks.
2092 for (auto& layer : *layers_) 2096 for (auto& layer : *layers_)
2093 layer->ResetChangeTracking(); 2097 layer->ResetChangeTracking();
2094 property_trees_.ResetAllChangeTracking(); 2098 property_trees_.ResetAllChangeTracking();
2095 } 2099 }
2096 2100
2097 } // namespace cc 2101 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698