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

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

Issue 2758343002: cc: Use Element Id to Record Animation Changes (Closed)
Patch Set: Created 3 years, 9 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_host_impl.h" 5 #include "cc/trees/layer_tree_host_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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 #include "cc/resources/resource_pool.h" 66 #include "cc/resources/resource_pool.h"
67 #include "cc/resources/ui_resource_bitmap.h" 67 #include "cc/resources/ui_resource_bitmap.h"
68 #include "cc/scheduler/delay_based_time_source.h" 68 #include "cc/scheduler/delay_based_time_source.h"
69 #include "cc/tiles/eviction_tile_priority_queue.h" 69 #include "cc/tiles/eviction_tile_priority_queue.h"
70 #include "cc/tiles/gpu_image_decode_cache.h" 70 #include "cc/tiles/gpu_image_decode_cache.h"
71 #include "cc/tiles/picture_layer_tiling.h" 71 #include "cc/tiles/picture_layer_tiling.h"
72 #include "cc/tiles/raster_tile_priority_queue.h" 72 #include "cc/tiles/raster_tile_priority_queue.h"
73 #include "cc/tiles/software_image_decode_cache.h" 73 #include "cc/tiles/software_image_decode_cache.h"
74 #include "cc/trees/damage_tracker.h" 74 #include "cc/trees/damage_tracker.h"
75 #include "cc/trees/draw_property_utils.h" 75 #include "cc/trees/draw_property_utils.h"
76 #include "cc/trees/effect_node.h"
76 #include "cc/trees/latency_info_swap_promise_monitor.h" 77 #include "cc/trees/latency_info_swap_promise_monitor.h"
77 #include "cc/trees/layer_tree_host_common.h" 78 #include "cc/trees/layer_tree_host_common.h"
78 #include "cc/trees/layer_tree_impl.h" 79 #include "cc/trees/layer_tree_impl.h"
79 #include "cc/trees/mutator_host.h" 80 #include "cc/trees/mutator_host.h"
80 #include "cc/trees/scroll_node.h" 81 #include "cc/trees/scroll_node.h"
81 #include "cc/trees/single_thread_proxy.h" 82 #include "cc/trees/single_thread_proxy.h"
83 #include "cc/trees/transform_node.h"
82 #include "cc/trees/tree_synchronizer.h" 84 #include "cc/trees/tree_synchronizer.h"
83 #include "gpu/GLES2/gl2extchromium.h" 85 #include "gpu/GLES2/gl2extchromium.h"
84 #include "gpu/command_buffer/client/context_support.h" 86 #include "gpu/command_buffer/client/context_support.h"
85 #include "gpu/command_buffer/client/gles2_interface.h" 87 #include "gpu/command_buffer/client/gles2_interface.h"
86 #include "ui/gfx/geometry/point_conversions.h" 88 #include "ui/gfx/geometry/point_conversions.h"
87 #include "ui/gfx/geometry/rect_conversions.h" 89 #include "ui/gfx/geometry/rect_conversions.h"
88 #include "ui/gfx/geometry/scroll_offset.h" 90 #include "ui/gfx/geometry/scroll_offset.h"
89 #include "ui/gfx/geometry/size_conversions.h" 91 #include "ui/gfx/geometry/size_conversions.h"
90 #include "ui/gfx/geometry/vector2d_conversions.h" 92 #include "ui/gfx/geometry/vector2d_conversions.h"
91 93
(...skipping 4021 matching lines...) Expand 10 before | Expand all | Expand 10 after
4113 4115
4114 void LayerTreeHostImpl::ElementIsAnimatingChanged( 4116 void LayerTreeHostImpl::ElementIsAnimatingChanged(
4115 ElementId element_id, 4117 ElementId element_id,
4116 ElementListType list_type, 4118 ElementListType list_type,
4117 const PropertyAnimationState& mask, 4119 const PropertyAnimationState& mask,
4118 const PropertyAnimationState& state) { 4120 const PropertyAnimationState& state) {
4119 LayerTreeImpl* tree = 4121 LayerTreeImpl* tree =
4120 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); 4122 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree();
4121 if (!tree) 4123 if (!tree)
4122 return; 4124 return;
4123 LayerImpl* layer = tree->LayerByElementId(element_id); 4125 PropertyTrees* property_trees = tree->property_trees();
4124 if (layer) 4126
4125 layer->OnIsAnimatingChanged(mask, state); 4127 for (int property = TargetProperty::FIRST_TARGET_PROPERTY;
wkorman 2017/03/20 21:59:57 Much of this is near identical to the same in laye
weiliangc 2017/03/21 15:18:52 We could create template function in utils class t
wkorman 2017/03/21 19:44:23 Either ok IMO, could add a comment here and in oth
ajuma 2017/03/21 19:53:28 Perhaps draw_property_utils or property_tree might
4128 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) {
4129 if (!mask.currently_running[property] &&
4130 !mask.potentially_animating[property])
4131 continue;
4132
4133 switch (property) {
4134 case TargetProperty::TRANSFORM:
4135 if (TransformNode* transform_node =
4136 property_trees->transform_tree.FindNodeFromElementId(
4137 element_id)) {
4138 if (mask.currently_running[property])
4139 transform_node->is_currently_animating =
4140 state.currently_running[property];
4141 if (mask.potentially_animating[property]) {
4142 transform_node->has_potential_animation =
4143 state.potentially_animating[property];
4144 transform_node->has_only_translation_animations =
4145 mutator_host()->HasOnlyTranslationTransforms(element_id,
4146 list_type);
4147 property_trees->transform_tree.set_needs_update(true);
4148 tree->set_needs_update_draw_properties();
4149 // TODO(crbug.com/702777):
4150 // was_ever_ready_since_last_transform_animation should not live on
4151 // layers.
4152 if (LayerImpl* layer = tree->LayerByElementId(element_id)) {
4153 layer->set_was_ever_ready_since_last_transform_animation(false);
4154 }
4155 }
4156 }
4157 break;
4158 case TargetProperty::OPACITY:
4159 if (EffectNode* effect_node =
4160 property_trees->effect_tree.FindNodeFromElementId(element_id)) {
4161 if (mask.currently_running[property])
4162 effect_node->is_currently_animating_opacity =
4163 state.currently_running[property];
4164 if (mask.potentially_animating[property]) {
4165 effect_node->has_potential_opacity_animation =
4166 state.potentially_animating[property];
4167 property_trees->effect_tree.set_needs_update(true);
4168 }
4169 }
4170 break;
4171 case TargetProperty::FILTER:
4172 if (EffectNode* effect_node =
4173 property_trees->effect_tree.FindNodeFromElementId(element_id)) {
4174 if (mask.currently_running[property])
4175 effect_node->is_currently_animating_filter =
4176 state.currently_running[property];
4177 if (mask.potentially_animating[property])
4178 effect_node->has_potential_filter_animation =
4179 state.potentially_animating[property];
wkorman 2017/03/20 21:59:57 Same comment as in layer_tree_host.cc, no set_need
weiliangc 2017/03/21 15:18:52 It is because for opacity animation and transform
wkorman 2017/03/21 19:44:23 Yes, I think worth adding a comment since I wonder
4180 }
4181 break;
4182 default:
4183 break;
4184 }
4185 }
4126 } 4186 }
4127 4187
4128 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { 4188 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() {
4129 // TODO(majidvp): We should pass in the original starting scroll position here 4189 // TODO(majidvp): We should pass in the original starting scroll position here
4130 ScrollStateData scroll_state_data; 4190 ScrollStateData scroll_state_data;
4131 ScrollState scroll_state(scroll_state_data); 4191 ScrollState scroll_state(scroll_state_data);
4132 ScrollEnd(&scroll_state); 4192 ScrollEnd(&scroll_state);
4133 } 4193 }
4134 4194
4135 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( 4195 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4182 worker_context_visibility_ = 4242 worker_context_visibility_ =
4183 worker_context->CacheController()->ClientBecameVisible(); 4243 worker_context->CacheController()->ClientBecameVisible();
4184 } else { 4244 } else {
4185 worker_context->CacheController()->ClientBecameNotVisible( 4245 worker_context->CacheController()->ClientBecameNotVisible(
4186 std::move(worker_context_visibility_)); 4246 std::move(worker_context_visibility_));
4187 } 4247 }
4188 } 4248 }
4189 } 4249 }
4190 4250
4191 } // namespace cc 4251 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698