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

Side by Side Diff: cc/animation/element_animations.cc

Issue 2357533002: CC Animation: Use std::bitset to update animation state. (Closed)
Patch Set: Clean it up. Created 4 years, 3 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
« no previous file with comments | « cc/animation/element_animations.h ('k') | cc/animation/property_animation_state.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/animation/element_animations.h" 5 #include "cc/animation/element_animations.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 14 matching lines...) Expand all
25 } 25 }
26 26
27 ElementAnimations::ElementAnimations() 27 ElementAnimations::ElementAnimations()
28 : animation_host_(), 28 : animation_host_(),
29 element_id_(), 29 element_id_(),
30 is_active_(false), 30 is_active_(false),
31 has_element_in_active_list_(false), 31 has_element_in_active_list_(false),
32 has_element_in_pending_list_(false), 32 has_element_in_pending_list_(false),
33 scroll_offset_animation_was_interrupted_(false), 33 scroll_offset_animation_was_interrupted_(false),
34 needs_push_properties_(false) { 34 needs_push_properties_(false) {
35 ClearNeedsUpdateImplClientState();
36 } 35 }
37 36
38 ElementAnimations::~ElementAnimations() {} 37 ElementAnimations::~ElementAnimations() {}
39 38
40 void ElementAnimations::SetAnimationHost(AnimationHost* host) { 39 void ElementAnimations::SetAnimationHost(AnimationHost* host) {
41 animation_host_ = host; 40 animation_host_ = host;
42 } 41 }
43 42
44 void ElementAnimations::SetElementId(ElementId element_id) { 43 void ElementAnimations::SetElementId(ElementId element_id) {
45 element_id_ = element_id; 44 element_id_ = element_id;
46 } 45 }
47 46
48 void ElementAnimations::InitAffectedElementTypes() { 47 void ElementAnimations::InitAffectedElementTypes() {
49 DCHECK(element_id_); 48 DCHECK(element_id_);
50 DCHECK(animation_host_); 49 DCHECK(animation_host_);
51 50
52 UpdateActivation(ActivationType::FORCE); 51 UpdateActivation(ActivationType::FORCE);
53 52
54 DCHECK(animation_host_->mutator_host_client()); 53 DCHECK(animation_host_->mutator_host_client());
55 if (animation_host_->mutator_host_client()->IsElementInList( 54 if (animation_host_->mutator_host_client()->IsElementInList(
56 element_id_, ElementListType::ACTIVE)) { 55 element_id_, ElementListType::ACTIVE)) {
57 set_has_element_in_active_list(true); 56 set_has_element_in_active_list(true);
58 } 57 }
59 if (animation_host_->mutator_host_client()->IsElementInList( 58 if (animation_host_->mutator_host_client()->IsElementInList(
60 element_id_, ElementListType::PENDING)) { 59 element_id_, ElementListType::PENDING)) {
61 set_has_element_in_pending_list(true); 60 set_has_element_in_pending_list(true);
62 } 61 }
63 } 62 }
64 63
64 TargetProperties ElementAnimations::GetPropertiesMaskForAnimationState() {
65 TargetProperties properties;
66 properties[TargetProperty::TRANSFORM] = true;
67 properties[TargetProperty::OPACITY] = true;
68 properties[TargetProperty::FILTER] = true;
69 return properties;
70 }
71
65 void ElementAnimations::ClearAffectedElementTypes() { 72 void ElementAnimations::ClearAffectedElementTypes() {
66 DCHECK(animation_host_); 73 DCHECK(animation_host_);
67 74
75 TargetProperties disable_properties = GetPropertiesMaskForAnimationState();
76 PropertyAnimationState disabled_state_mask, disabled_state;
77 disabled_state_mask.currently_running = disable_properties;
78 disabled_state_mask.potentially_animating = disable_properties;
79
68 if (has_element_in_active_list()) { 80 if (has_element_in_active_list()) {
69 IsAnimatingChanged(ElementListType::ACTIVE, TargetProperty::TRANSFORM, 81 animation_host()->mutator_host_client()->ElementIsAnimatingChanged(
70 AnimationChangeType::BOTH, false); 82 element_id(), ElementListType::ACTIVE, disabled_state_mask,
71 IsAnimatingChanged(ElementListType::ACTIVE, TargetProperty::OPACITY, 83 disabled_state);
72 AnimationChangeType::BOTH, false);
73 } 84 }
74 set_has_element_in_active_list(false); 85 set_has_element_in_active_list(false);
75 86
76 if (has_element_in_pending_list()) { 87 if (has_element_in_pending_list()) {
77 IsAnimatingChanged(ElementListType::PENDING, TargetProperty::TRANSFORM, 88 animation_host()->mutator_host_client()->ElementIsAnimatingChanged(
78 AnimationChangeType::BOTH, false); 89 element_id(), ElementListType::PENDING, disabled_state_mask,
79 IsAnimatingChanged(ElementListType::PENDING, TargetProperty::OPACITY, 90 disabled_state);
80 AnimationChangeType::BOTH, false);
81 } 91 }
82 set_has_element_in_pending_list(false); 92 set_has_element_in_pending_list(false);
83 93
84 animation_host_->DidDeactivateElementAnimations(this); 94 animation_host_->DidDeactivateElementAnimations(this);
85 UpdateActivation(ActivationType::FORCE); 95 UpdateActivation(ActivationType::FORCE);
86 } 96 }
87 97
88 void ElementAnimations::ElementRegistered(ElementId element_id, 98 void ElementAnimations::ElementRegistered(ElementId element_id,
89 ElementListType list_type) { 99 ElementListType list_type) {
90 DCHECK_EQ(element_id_, element_id); 100 DCHECK_EQ(element_id_, element_id);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (!needs_push_properties_) 143 if (!needs_push_properties_)
134 return; 144 return;
135 needs_push_properties_ = false; 145 needs_push_properties_ = false;
136 146
137 element_animations_impl->scroll_offset_animation_was_interrupted_ = 147 element_animations_impl->scroll_offset_animation_was_interrupted_ =
138 scroll_offset_animation_was_interrupted_; 148 scroll_offset_animation_was_interrupted_;
139 scroll_offset_animation_was_interrupted_ = false; 149 scroll_offset_animation_was_interrupted_ = false;
140 150
141 // Update impl client state. 151 // Update impl client state.
142 element_animations_impl->UpdateClientAnimationState( 152 element_animations_impl->UpdateClientAnimationState(
143 needs_update_impl_client_state_transform_, 153 needs_update_impl_client_state_properties_);
144 needs_update_impl_client_state_opacity_, 154 needs_update_impl_client_state_properties_.reset();
145 needs_update_impl_client_state_filter_);
146 ClearNeedsUpdateImplClientState();
147 155
148 element_animations_impl->UpdateActivation(ActivationType::NORMAL); 156 element_animations_impl->UpdateActivation(ActivationType::NORMAL);
149 UpdateActivation(ActivationType::NORMAL); 157 UpdateActivation(ActivationType::NORMAL);
150 } 158 }
151 159
152 void ElementAnimations::UpdateClientAnimationState( 160 void ElementAnimations::UpdateClientAnimationState(
153 TargetProperty::Type target_property) { 161 TargetProperty::Type target_property) {
154 switch (target_property) { 162 TargetProperties properties;
155 case TargetProperty::TRANSFORM: 163 properties[target_property] = true;
156 case TargetProperty::OPACITY: 164 UpdateClientAnimationState(properties);
157 case TargetProperty::FILTER:
158 UpdateClientAnimationStateInternal(target_property);
159 break;
160 default:
161 // Do not update for other properties.
162 break;
163 }
164 } 165 }
165 166
166 void ElementAnimations::UpdateClientAnimationState(bool transform, 167 void ElementAnimations::UpdateClientAnimationState(
167 bool opacity, 168 TargetProperties target_properties) {
168 bool filter) { 169 TargetProperties allowed_properties = GetPropertiesMaskForAnimationState();
169 if (transform) 170 UpdateClientAnimationStateInternal(target_properties & allowed_properties);
170 UpdateClientAnimationStateInternal(TargetProperty::TRANSFORM);
171 if (opacity)
172 UpdateClientAnimationStateInternal(TargetProperty::OPACITY);
173 if (filter)
174 UpdateClientAnimationStateInternal(TargetProperty::FILTER);
175 } 171 }
176 172
177 void ElementAnimations::AddAnimation(std::unique_ptr<Animation> animation) { 173 void ElementAnimations::AddAnimation(std::unique_ptr<Animation> animation) {
178 // TODO(loyso): Erase this. Rewrite element_animations_unittest to use 174 // TODO(loyso): Erase this. Rewrite element_animations_unittest to use
179 // AnimationPlayer::AddAnimation. 175 // AnimationPlayer::AddAnimation.
180 176
181 // Add animation to the first player. 177 // Add animation to the first player.
182 DCHECK(players_list_.might_have_observers()); 178 DCHECK(players_list_.might_have_observers());
183 179
184 AnimationPlayer& player = *players_list_.begin(); 180 AnimationPlayer& player = *players_list_.begin();
185 player.AddAnimation(std::move(animation)); 181 player.AddAnimation(std::move(animation));
186 } 182 }
187 183
188 void ElementAnimations::Animate(base::TimeTicks monotonic_time) { 184 void ElementAnimations::Animate(base::TimeTicks monotonic_time) {
189 DCHECK(!monotonic_time.is_null()); 185 DCHECK(!monotonic_time.is_null());
190 if (!has_element_in_active_list() && !has_element_in_pending_list()) 186 if (!has_element_in_active_list() && !has_element_in_pending_list())
191 return; 187 return;
192 188
193 for (auto& player : players_list_) { 189 for (auto& player : players_list_) {
194 if (player.needs_to_start_animations()) 190 if (player.needs_to_start_animations())
195 player.StartAnimations(monotonic_time); 191 player.StartAnimations(monotonic_time);
196 } 192 }
197 193
198 for (auto& player : players_list_) 194 for (auto& player : players_list_)
199 player.TickAnimations(monotonic_time); 195 player.TickAnimations(monotonic_time);
200 196
201 last_tick_time_ = monotonic_time; 197 last_tick_time_ = monotonic_time;
202 198
203 UpdateClientAnimationStateInternal(TargetProperty::OPACITY); 199 TargetProperties update_properties = GetPropertiesMaskForAnimationState();
204 UpdateClientAnimationStateInternal(TargetProperty::TRANSFORM); 200 UpdateClientAnimationStateInternal(update_properties);
205 UpdateClientAnimationStateInternal(TargetProperty::FILTER);
206 } 201 }
207 202
208 void ElementAnimations::UpdateState(bool start_ready_animations, 203 void ElementAnimations::UpdateState(bool start_ready_animations,
209 AnimationEvents* events) { 204 AnimationEvents* events) {
210 if (!has_element_in_active_list()) 205 if (!has_element_in_active_list())
211 return; 206 return;
212 207
213 // Animate hasn't been called, this happens if an element has been added 208 // Animate hasn't been called, this happens if an element has been added
214 // between the Commit and Draw phases. 209 // between the Commit and Draw phases.
215 if (last_tick_time_ == base::TimeTicks()) 210 if (last_tick_time_ == base::TimeTicks())
(...skipping 16 matching lines...) Expand all
232 player.StartAnimations(last_tick_time_); 227 player.StartAnimations(last_tick_time_);
233 player.PromoteStartedAnimations(last_tick_time_, events); 228 player.PromoteStartedAnimations(last_tick_time_, events);
234 } 229 }
235 } 230 }
236 } 231 }
237 232
238 UpdateActivation(ActivationType::NORMAL); 233 UpdateActivation(ActivationType::NORMAL);
239 } 234 }
240 235
241 void ElementAnimations::ActivateAnimations() { 236 void ElementAnimations::ActivateAnimations() {
242 bool changed_transform_animation = false; 237 TargetProperties activated_properties;
243 bool changed_opacity_animation = false;
244 bool changed_filter_animation = false;
245 238
246 for (auto& player : players_list_) { 239 for (auto& player : players_list_) {
247 player.ActivateAnimations(&changed_transform_animation, 240 TargetProperties player_activated_properties = player.ActivateAnimations();
248 &changed_opacity_animation, 241 activated_properties |= player_activated_properties;
249 &changed_filter_animation);
250 } 242 }
251 243
252 scroll_offset_animation_was_interrupted_ = false; 244 scroll_offset_animation_was_interrupted_ = false;
253 UpdateActivation(ActivationType::NORMAL); 245 UpdateActivation(ActivationType::NORMAL);
254 UpdateClientAnimationState(changed_transform_animation, 246 UpdateClientAnimationState(activated_properties);
255 changed_opacity_animation,
256 changed_filter_animation);
257 } 247 }
258 248
259 void ElementAnimations::NotifyAnimationStarted(const AnimationEvent& event) { 249 void ElementAnimations::NotifyAnimationStarted(const AnimationEvent& event) {
260 DCHECK(!event.is_impl_only); 250 DCHECK(!event.is_impl_only);
261 for (auto& player : players_list_) { 251 for (auto& player : players_list_) {
262 if (player.NotifyAnimationStarted(event)) 252 if (player.NotifyAnimationStarted(event))
263 break; 253 break;
264 } 254 }
265 } 255 }
266 256
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 bool success = player.MaximumTargetScale(list_type, &player_max_scale); 387 bool success = player.MaximumTargetScale(list_type, &player_max_scale);
398 if (!success) 388 if (!success)
399 return false; 389 return false;
400 // Union: a maximum. 390 // Union: a maximum.
401 *max_scale = std::max(*max_scale, player_max_scale); 391 *max_scale = std::max(*max_scale, player_max_scale);
402 } 392 }
403 393
404 return true; 394 return true;
405 } 395 }
406 396
407 void ElementAnimations::SetNeedsUpdateImplClientState(bool transform, 397 void ElementAnimations::SetNeedsUpdateImplClientState(
408 bool opacity, 398 TargetProperties target_properties) {
409 bool filter) { 399 needs_update_impl_client_state_properties_ |= target_properties;
410 if (transform)
411 needs_update_impl_client_state_transform_ = true;
412 if (opacity)
413 needs_update_impl_client_state_opacity_ = true;
414 if (filter)
415 needs_update_impl_client_state_filter_ = true;
416 400
417 if (needs_update_impl_client_state_transform_ || 401 if (needs_update_impl_client_state_properties_.any())
418 needs_update_impl_client_state_opacity_ ||
419 needs_update_impl_client_state_filter_)
420 SetNeedsPushProperties(); 402 SetNeedsPushProperties();
421 } 403 }
422 404
423 void ElementAnimations::ClearNeedsUpdateImplClientState() {
424 needs_update_impl_client_state_transform_ = false;
425 needs_update_impl_client_state_opacity_ = false;
426 needs_update_impl_client_state_filter_ = false;
427 }
428
429 void ElementAnimations::UpdateActivation(ActivationType type) { 405 void ElementAnimations::UpdateActivation(ActivationType type) {
430 bool force = type == ActivationType::FORCE; 406 bool force = type == ActivationType::FORCE;
431 if (animation_host_) { 407 if (animation_host_) {
432 bool was_active = is_active_; 408 bool was_active = is_active_;
433 is_active_ = false; 409 is_active_ = false;
434 410
435 for (auto& player : players_list_) { 411 for (auto& player : players_list_) {
436 if (player.HasNonDeletedAnimation()) { 412 if (player.HasNonDeletedAnimation()) {
437 is_active_ = true; 413 is_active_ = true;
438 break; 414 break;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 void ElementAnimations::NotifyClientScrollOffsetAnimated( 463 void ElementAnimations::NotifyClientScrollOffsetAnimated(
488 const gfx::ScrollOffset& scroll_offset, 464 const gfx::ScrollOffset& scroll_offset,
489 bool notify_active_elements, 465 bool notify_active_elements,
490 bool notify_pending_elements) { 466 bool notify_pending_elements) {
491 if (notify_active_elements && has_element_in_active_list()) 467 if (notify_active_elements && has_element_in_active_list())
492 OnScrollOffsetAnimated(ElementListType::ACTIVE, scroll_offset); 468 OnScrollOffsetAnimated(ElementListType::ACTIVE, scroll_offset);
493 if (notify_pending_elements && has_element_in_pending_list()) 469 if (notify_pending_elements && has_element_in_pending_list())
494 OnScrollOffsetAnimated(ElementListType::PENDING, scroll_offset); 470 OnScrollOffsetAnimated(ElementListType::PENDING, scroll_offset);
495 } 471 }
496 472
497 void ElementAnimations::NotifyClientAnimationChanged( 473 void ElementAnimations::UpdateClientAnimationStateInternal(
498 TargetProperty::Type property, 474 TargetProperties properties) {
loyso (OOO) 2016/09/22 00:47:29 Just realized last night that |properties| paramet
499 ElementListType list_type, 475 if (!properties.any())
500 bool notify_elements_about_potential_animation, 476 return;
501 bool notify_elements_about_running_animation) { 477 if (!element_id())
502 PropertyAnimationState* animation_state = nullptr; 478 return;
503 switch (property) { 479 DCHECK(animation_host());
504 case TargetProperty::OPACITY: 480 if (!animation_host()->mutator_host_client())
505 animation_state = &opacity_animation_state_; 481 return;
506 break; 482
507 case TargetProperty::TRANSFORM: 483 PropertyAnimationState prev_pending = pending_state_;
508 animation_state = &transform_animation_state_; 484 PropertyAnimationState prev_active = active_state_;
509 break; 485
510 case TargetProperty::FILTER: 486 pending_state_.Clear();
511 animation_state = &filter_animation_state_; 487 active_state_.Clear();
512 break; 488
513 default: 489 for (auto& player : players_list_) {
514 NOTREACHED(); 490 PropertyAnimationState player_pending_state, player_active_state;
515 break; 491 player.GetPropertyAnimationState(&player_pending_state,
492 &player_active_state);
493 pending_state_ |= player_pending_state;
494 active_state_ |= player_active_state;
516 } 495 }
517 496
518 bool notify_elements_about_potential_and_running_animation = 497 TargetProperties allowed_properties = GetPropertiesMaskForAnimationState();
519 notify_elements_about_potential_animation && 498 PropertyAnimationState allowed_state;
520 notify_elements_about_running_animation; 499 allowed_state.currently_running = allowed_properties;
521 bool active = list_type == ElementListType::ACTIVE; 500 allowed_state.potentially_animating = allowed_properties;
522 if (notify_elements_about_potential_and_running_animation) { 501
523 bool potentially_animating = 502 pending_state_ &= allowed_state;
524 active ? animation_state->potentially_animating_for_active_elements 503 active_state_ &= allowed_state;
525 : animation_state->potentially_animating_for_pending_elements; 504
526 bool currently_animating = 505 DCHECK(pending_state_.IsValid());
527 active ? animation_state->currently_running_for_active_elements 506 DCHECK(active_state_.IsValid());
528 : animation_state->currently_running_for_pending_elements; 507
529 DCHECK_EQ(potentially_animating, currently_animating); 508 if (has_element_in_active_list() && prev_active != active_state_) {
530 IsAnimatingChanged(list_type, property, AnimationChangeType::BOTH, 509 PropertyAnimationState diff_active = prev_active ^ active_state_;
531 potentially_animating); 510 animation_host()->mutator_host_client()->ElementIsAnimatingChanged(
532 } else if (notify_elements_about_potential_animation) { 511 element_id(), ElementListType::ACTIVE, diff_active, active_state_);
533 bool potentially_animating = 512 }
534 active ? animation_state->potentially_animating_for_active_elements 513 if (has_element_in_pending_list() && prev_pending != pending_state_) {
535 : animation_state->potentially_animating_for_pending_elements; 514 PropertyAnimationState diff_pending = prev_pending ^ pending_state_;
536 IsAnimatingChanged(list_type, property, AnimationChangeType::POTENTIAL, 515 animation_host()->mutator_host_client()->ElementIsAnimatingChanged(
537 potentially_animating); 516 element_id(), ElementListType::PENDING, diff_pending, pending_state_);
538 } else if (notify_elements_about_running_animation) {
539 bool currently_animating =
540 active ? animation_state->currently_running_for_active_elements
541 : animation_state->currently_running_for_pending_elements;
542 IsAnimatingChanged(list_type, property, AnimationChangeType::RUNNING,
543 currently_animating);
544 } 517 }
545 } 518 }
546 519
547 void ElementAnimations::UpdateClientAnimationStateInternal(
548 TargetProperty::Type property) {
549 PropertyAnimationState* animation_state = nullptr;
550 switch (property) {
551 case TargetProperty::OPACITY:
552 animation_state = &opacity_animation_state_;
553 break;
554 case TargetProperty::TRANSFORM:
555 animation_state = &transform_animation_state_;
556 break;
557 case TargetProperty::FILTER:
558 animation_state = &filter_animation_state_;
559 break;
560 default:
561 NOTREACHED();
562 break;
563 }
564
565 PropertyAnimationState previous_state = *animation_state;
566 animation_state->Clear();
567 DCHECK(previous_state.IsValid());
568
569 for (auto& player : players_list_) {
570 PropertyAnimationState player_state;
571 player.GetPropertyAnimationStateFor(property, &player_state);
572 *animation_state |= player_state;
573 }
574
575 if (*animation_state == previous_state)
576 return;
577
578 PropertyAnimationState diff_state = previous_state ^ *animation_state;
579
580 if (has_element_in_active_list())
581 NotifyClientAnimationChanged(
582 property, ElementListType::ACTIVE,
583 diff_state.potentially_animating_for_active_elements,
584 diff_state.currently_running_for_active_elements);
585 if (has_element_in_pending_list())
586 NotifyClientAnimationChanged(
587 property, ElementListType::PENDING,
588 diff_state.potentially_animating_for_pending_elements,
589 diff_state.currently_running_for_pending_elements);
590 }
591
592 bool ElementAnimations::HasActiveAnimation() const { 520 bool ElementAnimations::HasActiveAnimation() const {
593 for (auto& player : players_list_) { 521 for (auto& player : players_list_) {
594 if (player.HasActiveAnimation()) 522 if (player.HasActiveAnimation())
595 return true; 523 return true;
596 } 524 }
597 525
598 return false; 526 return false;
599 } 527 }
600 528
601 bool ElementAnimations::HasAnyAnimation() const { 529 bool ElementAnimations::HasAnyAnimation() const {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 void ElementAnimations::OnScrollOffsetAnimated( 639 void ElementAnimations::OnScrollOffsetAnimated(
712 ElementListType list_type, 640 ElementListType list_type,
713 const gfx::ScrollOffset& scroll_offset) { 641 const gfx::ScrollOffset& scroll_offset) {
714 DCHECK(element_id()); 642 DCHECK(element_id());
715 DCHECK(animation_host()); 643 DCHECK(animation_host());
716 DCHECK(animation_host()->mutator_host_client()); 644 DCHECK(animation_host()->mutator_host_client());
717 animation_host()->mutator_host_client()->SetElementScrollOffsetMutated( 645 animation_host()->mutator_host_client()->SetElementScrollOffsetMutated(
718 element_id(), list_type, scroll_offset); 646 element_id(), list_type, scroll_offset);
719 } 647 }
720 648
721 void ElementAnimations::IsAnimatingChanged(ElementListType list_type,
722 TargetProperty::Type property,
723 AnimationChangeType change_type,
724 bool is_animating) {
725 if (!element_id())
726 return;
727 DCHECK(animation_host());
728 if (animation_host()->mutator_host_client()) {
729 switch (property) {
730 case TargetProperty::OPACITY:
731 animation_host()
732 ->mutator_host_client()
733 ->ElementOpacityIsAnimatingChanged(element_id(), list_type,
734 change_type, is_animating);
735 break;
736 case TargetProperty::TRANSFORM:
737 animation_host()
738 ->mutator_host_client()
739 ->ElementTransformIsAnimatingChanged(element_id(), list_type,
740 change_type, is_animating);
741 break;
742 case TargetProperty::FILTER:
743 animation_host()
744 ->mutator_host_client()
745 ->ElementFilterIsAnimatingChanged(element_id(), list_type,
746 change_type, is_animating);
747 break;
748 default:
749 NOTREACHED();
750 break;
751 }
752 }
753 }
754
755 gfx::ScrollOffset ElementAnimations::ScrollOffsetForAnimation() const { 649 gfx::ScrollOffset ElementAnimations::ScrollOffsetForAnimation() const {
756 if (animation_host()) { 650 if (animation_host()) {
757 DCHECK(animation_host()->mutator_host_client()); 651 DCHECK(animation_host()->mutator_host_client());
758 return animation_host()->mutator_host_client()->GetScrollOffsetForAnimation( 652 return animation_host()->mutator_host_client()->GetScrollOffsetForAnimation(
759 element_id()); 653 element_id());
760 } 654 }
761 655
762 return gfx::ScrollOffset(); 656 return gfx::ScrollOffset();
763 } 657 }
764 658
765 } // namespace cc 659 } // namespace cc
OLDNEW
« no previous file with comments | « cc/animation/element_animations.h ('k') | cc/animation/property_animation_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698