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

Unified Diff: cc/animation/animation_host.cc

Issue 1950243005: Communicate MT changes to impl-only scroll offset animations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: apply initial feedback comments 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
Index: cc/animation/animation_host.cc
diff --git a/cc/animation/animation_host.cc b/cc/animation/animation_host.cc
index 66ebaa482f038abfe391f0a740c934022f1587b3..033825ecaf391a8722ffdd1831dbd012b62d9bdd 100644
--- a/cc/animation/animation_host.cc
+++ b/cc/animation/animation_host.cc
@@ -17,6 +17,8 @@
#include "cc/animation/animation_timeline.h"
#include "cc/animation/element_animations.h"
#include "cc/animation/scroll_offset_animation_curve.h"
+#include "cc/animation/scroll_offset_animations.h"
+#include "cc/animation/scroll_offset_animations_impl.h"
#include "cc/animation/timing_function.h"
#include "ui/gfx/geometry/box_f.h"
#include "ui/gfx/geometry/scroll_offset.h"
@@ -36,6 +38,9 @@ AnimationHost::AnimationHost(ThreadInstance thread_instance)
if (thread_instance_ == ThreadInstance::IMPL)
scroll_offset_animations_impl_ =
base::WrapUnique(new ScrollOffsetAnimationsImpl(this));
+ else
+ scroll_offset_animations_ =
+ base::WrapUnique(new ScrollOffsetAnimations(this));
}
AnimationHost::~AnimationHost() {
@@ -148,10 +153,11 @@ void AnimationHost::SetNeedsRebuildPropertyTrees() {
mutator_host_client_->SetMutatorsNeedRebuildPropertyTrees();
}
-void AnimationHost::PushPropertiesTo(AnimationHost* host_impl) {
+void AnimationHost::PushPropertiesTo(AnimationHost* host_impl,
+ base::TimeTicks frame_monotonic_time) {
PushTimelinesToImplThread(host_impl);
RemoveTimelinesFromImplThread(host_impl);
- PushPropertiesToImplThread(host_impl);
+ PushPropertiesToImplThread(host_impl, frame_monotonic_time);
animation_waiting_for_deletion_ = false;
}
@@ -184,8 +190,10 @@ void AnimationHost::RemoveTimelinesFromImplThread(
}
}
-void AnimationHost::PushPropertiesToImplThread(AnimationHost* host_impl) {
- // Firstly, sync all players with impl thread to create ElementAnimations.
+void AnimationHost::PushPropertiesToImplThread(
+ AnimationHost* host_impl,
+ base::TimeTicks frame_monotonic_time) {
+ // Sync all players with impl thread to create ElementAnimations.
for (auto& kv : id_to_timeline_map_) {
AnimationTimeline* timeline = kv.second.get();
AnimationTimeline* timeline_impl =
@@ -194,7 +202,13 @@ void AnimationHost::PushPropertiesToImplThread(AnimationHost* host_impl) {
timeline->PushPropertiesTo(timeline_impl);
}
- // Secondly, sync properties for created ElementAnimations.
+ // Update the impl-only scroll offset animations. This needs to happen
+ // beforethe sync below because it may add new animations that will need to
skobes 2016/05/07 00:25:16 "before the"
ymalik 2016/05/10 19:40:59 Done.
+ // be pushed to the impl thread.
+ scroll_offset_animations_->PushPropertiesTo(
+ host_impl->scroll_offset_animations_impl_.get(), frame_monotonic_time);
+
+ // Sync properties for created ElementAnimations.
for (auto& kv : element_to_animations_map_) {
const auto& element_animations = kv.second;
auto element_animations_impl =
@@ -533,6 +547,11 @@ bool AnimationHost::ImplOnlyScrollAnimationUpdateTarget(
element_id, scroll_delta, max_scroll_offset, frame_monotonic_time);
}
+ScrollOffsetAnimations& AnimationHost::scroll_offset_animations() const {
+ DCHECK(scroll_offset_animations_);
+ return *scroll_offset_animations_.get();
+}
+
void AnimationHost::ScrollAnimationAbort(bool needs_completion) {
DCHECK(scroll_offset_animations_impl_);
return scroll_offset_animations_impl_->ScrollAnimationAbort(needs_completion);

Powered by Google App Engine
This is Rietveld 408576698