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

Unified Diff: cc/layers/layer.cc

Issue 2014533005: cc : Reland Add IsInIdtoIndexMap to property tres (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/layers/layer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/layer.cc
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index 006c8efe964eb4f2dae68e6d38b767d129ccd6fe..a1258a64d5d798a27418a5eb0c4b4697a687dd10 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -119,6 +119,7 @@ void Layer::SetLayerTreeHost(LayerTreeHost* host) {
return;
if (layer_tree_host_) {
+ layer_tree_host_->property_trees()->RemoveIdFromIdToIndexMaps(id());
layer_tree_host_->property_trees()->needs_rebuild = true;
layer_tree_host_->UnregisterLayer(this);
}
@@ -587,18 +588,20 @@ void Layer::SetPosition(const gfx::PointF& position) {
return;
SetSubtreePropertyChanged();
- if (TransformNode* transform_node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (transform_node->owner_id == id()) {
- transform_node->data.update_post_local_transform(position,
- transform_origin());
- transform_node->data.needs_local_transform_update = true;
- transform_node->data.transform_changed = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
- SetNeedsCommitNoRebuild();
- return;
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* transform_node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ transform_node->data.update_post_local_transform(position,
+ transform_origin());
+ transform_node->data.needs_local_transform_update = true;
+ transform_node->data.transform_changed = true;
+ layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
+ SetNeedsCommitNoRebuild();
+ return;
}
SetNeedsCommit();
@@ -634,27 +637,28 @@ void Layer::SetTransform(const gfx::Transform& transform) {
SetSubtreePropertyChanged();
if (layer_tree_host_) {
- if (TransformNode* transform_node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (transform_node->owner_id == id()) {
- // We need to trigger a rebuild if we could have affected 2d axis
- // alignment. We'll check to see if transform and transform_ are axis
- // align with respect to one another.
- bool preserves_2d_axis_alignment =
- Are2dAxisAligned(transform_, transform);
- transform_node->data.local = transform;
- transform_node->data.needs_local_transform_update = true;
- transform_node->data.transform_changed = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(
- true);
- if (preserves_2d_axis_alignment)
- SetNeedsCommitNoRebuild();
- else
- SetNeedsCommit();
- transform_ = transform;
- return;
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ // We need to trigger a rebuild if we could have affected 2d axis
+ // alignment. We'll check to see if transform and transform_ are axis
+ // align with respect to one another.
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* transform_node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ bool preserves_2d_axis_alignment =
+ Are2dAxisAligned(transform_, transform);
+ transform_node->data.local = transform;
+ transform_node->data.needs_local_transform_update = true;
+ transform_node->data.transform_changed = true;
+ layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
+ if (preserves_2d_axis_alignment)
+ SetNeedsCommitNoRebuild();
+ else
+ SetNeedsCommit();
+ transform_ = transform;
+ return;
}
}
@@ -673,19 +677,21 @@ void Layer::SetTransformOrigin(const gfx::Point3F& transform_origin) {
return;
SetSubtreePropertyChanged();
- if (TransformNode* transform_node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (transform_node->owner_id == id()) {
- transform_node->data.update_pre_local_transform(transform_origin);
- transform_node->data.update_post_local_transform(position(),
- transform_origin);
- transform_node->data.needs_local_transform_update = true;
- transform_node->data.transform_changed = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
- SetNeedsCommitNoRebuild();
- return;
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* transform_node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ transform_node->data.update_pre_local_transform(transform_origin);
+ transform_node->data.update_post_local_transform(position(),
+ transform_origin);
+ transform_node->data.needs_local_transform_update = true;
+ transform_node->data.transform_changed = true;
+ layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
+ SetNeedsCommitNoRebuild();
+ return;
}
SetNeedsCommit();
@@ -799,20 +805,21 @@ void Layer::SetScrollOffset(const gfx::ScrollOffset& scroll_offset) {
if (!layer_tree_host_)
return;
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
if (scroll_tree_index() != -1 && scrollable())
- layer_tree_host_->property_trees()->scroll_tree.SetScrollOffset(
- id(), scroll_offset);
-
- if (TransformNode* transform_node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (transform_node->owner_id == id()) {
- transform_node->data.scroll_offset = CurrentScrollOffset();
- transform_node->data.needs_local_transform_update = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
- SetNeedsCommitNoRebuild();
- return;
- }
+ property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
+
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* transform_node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ transform_node->data.scroll_offset = CurrentScrollOffset();
+ transform_node->data.needs_local_transform_update = true;
+ property_trees->transform_tree.set_needs_update(true);
+ SetNeedsCommitNoRebuild();
+ return;
}
SetNeedsCommit();
@@ -831,23 +838,24 @@ void Layer::SetScrollOffsetFromImplSide(
bool needs_rebuild = true;
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
if (scroll_tree_index() != -1 && scrollable())
- layer_tree_host_->property_trees()->scroll_tree.SetScrollOffset(
- id(), scroll_offset);
-
- if (TransformNode* transform_node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (transform_node->owner_id == id()) {
- transform_node->data.scroll_offset = CurrentScrollOffset();
- transform_node->data.needs_local_transform_update = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(true);
- needs_rebuild = false;
- }
+ property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
+
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* transform_node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ transform_node->data.scroll_offset = CurrentScrollOffset();
+ transform_node->data.needs_local_transform_update = true;
+ property_trees->transform_tree.set_needs_update(true);
+ needs_rebuild = false;
}
if (needs_rebuild)
- layer_tree_host_->property_trees()->needs_rebuild = true;
+ property_trees->needs_rebuild = true;
if (!did_scroll_callback_.is_null())
did_scroll_callback_.Run();
@@ -1612,12 +1620,14 @@ void Layer::OnOpacityAnimated(float opacity) {
// recording may be needed.
SetNeedsUpdate();
if (layer_tree_host_) {
- if (EffectNode* node = layer_tree_host_->property_trees()->effect_tree.Node(
- effect_tree_index())) {
- if (node->owner_id == id()) {
- node->data.opacity = opacity;
- layer_tree_host_->property_trees()->effect_tree.set_needs_update(true);
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT,
+ id())) {
+ DCHECK_EQ(effect_tree_index(),
+ property_trees->effect_id_to_index_map[id()]);
+ EffectNode* node = property_trees->effect_tree.Node(effect_tree_index());
+ node->data.opacity = opacity;
+ property_trees->effect_tree.set_needs_update(true);
}
}
}
@@ -1630,16 +1640,17 @@ void Layer::OnTransformAnimated(const gfx::Transform& transform) {
// recording may be needed.
SetNeedsUpdate();
if (layer_tree_host_) {
- if (TransformNode* node =
- layer_tree_host_->property_trees()->transform_tree.Node(
- transform_tree_index())) {
- if (node->owner_id == id()) {
- node->data.local = transform;
- node->data.needs_local_transform_update = true;
- node->data.has_potential_animation = true;
- layer_tree_host_->property_trees()->transform_tree.set_needs_update(
- true);
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id())) {
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ node->data.local = transform;
+ node->data.needs_local_transform_update = true;
+ node->data.has_potential_animation = true;
+ property_trees->transform_tree.set_needs_update(true);
}
}
}
@@ -1653,74 +1664,72 @@ void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) {
void Layer::OnTransformIsCurrentlyAnimatingChanged(
bool is_currently_animating) {
DCHECK(layer_tree_host_);
- TransformTree& transform_tree =
- layer_tree_host_->property_trees()->transform_tree;
- TransformNode* node = transform_tree.Node(transform_tree_index());
- if (!node)
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id()))
return;
-
- if (node->owner_id == id())
- node->data.is_currently_animating = is_currently_animating;
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* node =
+ property_trees->transform_tree.Node(transform_tree_index());
+ node->data.is_currently_animating = is_currently_animating;
}
void Layer::OnTransformIsPotentiallyAnimatingChanged(
bool has_potential_animation) {
if (!layer_tree_host_)
return;
- TransformTree& transform_tree =
- layer_tree_host_->property_trees()->transform_tree;
- TransformNode* node = transform_tree.Node(transform_tree_index());
- if (!node)
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM,
+ id()))
return;
+ DCHECK_EQ(transform_tree_index(),
+ property_trees->transform_id_to_index_map[id()]);
+ TransformNode* node =
+ property_trees->transform_tree.Node(transform_tree_index());
- if (node->owner_id == id()) {
- node->data.has_potential_animation = has_potential_animation;
- if (has_potential_animation) {
- float maximum_target_scale = 0.f;
- node->data.local_maximum_animation_target_scale =
- MaximumTargetScale(&maximum_target_scale) ? maximum_target_scale
- : 0.f;
+ node->data.has_potential_animation = has_potential_animation;
+ if (has_potential_animation) {
+ float maximum_target_scale = 0.f;
+ node->data.local_maximum_animation_target_scale =
+ MaximumTargetScale(&maximum_target_scale) ? maximum_target_scale : 0.f;
- float animation_start_scale = 0.f;
- node->data.local_starting_animation_scale =
- AnimationStartScale(&animation_start_scale) ? animation_start_scale
- : 0.f;
+ float animation_start_scale = 0.f;
+ node->data.local_starting_animation_scale =
+ AnimationStartScale(&animation_start_scale) ? animation_start_scale
+ : 0.f;
- node->data.has_only_translation_animations =
- HasOnlyTranslationTransforms();
+ node->data.has_only_translation_animations = HasOnlyTranslationTransforms();
} else {
node->data.local_maximum_animation_target_scale = 0.f;
node->data.local_starting_animation_scale = 0.f;
node->data.has_only_translation_animations = true;
}
- transform_tree.set_needs_update(true);
- }
+ property_trees->transform_tree.set_needs_update(true);
}
void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) {
DCHECK(layer_tree_host_);
- EffectTree& effect_tree = layer_tree_host_->property_trees()->effect_tree;
- EffectNode* node = effect_tree.Node(effect_tree_index());
- if (!node)
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id()))
return;
-
- if (node->owner_id == id())
- node->data.is_currently_animating_opacity = is_currently_animating;
+ DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]);
+ EffectNode* node = property_trees->effect_tree.Node(effect_tree_index());
+ node->data.is_currently_animating_opacity = is_currently_animating;
}
void Layer::OnOpacityIsPotentiallyAnimatingChanged(
bool has_potential_animation) {
DCHECK(layer_tree_host_);
- EffectTree& effect_tree = layer_tree_host_->property_trees()->effect_tree;
- EffectNode* node = effect_tree.Node(effect_tree_index());
- if (!node)
- return;
- if (node->owner_id == id()) {
- node->data.has_potential_opacity_animation =
- has_potential_animation || OpacityCanAnimateOnImplThread();
- effect_tree.set_needs_update(true);
- }
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
+ if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id()))
+ return;
+ DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]);
+ EffectNode* node = property_trees->effect_tree.Node(effect_tree_index());
+ node->data.has_potential_opacity_animation =
+ has_potential_animation || OpacityCanAnimateOnImplThread();
+ property_trees->effect_tree.set_needs_update(true);
}
bool Layer::HasActiveAnimationForTesting() const {
« no previous file with comments | « no previous file | cc/layers/layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698