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

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

Issue 645853008: Standardize usage of virtual/override/final in cc/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formatted Created 6 years, 2 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/trees/layer_tree_host_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include "cc/animation/animation_curve.h" 7 #include "cc/animation/animation_curve.h"
8 #include "cc/animation/layer_animation_controller.h" 8 #include "cc/animation/layer_animation_controller.h"
9 #include "cc/animation/scroll_offset_animation_curve.h" 9 #include "cc/animation/scroll_offset_animation_curve.h"
10 #include "cc/animation/timing_function.h" 10 #include "cc/animation/timing_function.h"
11 #include "cc/layers/layer.h" 11 #include "cc/layers/layer.h"
12 #include "cc/layers/layer_impl.h" 12 #include "cc/layers/layer_impl.h"
13 #include "cc/test/animation_test_common.h" 13 #include "cc/test/animation_test_common.h"
14 #include "cc/test/fake_content_layer.h" 14 #include "cc/test/fake_content_layer.h"
15 #include "cc/test/fake_content_layer_client.h" 15 #include "cc/test/fake_content_layer_client.h"
16 #include "cc/test/layer_tree_test.h" 16 #include "cc/test/layer_tree_test.h"
17 #include "cc/trees/layer_tree_impl.h" 17 #include "cc/trees/layer_tree_impl.h"
18 18
19 namespace cc { 19 namespace cc {
20 namespace { 20 namespace {
21 21
22 class LayerTreeHostAnimationTest : public LayerTreeTest { 22 class LayerTreeHostAnimationTest : public LayerTreeTest {
23 public: 23 public:
24 virtual void SetupTree() override { 24 void SetupTree() override {
25 LayerTreeTest::SetupTree(); 25 LayerTreeTest::SetupTree();
26 layer_tree_host()->root_layer()->set_layer_animation_delegate(this); 26 layer_tree_host()->root_layer()->set_layer_animation_delegate(this);
27 } 27 }
28 }; 28 };
29 29
30 // Makes sure that SetNeedsAnimate does not cause the CommitRequested() state to 30 // Makes sure that SetNeedsAnimate does not cause the CommitRequested() state to
31 // be set. 31 // be set.
32 class LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested 32 class LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested
33 : public LayerTreeHostAnimationTest { 33 : public LayerTreeHostAnimationTest {
34 public: 34 public:
35 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested() 35 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested()
36 : num_commits_(0) {} 36 : num_commits_(0) {}
37 37
38 virtual void BeginTest() override { 38 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
39 PostSetNeedsCommitToMainThread();
40 }
41 39
42 virtual void BeginMainFrame(const BeginFrameArgs& args) override { 40 void BeginMainFrame(const BeginFrameArgs& args) override {
43 // We skip the first commit because its the commit that populates the 41 // We skip the first commit because its the commit that populates the
44 // impl thread with a tree. After the second commit, the test is done. 42 // impl thread with a tree. After the second commit, the test is done.
45 if (num_commits_ != 1) 43 if (num_commits_ != 1)
46 return; 44 return;
47 45
48 layer_tree_host()->SetNeedsAnimate(); 46 layer_tree_host()->SetNeedsAnimate();
49 // Right now, CommitRequested is going to be true, because during 47 // Right now, CommitRequested is going to be true, because during
50 // BeginFrame, we force CommitRequested to true to prevent requests from 48 // BeginFrame, we force CommitRequested to true to prevent requests from
51 // hitting the impl thread. But, when the next DidCommit happens, we should 49 // hitting the impl thread. But, when the next DidCommit happens, we should
52 // verify that CommitRequested has gone back to false. 50 // verify that CommitRequested has gone back to false.
53 } 51 }
54 52
55 virtual void DidCommit() override { 53 void DidCommit() override {
56 if (!num_commits_) { 54 if (!num_commits_) {
57 EXPECT_FALSE(layer_tree_host()->CommitRequested()); 55 EXPECT_FALSE(layer_tree_host()->CommitRequested());
58 layer_tree_host()->SetNeedsAnimate(); 56 layer_tree_host()->SetNeedsAnimate();
59 EXPECT_FALSE(layer_tree_host()->CommitRequested()); 57 EXPECT_FALSE(layer_tree_host()->CommitRequested());
60 } 58 }
61 59
62 // Verifies that the SetNeedsAnimate we made in ::Animate did not 60 // Verifies that the SetNeedsAnimate we made in ::Animate did not
63 // trigger CommitRequested. 61 // trigger CommitRequested.
64 EXPECT_FALSE(layer_tree_host()->CommitRequested()); 62 EXPECT_FALSE(layer_tree_host()->CommitRequested());
65 EndTest(); 63 EndTest();
66 num_commits_++; 64 num_commits_++;
67 } 65 }
68 66
69 virtual void AfterTest() override {} 67 void AfterTest() override {}
70 68
71 private: 69 private:
72 int num_commits_; 70 int num_commits_;
73 }; 71 };
74 72
75 MULTI_THREAD_TEST_F( 73 MULTI_THREAD_TEST_F(
76 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested); 74 LayerTreeHostAnimationTestSetNeedsAnimateShouldNotSetCommitRequested);
77 75
78 // Trigger a frame with SetNeedsCommit. Then, inside the resulting animate 76 // Trigger a frame with SetNeedsCommit. Then, inside the resulting animate
79 // callback, request another frame using SetNeedsAnimate. End the test when 77 // callback, request another frame using SetNeedsAnimate. End the test when
80 // animate gets called yet-again, indicating that the proxy is correctly 78 // animate gets called yet-again, indicating that the proxy is correctly
81 // handling the case where SetNeedsAnimate() is called inside the BeginFrame 79 // handling the case where SetNeedsAnimate() is called inside the BeginFrame
82 // flow. 80 // flow.
83 class LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback 81 class LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback
84 : public LayerTreeHostAnimationTest { 82 : public LayerTreeHostAnimationTest {
85 public: 83 public:
86 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback() 84 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback()
87 : num_begin_frames_(0) {} 85 : num_begin_frames_(0) {}
88 86
89 virtual void BeginTest() override { 87 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
90 PostSetNeedsCommitToMainThread();
91 }
92 88
93 virtual void BeginMainFrame(const BeginFrameArgs& args) override { 89 void BeginMainFrame(const BeginFrameArgs& args) override {
94 if (!num_begin_frames_) { 90 if (!num_begin_frames_) {
95 layer_tree_host()->SetNeedsAnimate(); 91 layer_tree_host()->SetNeedsAnimate();
96 num_begin_frames_++; 92 num_begin_frames_++;
97 return; 93 return;
98 } 94 }
99 EndTest(); 95 EndTest();
100 } 96 }
101 97
102 virtual void AfterTest() override {} 98 void AfterTest() override {}
103 99
104 private: 100 private:
105 int num_begin_frames_; 101 int num_begin_frames_;
106 }; 102 };
107 103
108 MULTI_THREAD_TEST_F( 104 MULTI_THREAD_TEST_F(
109 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback); 105 LayerTreeHostAnimationTestSetNeedsAnimateInsideAnimationCallback);
110 106
111 // Add a layer animation and confirm that 107 // Add a layer animation and confirm that
112 // LayerTreeHostImpl::updateAnimationState does get called and continues to 108 // LayerTreeHostImpl::updateAnimationState does get called and continues to
113 // get called. 109 // get called.
114 class LayerTreeHostAnimationTestAddAnimation 110 class LayerTreeHostAnimationTestAddAnimation
115 : public LayerTreeHostAnimationTest { 111 : public LayerTreeHostAnimationTest {
116 public: 112 public:
117 LayerTreeHostAnimationTestAddAnimation() 113 LayerTreeHostAnimationTestAddAnimation()
118 : num_begin_frames_(0), received_animation_started_notification_(false) {} 114 : num_begin_frames_(0), received_animation_started_notification_(false) {}
119 115
120 virtual void BeginTest() override { 116 void BeginTest() override {
121 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); 117 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer());
122 } 118 }
123 119
124 virtual void UpdateAnimationState( 120 void UpdateAnimationState(LayerTreeHostImpl* host_impl,
125 LayerTreeHostImpl* host_impl, 121 bool has_unfinished_animation) override {
126 bool has_unfinished_animation) override {
127 if (!num_begin_frames_) { 122 if (!num_begin_frames_) {
128 // The animation had zero duration so LayerTreeHostImpl should no 123 // The animation had zero duration so LayerTreeHostImpl should no
129 // longer need to animate its layers. 124 // longer need to animate its layers.
130 EXPECT_FALSE(has_unfinished_animation); 125 EXPECT_FALSE(has_unfinished_animation);
131 num_begin_frames_++; 126 num_begin_frames_++;
132 return; 127 return;
133 } 128 }
134 129
135 if (received_animation_started_notification_) { 130 if (received_animation_started_notification_) {
136 EXPECT_LT(base::TimeTicks(), start_time_); 131 EXPECT_LT(base::TimeTicks(), start_time_);
137 132
138 LayerAnimationController* controller_impl = 133 LayerAnimationController* controller_impl =
139 host_impl->active_tree()->root_layer()->layer_animation_controller(); 134 host_impl->active_tree()->root_layer()->layer_animation_controller();
140 Animation* animation_impl = 135 Animation* animation_impl =
141 controller_impl->GetAnimation(Animation::Opacity); 136 controller_impl->GetAnimation(Animation::Opacity);
142 if (animation_impl) 137 if (animation_impl)
143 controller_impl->RemoveAnimation(animation_impl->id()); 138 controller_impl->RemoveAnimation(animation_impl->id());
144 139
145 EndTest(); 140 EndTest();
146 } 141 }
147 } 142 }
148 143
149 virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time, 144 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
150 Animation::TargetProperty target_property, 145 Animation::TargetProperty target_property,
151 int group) override { 146 int group) override {
152 received_animation_started_notification_ = true; 147 received_animation_started_notification_ = true;
153 start_time_ = monotonic_time; 148 start_time_ = monotonic_time;
154 if (num_begin_frames_) { 149 if (num_begin_frames_) {
155 EXPECT_LT(base::TimeTicks(), start_time_); 150 EXPECT_LT(base::TimeTicks(), start_time_);
156 151
157 LayerAnimationController* controller = 152 LayerAnimationController* controller =
158 layer_tree_host()->root_layer()->layer_animation_controller(); 153 layer_tree_host()->root_layer()->layer_animation_controller();
159 Animation* animation = 154 Animation* animation =
160 controller->GetAnimation(Animation::Opacity); 155 controller->GetAnimation(Animation::Opacity);
161 if (animation) 156 if (animation)
162 controller->RemoveAnimation(animation->id()); 157 controller->RemoveAnimation(animation->id());
163 158
164 EndTest(); 159 EndTest();
165 } 160 }
166 } 161 }
167 162
168 virtual void AfterTest() override {} 163 void AfterTest() override {}
169 164
170 private: 165 private:
171 int num_begin_frames_; 166 int num_begin_frames_;
172 bool received_animation_started_notification_; 167 bool received_animation_started_notification_;
173 base::TimeTicks start_time_; 168 base::TimeTicks start_time_;
174 }; 169 };
175 170
176 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAddAnimation); 171 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAddAnimation);
177 172
178 // Add a layer animation to a layer, but continually fail to draw. Confirm that 173 // Add a layer animation to a layer, but continually fail to draw. Confirm that
179 // after a while, we do eventually force a draw. 174 // after a while, we do eventually force a draw.
180 class LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws 175 class LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws
181 : public LayerTreeHostAnimationTest { 176 : public LayerTreeHostAnimationTest {
182 public: 177 public:
183 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws() 178 LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws()
184 : started_animating_(false) {} 179 : started_animating_(false) {}
185 180
186 virtual void BeginTest() override { 181 void BeginTest() override {
187 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 182 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
188 } 183 }
189 184
190 virtual void AnimateLayers( 185 void AnimateLayers(LayerTreeHostImpl* host_impl,
191 LayerTreeHostImpl* host_impl, 186 base::TimeTicks monotonic_time) override {
192 base::TimeTicks monotonic_time) override {
193 started_animating_ = true; 187 started_animating_ = true;
194 } 188 }
195 189
196 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { 190 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
197 if (started_animating_) 191 if (started_animating_)
198 EndTest(); 192 EndTest();
199 } 193 }
200 194
201 virtual DrawResult PrepareToDrawOnThread( 195 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
202 LayerTreeHostImpl* host_impl, 196 LayerTreeHostImpl::FrameData* frame,
203 LayerTreeHostImpl::FrameData* frame, 197 DrawResult draw_result) override {
204 DrawResult draw_result) override {
205 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; 198 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
206 } 199 }
207 200
208 virtual void AfterTest() override { } 201 void AfterTest() override {}
209 202
210 private: 203 private:
211 bool started_animating_; 204 bool started_animating_;
212 }; 205 };
213 206
214 // Starvation can only be an issue with the MT compositor. 207 // Starvation can only be an issue with the MT compositor.
215 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws); 208 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestCheckerboardDoesNotStarveDraws);
216 209
217 // Ensures that animations eventually get deleted. 210 // Ensures that animations eventually get deleted.
218 class LayerTreeHostAnimationTestAnimationsGetDeleted 211 class LayerTreeHostAnimationTestAnimationsGetDeleted
219 : public LayerTreeHostAnimationTest { 212 : public LayerTreeHostAnimationTest {
220 public: 213 public:
221 LayerTreeHostAnimationTestAnimationsGetDeleted() 214 LayerTreeHostAnimationTestAnimationsGetDeleted()
222 : started_animating_(false) {} 215 : started_animating_(false) {}
223 216
224 virtual void BeginTest() override { 217 void BeginTest() override {
225 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 218 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
226 } 219 }
227 220
228 virtual void AnimateLayers( 221 void AnimateLayers(LayerTreeHostImpl* host_impl,
229 LayerTreeHostImpl* host_impl, 222 base::TimeTicks monotonic_time) override {
230 base::TimeTicks monotonic_time) override {
231 bool have_animations = !host_impl->animation_registrar()-> 223 bool have_animations = !host_impl->animation_registrar()->
232 active_animation_controllers().empty(); 224 active_animation_controllers().empty();
233 if (!started_animating_ && have_animations) { 225 if (!started_animating_ && have_animations) {
234 started_animating_ = true; 226 started_animating_ = true;
235 return; 227 return;
236 } 228 }
237 229
238 if (started_animating_ && !have_animations) 230 if (started_animating_ && !have_animations)
239 EndTest(); 231 EndTest();
240 } 232 }
241 233
242 virtual void NotifyAnimationFinished( 234 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
243 base::TimeTicks monotonic_time, 235 Animation::TargetProperty target_property,
244 Animation::TargetProperty target_property, 236 int group) override {
245 int group) override {
246 // Animations on the impl-side controller only get deleted during a commit, 237 // Animations on the impl-side controller only get deleted during a commit,
247 // so we need to schedule a commit. 238 // so we need to schedule a commit.
248 layer_tree_host()->SetNeedsCommit(); 239 layer_tree_host()->SetNeedsCommit();
249 } 240 }
250 241
251 virtual void AfterTest() override {} 242 void AfterTest() override {}
252 243
253 private: 244 private:
254 bool started_animating_; 245 bool started_animating_;
255 }; 246 };
256 247
257 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAnimationsGetDeleted); 248 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAnimationsGetDeleted);
258 249
259 // Ensures that animations continue to be ticked when we are backgrounded. 250 // Ensures that animations continue to be ticked when we are backgrounded.
260 class LayerTreeHostAnimationTestTickAnimationWhileBackgrounded 251 class LayerTreeHostAnimationTestTickAnimationWhileBackgrounded
261 : public LayerTreeHostAnimationTest { 252 : public LayerTreeHostAnimationTest {
262 public: 253 public:
263 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded() 254 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded()
264 : num_begin_frames_(0) {} 255 : num_begin_frames_(0) {}
265 256
266 virtual void BeginTest() override { 257 void BeginTest() override {
267 PostAddLongAnimationToMainThread(layer_tree_host()->root_layer()); 258 PostAddLongAnimationToMainThread(layer_tree_host()->root_layer());
268 } 259 }
269 260
270 // Use WillAnimateLayers to set visible false before the animation runs and 261 // Use WillAnimateLayers to set visible false before the animation runs and
271 // causes a commit, so we block the second visible animate in single-thread 262 // causes a commit, so we block the second visible animate in single-thread
272 // mode. 263 // mode.
273 virtual void WillAnimateLayers( 264 void WillAnimateLayers(LayerTreeHostImpl* host_impl,
274 LayerTreeHostImpl* host_impl, 265 base::TimeTicks monotonic_time) override {
275 base::TimeTicks monotonic_time) override {
276 // Verify that the host can draw, it's just not visible. 266 // Verify that the host can draw, it's just not visible.
277 EXPECT_TRUE(host_impl->CanDraw()); 267 EXPECT_TRUE(host_impl->CanDraw());
278 if (num_begin_frames_ < 2) { 268 if (num_begin_frames_ < 2) {
279 if (!num_begin_frames_) { 269 if (!num_begin_frames_) {
280 // We have a long animation running. It should continue to tick even 270 // We have a long animation running. It should continue to tick even
281 // if we are not visible. 271 // if we are not visible.
282 PostSetVisibleToMainThread(false); 272 PostSetVisibleToMainThread(false);
283 } 273 }
284 num_begin_frames_++; 274 num_begin_frames_++;
285 return; 275 return;
286 } 276 }
287 EndTest(); 277 EndTest();
288 } 278 }
289 279
290 virtual void AfterTest() override {} 280 void AfterTest() override {}
291 281
292 private: 282 private:
293 int num_begin_frames_; 283 int num_begin_frames_;
294 }; 284 };
295 285
296 SINGLE_AND_MULTI_THREAD_TEST_F( 286 SINGLE_AND_MULTI_THREAD_TEST_F(
297 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded); 287 LayerTreeHostAnimationTestTickAnimationWhileBackgrounded);
298 288
299 // Ensures that animation time remains monotonic when we switch from foreground 289 // Ensures that animation time remains monotonic when we switch from foreground
300 // to background ticking and back, even if we're skipping draws due to 290 // to background ticking and back, even if we're skipping draws due to
301 // checkerboarding when in the foreground. 291 // checkerboarding when in the foreground.
302 class LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic 292 class LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic
303 : public LayerTreeHostAnimationTest { 293 : public LayerTreeHostAnimationTest {
304 public: 294 public:
305 LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic() 295 LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic()
306 : has_background_ticked_(false), num_foreground_animates_(0) {} 296 : has_background_ticked_(false), num_foreground_animates_(0) {}
307 297
308 virtual void InitializeSettings(LayerTreeSettings* settings) override { 298 void InitializeSettings(LayerTreeSettings* settings) override {
309 // Make sure that drawing many times doesn't cause a checkerboarded 299 // Make sure that drawing many times doesn't cause a checkerboarded
310 // animation to start so we avoid flake in this test. 300 // animation to start so we avoid flake in this test.
311 settings->timeout_and_draw_when_animation_checkerboards = false; 301 settings->timeout_and_draw_when_animation_checkerboards = false;
312 } 302 }
313 303
314 virtual void BeginTest() override { 304 void BeginTest() override {
315 PostAddLongAnimationToMainThread(layer_tree_host()->root_layer()); 305 PostAddLongAnimationToMainThread(layer_tree_host()->root_layer());
316 } 306 }
317 307
318 virtual void AnimateLayers(LayerTreeHostImpl* host_impl, 308 void AnimateLayers(LayerTreeHostImpl* host_impl,
319 base::TimeTicks monotonic_time) override { 309 base::TimeTicks monotonic_time) override {
320 EXPECT_GE(monotonic_time, last_tick_time_); 310 EXPECT_GE(monotonic_time, last_tick_time_);
321 last_tick_time_ = monotonic_time; 311 last_tick_time_ = monotonic_time;
322 if (host_impl->visible()) { 312 if (host_impl->visible()) {
323 num_foreground_animates_++; 313 num_foreground_animates_++;
324 if (num_foreground_animates_ > 1 && !has_background_ticked_) 314 if (num_foreground_animates_ > 1 && !has_background_ticked_)
325 PostSetVisibleToMainThread(false); 315 PostSetVisibleToMainThread(false);
326 else if (has_background_ticked_) 316 else if (has_background_ticked_)
327 EndTest(); 317 EndTest();
328 } else { 318 } else {
329 has_background_ticked_ = true; 319 has_background_ticked_ = true;
330 PostSetVisibleToMainThread(true); 320 PostSetVisibleToMainThread(true);
331 } 321 }
332 } 322 }
333 323
334 virtual DrawResult PrepareToDrawOnThread( 324 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
335 LayerTreeHostImpl* host_impl, 325 LayerTreeHostImpl::FrameData* frame,
336 LayerTreeHostImpl::FrameData* frame, 326 DrawResult draw_result) override {
337 DrawResult draw_result) override {
338 if (TestEnded()) 327 if (TestEnded())
339 return draw_result; 328 return draw_result;
340 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; 329 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
341 } 330 }
342 331
343 virtual void AfterTest() override {} 332 void AfterTest() override {}
344 333
345 private: 334 private:
346 bool has_background_ticked_; 335 bool has_background_ticked_;
347 int num_foreground_animates_; 336 int num_foreground_animates_;
348 base::TimeTicks last_tick_time_; 337 base::TimeTicks last_tick_time_;
349 }; 338 };
350 339
351 SINGLE_AND_MULTI_THREAD_TEST_F( 340 SINGLE_AND_MULTI_THREAD_TEST_F(
352 LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic); 341 LayerTreeHostAnimationTestAnimationTickTimeIsMonotonic);
353 342
354 // Ensures that animations do not tick when we are backgrounded and 343 // Ensures that animations do not tick when we are backgrounded and
355 // and we have an empty active tree. 344 // and we have an empty active tree.
356 class LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree 345 class LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree
357 : public LayerTreeHostAnimationTest { 346 : public LayerTreeHostAnimationTest {
358 protected: 347 protected:
359 LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree() 348 LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree()
360 : active_tree_was_animated_(false) {} 349 : active_tree_was_animated_(false) {}
361 350
362 virtual base::TimeDelta LowFrequencyAnimationInterval() const override { 351 base::TimeDelta LowFrequencyAnimationInterval() const override {
363 return base::TimeDelta::FromMilliseconds(4); 352 return base::TimeDelta::FromMilliseconds(4);
364 } 353 }
365 354
366 virtual void BeginTest() override { 355 void BeginTest() override {
367 PostAddAnimationToMainThread(layer_tree_host()->root_layer()); 356 PostAddAnimationToMainThread(layer_tree_host()->root_layer());
368 } 357 }
369 358
370 virtual void NotifyAnimationFinished( 359 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
371 base::TimeTicks monotonic_time, 360 Animation::TargetProperty target_property,
372 Animation::TargetProperty target_property, 361 int group) override {
373 int group) override {
374 // Replace animated commits with an empty tree. 362 // Replace animated commits with an empty tree.
375 layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL)); 363 layer_tree_host()->SetRootLayer(make_scoped_refptr<Layer>(NULL));
376 } 364 }
377 365
378 virtual void DidCommit() override { 366 void DidCommit() override {
379 // This alternates setting an empty tree and a non-empty tree with an 367 // This alternates setting an empty tree and a non-empty tree with an
380 // animation. 368 // animation.
381 switch (layer_tree_host()->source_frame_number()) { 369 switch (layer_tree_host()->source_frame_number()) {
382 case 1: 370 case 1:
383 // Wait for NotifyAnimationFinished to commit an empty tree. 371 // Wait for NotifyAnimationFinished to commit an empty tree.
384 break; 372 break;
385 case 2: 373 case 2:
386 SetupTree(); 374 SetupTree();
387 AddOpacityTransitionToLayer( 375 AddOpacityTransitionToLayer(
388 layer_tree_host()->root_layer(), 0.000001, 0, 0.5, true); 376 layer_tree_host()->root_layer(), 0.000001, 0, 0.5, true);
389 break; 377 break;
390 case 3: 378 case 3:
391 // Wait for NotifyAnimationFinished to commit an empty tree. 379 // Wait for NotifyAnimationFinished to commit an empty tree.
392 break; 380 break;
393 case 4: 381 case 4:
394 EndTest(); 382 EndTest();
395 break; 383 break;
396 } 384 }
397 } 385 }
398 386
399 virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { 387 void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
400 // At the start of every commit, block activations and make sure 388 // At the start of every commit, block activations and make sure
401 // we are backgrounded. 389 // we are backgrounded.
402 if (host_impl->settings().impl_side_painting) 390 if (host_impl->settings().impl_side_painting)
403 host_impl->BlockNotifyReadyToActivateForTesting(true); 391 host_impl->BlockNotifyReadyToActivateForTesting(true);
404 PostSetVisibleToMainThread(false); 392 PostSetVisibleToMainThread(false);
405 } 393 }
406 394
407 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { 395 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
408 if (!host_impl->settings().impl_side_painting) { 396 if (!host_impl->settings().impl_side_painting) {
409 // There are no activations to block if we're not impl-side-painting, 397 // There are no activations to block if we're not impl-side-painting,
410 // so just advance the test immediately. 398 // so just advance the test immediately.
411 if (host_impl->active_tree()->source_frame_number() < 3) 399 if (host_impl->active_tree()->source_frame_number() < 3)
412 UnblockActivations(host_impl); 400 UnblockActivations(host_impl);
413 return; 401 return;
414 } 402 }
415 403
416 // We block activation for several ticks to make sure that, even though 404 // We block activation for several ticks to make sure that, even though
417 // there is a pending tree with animations, we still do not background 405 // there is a pending tree with animations, we still do not background
418 // tick if the active tree is empty. 406 // tick if the active tree is empty.
419 if (host_impl->pending_tree()->source_frame_number() < 3) { 407 if (host_impl->pending_tree()->source_frame_number() < 3) {
420 base::MessageLoopProxy::current()->PostDelayedTask( 408 base::MessageLoopProxy::current()->PostDelayedTask(
421 FROM_HERE, 409 FROM_HERE,
422 base::Bind( 410 base::Bind(
423 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree:: 411 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree::
424 UnblockActivations, 412 UnblockActivations,
425 base::Unretained(this), 413 base::Unretained(this),
426 host_impl), 414 host_impl),
427 4 * LowFrequencyAnimationInterval()); 415 4 * LowFrequencyAnimationInterval());
428 } 416 }
429 } 417 }
430 418
431 virtual void UnblockActivations(LayerTreeHostImpl* host_impl) { 419 virtual void UnblockActivations(LayerTreeHostImpl* host_impl) {
432 if (host_impl->settings().impl_side_painting) 420 if (host_impl->settings().impl_side_painting)
433 host_impl->BlockNotifyReadyToActivateForTesting(false); 421 host_impl->BlockNotifyReadyToActivateForTesting(false);
434 } 422 }
435 423
436 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { 424 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
437 active_tree_was_animated_ = false; 425 active_tree_was_animated_ = false;
438 426
439 // Verify that commits are actually alternating with empty / non-empty 427 // Verify that commits are actually alternating with empty / non-empty
440 // trees. 428 // trees.
441 int frame_number = host_impl->active_tree()->source_frame_number(); 429 int frame_number = host_impl->active_tree()->source_frame_number();
442 switch (frame_number) { 430 switch (frame_number) {
443 case 0: 431 case 0:
444 case 2: 432 case 2:
445 EXPECT_TRUE(host_impl->active_tree()->root_layer()) 433 EXPECT_TRUE(host_impl->active_tree()->root_layer())
446 << "frame: " << frame_number; 434 << "frame: " << frame_number;
(...skipping 12 matching lines...) Expand all
459 FROM_HERE, 447 FROM_HERE,
460 base::Bind( 448 base::Bind(
461 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree:: 449 &LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree::
462 InitiateNextCommit, 450 InitiateNextCommit,
463 base::Unretained(this), 451 base::Unretained(this),
464 host_impl), 452 host_impl),
465 4 * LowFrequencyAnimationInterval()); 453 4 * LowFrequencyAnimationInterval());
466 } 454 }
467 } 455 }
468 456
469 virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl, 457 void WillAnimateLayers(LayerTreeHostImpl* host_impl,
470 base::TimeTicks monotonic_time) override { 458 base::TimeTicks monotonic_time) override {
471 EXPECT_TRUE(host_impl->active_tree()->root_layer()); 459 EXPECT_TRUE(host_impl->active_tree()->root_layer());
472 active_tree_was_animated_ = true; 460 active_tree_was_animated_ = true;
473 } 461 }
474 462
475 void InitiateNextCommit(LayerTreeHostImpl* host_impl) { 463 void InitiateNextCommit(LayerTreeHostImpl* host_impl) {
476 // Verify that we actually animated when we should have. 464 // Verify that we actually animated when we should have.
477 bool has_active_tree = host_impl->active_tree()->root_layer(); 465 bool has_active_tree = host_impl->active_tree()->root_layer();
478 EXPECT_EQ(has_active_tree, active_tree_was_animated_); 466 EXPECT_EQ(has_active_tree, active_tree_was_animated_);
479 467
480 // The next commit is blocked until we become visible again. 468 // The next commit is blocked until we become visible again.
481 PostSetVisibleToMainThread(true); 469 PostSetVisibleToMainThread(true);
482 } 470 }
483 471
484 virtual void AfterTest() override {} 472 void AfterTest() override {}
485 473
486 bool active_tree_was_animated_; 474 bool active_tree_was_animated_;
487 }; 475 };
488 476
489 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( 477 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F(
490 LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree); 478 LayerTreeHostAnimationTestNoBackgroundTickingWithoutActiveTree);
491 479
492 // Ensure that an animation's timing function is respected. 480 // Ensure that an animation's timing function is respected.
493 class LayerTreeHostAnimationTestAddAnimationWithTimingFunction 481 class LayerTreeHostAnimationTestAddAnimationWithTimingFunction
494 : public LayerTreeHostAnimationTest { 482 : public LayerTreeHostAnimationTest {
495 public: 483 public:
496 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {} 484 LayerTreeHostAnimationTestAddAnimationWithTimingFunction() {}
497 485
498 virtual void SetupTree() override { 486 void SetupTree() override {
499 LayerTreeHostAnimationTest::SetupTree(); 487 LayerTreeHostAnimationTest::SetupTree();
500 content_ = FakeContentLayer::Create(&client_); 488 content_ = FakeContentLayer::Create(&client_);
501 content_->SetBounds(gfx::Size(4, 4)); 489 content_->SetBounds(gfx::Size(4, 4));
502 layer_tree_host()->root_layer()->AddChild(content_); 490 layer_tree_host()->root_layer()->AddChild(content_);
503 } 491 }
504 492
505 virtual void BeginTest() override { 493 void BeginTest() override { PostAddAnimationToMainThread(content_.get()); }
506 PostAddAnimationToMainThread(content_.get());
507 }
508 494
509 virtual void AnimateLayers( 495 void AnimateLayers(LayerTreeHostImpl* host_impl,
510 LayerTreeHostImpl* host_impl, 496 base::TimeTicks monotonic_time) override {
511 base::TimeTicks monotonic_time) override {
512 LayerAnimationController* controller_impl = 497 LayerAnimationController* controller_impl =
513 host_impl->active_tree()->root_layer()->children()[0]-> 498 host_impl->active_tree()->root_layer()->children()[0]->
514 layer_animation_controller(); 499 layer_animation_controller();
515 Animation* animation = 500 Animation* animation =
516 controller_impl->GetAnimation(Animation::Opacity); 501 controller_impl->GetAnimation(Animation::Opacity);
517 if (!animation) 502 if (!animation)
518 return; 503 return;
519 504
520 const FloatAnimationCurve* curve = 505 const FloatAnimationCurve* curve =
521 animation->curve()->ToFloatAnimationCurve(); 506 animation->curve()->ToFloatAnimationCurve();
522 float start_opacity = curve->GetValue(0.0); 507 float start_opacity = curve->GetValue(0.0);
523 float end_opacity = curve->GetValue(curve->Duration()); 508 float end_opacity = curve->GetValue(curve->Duration());
524 float linearly_interpolated_opacity = 509 float linearly_interpolated_opacity =
525 0.25f * end_opacity + 0.75f * start_opacity; 510 0.25f * end_opacity + 0.75f * start_opacity;
526 double time = curve->Duration() * 0.25; 511 double time = curve->Duration() * 0.25;
527 // If the linear timing function associated with this animation was not 512 // If the linear timing function associated with this animation was not
528 // picked up, then the linearly interpolated opacity would be different 513 // picked up, then the linearly interpolated opacity would be different
529 // because of the default ease timing function. 514 // because of the default ease timing function.
530 EXPECT_FLOAT_EQ(linearly_interpolated_opacity, curve->GetValue(time)); 515 EXPECT_FLOAT_EQ(linearly_interpolated_opacity, curve->GetValue(time));
531 516
532 EndTest(); 517 EndTest();
533 } 518 }
534 519
535 virtual void AfterTest() override {} 520 void AfterTest() override {}
536 521
537 FakeContentLayerClient client_; 522 FakeContentLayerClient client_;
538 scoped_refptr<FakeContentLayer> content_; 523 scoped_refptr<FakeContentLayer> content_;
539 }; 524 };
540 525
541 SINGLE_AND_MULTI_THREAD_TEST_F( 526 SINGLE_AND_MULTI_THREAD_TEST_F(
542 LayerTreeHostAnimationTestAddAnimationWithTimingFunction); 527 LayerTreeHostAnimationTestAddAnimationWithTimingFunction);
543 528
544 // Ensures that main thread animations have their start times synchronized with 529 // Ensures that main thread animations have their start times synchronized with
545 // impl thread animations. 530 // impl thread animations.
546 class LayerTreeHostAnimationTestSynchronizeAnimationStartTimes 531 class LayerTreeHostAnimationTestSynchronizeAnimationStartTimes
547 : public LayerTreeHostAnimationTest { 532 : public LayerTreeHostAnimationTest {
548 public: 533 public:
549 LayerTreeHostAnimationTestSynchronizeAnimationStartTimes() 534 LayerTreeHostAnimationTestSynchronizeAnimationStartTimes()
550 : main_start_time_(-1.0), 535 : main_start_time_(-1.0),
551 impl_start_time_(-1.0) {} 536 impl_start_time_(-1.0) {}
552 537
553 virtual void SetupTree() override { 538 void SetupTree() override {
554 LayerTreeHostAnimationTest::SetupTree(); 539 LayerTreeHostAnimationTest::SetupTree();
555 content_ = FakeContentLayer::Create(&client_); 540 content_ = FakeContentLayer::Create(&client_);
556 content_->SetBounds(gfx::Size(4, 4)); 541 content_->SetBounds(gfx::Size(4, 4));
557 content_->set_layer_animation_delegate(this); 542 content_->set_layer_animation_delegate(this);
558 layer_tree_host()->root_layer()->AddChild(content_); 543 layer_tree_host()->root_layer()->AddChild(content_);
559 } 544 }
560 545
561 virtual void BeginTest() override { 546 void BeginTest() override { PostAddAnimationToMainThread(content_.get()); }
562 PostAddAnimationToMainThread(content_.get());
563 }
564 547
565 virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time, 548 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
566 Animation::TargetProperty target_property, 549 Animation::TargetProperty target_property,
567 int group) override { 550 int group) override {
568 LayerAnimationController* controller = 551 LayerAnimationController* controller =
569 layer_tree_host()->root_layer()->children()[0]-> 552 layer_tree_host()->root_layer()->children()[0]->
570 layer_animation_controller(); 553 layer_animation_controller();
571 Animation* animation = 554 Animation* animation =
572 controller->GetAnimation(Animation::Opacity); 555 controller->GetAnimation(Animation::Opacity);
573 main_start_time_ = 556 main_start_time_ =
574 (animation->start_time() - base::TimeTicks()).InSecondsF(); 557 (animation->start_time() - base::TimeTicks()).InSecondsF();
575 controller->RemoveAnimation(animation->id()); 558 controller->RemoveAnimation(animation->id());
576 559
577 if (impl_start_time_ > 0.0) 560 if (impl_start_time_ > 0.0)
578 EndTest(); 561 EndTest();
579 } 562 }
580 563
581 virtual void UpdateAnimationState( 564 void UpdateAnimationState(LayerTreeHostImpl* impl_host,
582 LayerTreeHostImpl* impl_host, 565 bool has_unfinished_animation) override {
583 bool has_unfinished_animation) override {
584 LayerAnimationController* controller = 566 LayerAnimationController* controller =
585 impl_host->active_tree()->root_layer()->children()[0]-> 567 impl_host->active_tree()->root_layer()->children()[0]->
586 layer_animation_controller(); 568 layer_animation_controller();
587 Animation* animation = 569 Animation* animation =
588 controller->GetAnimation(Animation::Opacity); 570 controller->GetAnimation(Animation::Opacity);
589 if (!animation) 571 if (!animation)
590 return; 572 return;
591 573
592 impl_start_time_ = 574 impl_start_time_ =
593 (animation->start_time() - base::TimeTicks()).InSecondsF(); 575 (animation->start_time() - base::TimeTicks()).InSecondsF();
594 controller->RemoveAnimation(animation->id()); 576 controller->RemoveAnimation(animation->id());
595 577
596 if (main_start_time_ > 0.0) 578 if (main_start_time_ > 0.0)
597 EndTest(); 579 EndTest();
598 } 580 }
599 581
600 virtual void AfterTest() override { 582 void AfterTest() override {
601 EXPECT_FLOAT_EQ(impl_start_time_, main_start_time_); 583 EXPECT_FLOAT_EQ(impl_start_time_, main_start_time_);
602 } 584 }
603 585
604 private: 586 private:
605 double main_start_time_; 587 double main_start_time_;
606 double impl_start_time_; 588 double impl_start_time_;
607 FakeContentLayerClient client_; 589 FakeContentLayerClient client_;
608 scoped_refptr<FakeContentLayer> content_; 590 scoped_refptr<FakeContentLayer> content_;
609 }; 591 };
610 592
611 SINGLE_AND_MULTI_THREAD_TEST_F( 593 SINGLE_AND_MULTI_THREAD_TEST_F(
612 LayerTreeHostAnimationTestSynchronizeAnimationStartTimes); 594 LayerTreeHostAnimationTestSynchronizeAnimationStartTimes);
613 595
614 // Ensures that notify animation finished is called. 596 // Ensures that notify animation finished is called.
615 class LayerTreeHostAnimationTestAnimationFinishedEvents 597 class LayerTreeHostAnimationTestAnimationFinishedEvents
616 : public LayerTreeHostAnimationTest { 598 : public LayerTreeHostAnimationTest {
617 public: 599 public:
618 LayerTreeHostAnimationTestAnimationFinishedEvents() {} 600 LayerTreeHostAnimationTestAnimationFinishedEvents() {}
619 601
620 virtual void BeginTest() override { 602 void BeginTest() override {
621 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer()); 603 PostAddInstantAnimationToMainThread(layer_tree_host()->root_layer());
622 } 604 }
623 605
624 virtual void NotifyAnimationFinished( 606 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
625 base::TimeTicks monotonic_time, 607 Animation::TargetProperty target_property,
626 Animation::TargetProperty target_property, 608 int group) override {
627 int group) override {
628 LayerAnimationController* controller = 609 LayerAnimationController* controller =
629 layer_tree_host()->root_layer()->layer_animation_controller(); 610 layer_tree_host()->root_layer()->layer_animation_controller();
630 Animation* animation = 611 Animation* animation =
631 controller->GetAnimation(Animation::Opacity); 612 controller->GetAnimation(Animation::Opacity);
632 if (animation) 613 if (animation)
633 controller->RemoveAnimation(animation->id()); 614 controller->RemoveAnimation(animation->id());
634 EndTest(); 615 EndTest();
635 } 616 }
636 617
637 virtual void AfterTest() override {} 618 void AfterTest() override {}
638 }; 619 };
639 620
640 SINGLE_AND_MULTI_THREAD_TEST_F( 621 SINGLE_AND_MULTI_THREAD_TEST_F(
641 LayerTreeHostAnimationTestAnimationFinishedEvents); 622 LayerTreeHostAnimationTestAnimationFinishedEvents);
642 623
643 // Ensures that when opacity is being animated, this value does not cause the 624 // Ensures that when opacity is being animated, this value does not cause the
644 // subtree to be skipped. 625 // subtree to be skipped.
645 class LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity 626 class LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity
646 : public LayerTreeHostAnimationTest { 627 : public LayerTreeHostAnimationTest {
647 public: 628 public:
648 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity() 629 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity()
649 : update_check_layer_(FakeContentLayer::Create(&client_)) { 630 : update_check_layer_(FakeContentLayer::Create(&client_)) {
650 } 631 }
651 632
652 virtual void SetupTree() override { 633 void SetupTree() override {
653 update_check_layer_->SetOpacity(0.f); 634 update_check_layer_->SetOpacity(0.f);
654 layer_tree_host()->SetRootLayer(update_check_layer_); 635 layer_tree_host()->SetRootLayer(update_check_layer_);
655 LayerTreeHostAnimationTest::SetupTree(); 636 LayerTreeHostAnimationTest::SetupTree();
656 } 637 }
657 638
658 virtual void BeginTest() override { 639 void BeginTest() override {
659 PostAddAnimationToMainThread(update_check_layer_.get()); 640 PostAddAnimationToMainThread(update_check_layer_.get());
660 } 641 }
661 642
662 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { 643 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
663 LayerAnimationController* controller_impl = 644 LayerAnimationController* controller_impl =
664 host_impl->active_tree()->root_layer()->layer_animation_controller(); 645 host_impl->active_tree()->root_layer()->layer_animation_controller();
665 Animation* animation_impl = 646 Animation* animation_impl =
666 controller_impl->GetAnimation(Animation::Opacity); 647 controller_impl->GetAnimation(Animation::Opacity);
667 controller_impl->RemoveAnimation(animation_impl->id()); 648 controller_impl->RemoveAnimation(animation_impl->id());
668 EndTest(); 649 EndTest();
669 } 650 }
670 651
671 virtual void AfterTest() override { 652 void AfterTest() override {
672 // Update() should have been called once, proving that the layer was not 653 // Update() should have been called once, proving that the layer was not
673 // skipped. 654 // skipped.
674 EXPECT_EQ(1u, update_check_layer_->update_count()); 655 EXPECT_EQ(1u, update_check_layer_->update_count());
675 656
676 // clear update_check_layer_ so LayerTreeHost dies. 657 // clear update_check_layer_ so LayerTreeHost dies.
677 update_check_layer_ = NULL; 658 update_check_layer_ = NULL;
678 } 659 }
679 660
680 private: 661 private:
681 FakeContentLayerClient client_; 662 FakeContentLayerClient client_;
682 scoped_refptr<FakeContentLayer> update_check_layer_; 663 scoped_refptr<FakeContentLayer> update_check_layer_;
683 }; 664 };
684 665
685 SINGLE_AND_MULTI_THREAD_TEST_F( 666 SINGLE_AND_MULTI_THREAD_TEST_F(
686 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity); 667 LayerTreeHostAnimationTestDoNotSkipLayersWithAnimatedOpacity);
687 668
688 // Layers added to tree with existing active animations should have the 669 // Layers added to tree with existing active animations should have the
689 // animation correctly recognized. 670 // animation correctly recognized.
690 class LayerTreeHostAnimationTestLayerAddedWithAnimation 671 class LayerTreeHostAnimationTestLayerAddedWithAnimation
691 : public LayerTreeHostAnimationTest { 672 : public LayerTreeHostAnimationTest {
692 public: 673 public:
693 LayerTreeHostAnimationTestLayerAddedWithAnimation() {} 674 LayerTreeHostAnimationTestLayerAddedWithAnimation() {}
694 675
695 virtual void BeginTest() override { 676 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
696 PostSetNeedsCommitToMainThread();
697 }
698 677
699 virtual void DidCommit() override { 678 void DidCommit() override {
700 if (layer_tree_host()->source_frame_number() == 1) { 679 if (layer_tree_host()->source_frame_number() == 1) {
701 scoped_refptr<Layer> layer = Layer::Create(); 680 scoped_refptr<Layer> layer = Layer::Create();
702 layer->set_layer_animation_delegate(this); 681 layer->set_layer_animation_delegate(this);
703 682
704 // Any valid AnimationCurve will do here. 683 // Any valid AnimationCurve will do here.
705 scoped_ptr<AnimationCurve> curve(new FakeFloatAnimationCurve()); 684 scoped_ptr<AnimationCurve> curve(new FakeFloatAnimationCurve());
706 scoped_ptr<Animation> animation( 685 scoped_ptr<Animation> animation(
707 Animation::Create(curve.Pass(), 1, 1, 686 Animation::Create(curve.Pass(), 1, 1,
708 Animation::Opacity)); 687 Animation::Opacity));
709 layer->layer_animation_controller()->AddAnimation(animation.Pass()); 688 layer->layer_animation_controller()->AddAnimation(animation.Pass());
710 689
711 // We add the animation *before* attaching the layer to the tree. 690 // We add the animation *before* attaching the layer to the tree.
712 layer_tree_host()->root_layer()->AddChild(layer); 691 layer_tree_host()->root_layer()->AddChild(layer);
713 } 692 }
714 } 693 }
715 694
716 virtual void AnimateLayers( 695 void AnimateLayers(LayerTreeHostImpl* impl_host,
717 LayerTreeHostImpl* impl_host, 696 base::TimeTicks monotonic_time) override {
718 base::TimeTicks monotonic_time) override {
719 EndTest(); 697 EndTest();
720 } 698 }
721 699
722 virtual void AfterTest() override {} 700 void AfterTest() override {}
723 }; 701 };
724 702
725 SINGLE_AND_MULTI_THREAD_TEST_F( 703 SINGLE_AND_MULTI_THREAD_TEST_F(
726 LayerTreeHostAnimationTestLayerAddedWithAnimation); 704 LayerTreeHostAnimationTestLayerAddedWithAnimation);
727 705
728 class LayerTreeHostAnimationTestCancelAnimateCommit 706 class LayerTreeHostAnimationTestCancelAnimateCommit
729 : public LayerTreeHostAnimationTest { 707 : public LayerTreeHostAnimationTest {
730 public: 708 public:
731 LayerTreeHostAnimationTestCancelAnimateCommit() 709 LayerTreeHostAnimationTestCancelAnimateCommit()
732 : num_begin_frames_(0), num_commit_calls_(0), num_draw_calls_(0) {} 710 : num_begin_frames_(0), num_commit_calls_(0), num_draw_calls_(0) {}
733 711
734 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } 712 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
735 713
736 virtual void BeginMainFrame(const BeginFrameArgs& args) override { 714 void BeginMainFrame(const BeginFrameArgs& args) override {
737 num_begin_frames_++; 715 num_begin_frames_++;
738 // No-op animate will cancel the commit. 716 // No-op animate will cancel the commit.
739 if (layer_tree_host()->source_frame_number() == 1) { 717 if (layer_tree_host()->source_frame_number() == 1) {
740 EndTest(); 718 EndTest();
741 return; 719 return;
742 } 720 }
743 layer_tree_host()->SetNeedsAnimate(); 721 layer_tree_host()->SetNeedsAnimate();
744 } 722 }
745 723
746 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { 724 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
747 num_commit_calls_++; 725 num_commit_calls_++;
748 if (impl->active_tree()->source_frame_number() > 1) 726 if (impl->active_tree()->source_frame_number() > 1)
749 FAIL() << "Commit should have been canceled."; 727 FAIL() << "Commit should have been canceled.";
750 } 728 }
751 729
752 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 730 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
753 num_draw_calls_++; 731 num_draw_calls_++;
754 if (impl->active_tree()->source_frame_number() > 1) 732 if (impl->active_tree()->source_frame_number() > 1)
755 FAIL() << "Draw should have been canceled."; 733 FAIL() << "Draw should have been canceled.";
756 } 734 }
757 735
758 virtual void AfterTest() override { 736 void AfterTest() override {
759 EXPECT_EQ(2, num_begin_frames_); 737 EXPECT_EQ(2, num_begin_frames_);
760 EXPECT_EQ(1, num_commit_calls_); 738 EXPECT_EQ(1, num_commit_calls_);
761 EXPECT_EQ(1, num_draw_calls_); 739 EXPECT_EQ(1, num_draw_calls_);
762 } 740 }
763 741
764 private: 742 private:
765 int num_begin_frames_; 743 int num_begin_frames_;
766 int num_commit_calls_; 744 int num_commit_calls_;
767 int num_draw_calls_; 745 int num_draw_calls_;
768 FakeContentLayerClient client_; 746 FakeContentLayerClient client_;
769 scoped_refptr<FakeContentLayer> content_; 747 scoped_refptr<FakeContentLayer> content_;
770 }; 748 };
771 749
772 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestCancelAnimateCommit); 750 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestCancelAnimateCommit);
773 751
774 class LayerTreeHostAnimationTestForceRedraw 752 class LayerTreeHostAnimationTestForceRedraw
775 : public LayerTreeHostAnimationTest { 753 : public LayerTreeHostAnimationTest {
776 public: 754 public:
777 LayerTreeHostAnimationTestForceRedraw() 755 LayerTreeHostAnimationTestForceRedraw()
778 : num_animate_(0), num_draw_layers_(0) {} 756 : num_animate_(0), num_draw_layers_(0) {}
779 757
780 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } 758 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
781 759
782 virtual void BeginMainFrame(const BeginFrameArgs& args) override { 760 void BeginMainFrame(const BeginFrameArgs& args) override {
783 if (++num_animate_ < 2) 761 if (++num_animate_ < 2)
784 layer_tree_host()->SetNeedsAnimate(); 762 layer_tree_host()->SetNeedsAnimate();
785 } 763 }
786 764
787 virtual void Layout() override { 765 void Layout() override { layer_tree_host()->SetNextCommitForcesRedraw(); }
788 layer_tree_host()->SetNextCommitForcesRedraw();
789 }
790 766
791 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 767 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
792 if (++num_draw_layers_ == 2) 768 if (++num_draw_layers_ == 2)
793 EndTest(); 769 EndTest();
794 } 770 }
795 771
796 virtual void AfterTest() override { 772 void AfterTest() override {
797 // The first commit will always draw; make sure the second draw triggered 773 // The first commit will always draw; make sure the second draw triggered
798 // by the animation was not cancelled. 774 // by the animation was not cancelled.
799 EXPECT_EQ(2, num_draw_layers_); 775 EXPECT_EQ(2, num_draw_layers_);
800 EXPECT_EQ(2, num_animate_); 776 EXPECT_EQ(2, num_animate_);
801 } 777 }
802 778
803 private: 779 private:
804 int num_animate_; 780 int num_animate_;
805 int num_draw_layers_; 781 int num_draw_layers_;
806 }; 782 };
807 783
808 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestForceRedraw); 784 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestForceRedraw);
809 785
810 class LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit 786 class LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit
811 : public LayerTreeHostAnimationTest { 787 : public LayerTreeHostAnimationTest {
812 public: 788 public:
813 LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit() 789 LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit()
814 : num_animate_(0), num_draw_layers_(0) {} 790 : num_animate_(0), num_draw_layers_(0) {}
815 791
816 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } 792 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
817 793
818 virtual void BeginMainFrame(const BeginFrameArgs& args) override { 794 void BeginMainFrame(const BeginFrameArgs& args) override {
819 if (++num_animate_ <= 2) { 795 if (++num_animate_ <= 2) {
820 layer_tree_host()->SetNeedsCommit(); 796 layer_tree_host()->SetNeedsCommit();
821 layer_tree_host()->SetNeedsAnimate(); 797 layer_tree_host()->SetNeedsAnimate();
822 } 798 }
823 } 799 }
824 800
825 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 801 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
826 if (++num_draw_layers_ == 2) 802 if (++num_draw_layers_ == 2)
827 EndTest(); 803 EndTest();
828 } 804 }
829 805
830 virtual void AfterTest() override { 806 void AfterTest() override {
831 // The first commit will always draw; make sure the second draw triggered 807 // The first commit will always draw; make sure the second draw triggered
832 // by the SetNeedsCommit was not cancelled. 808 // by the SetNeedsCommit was not cancelled.
833 EXPECT_EQ(2, num_draw_layers_); 809 EXPECT_EQ(2, num_draw_layers_);
834 EXPECT_GE(num_animate_, 2); 810 EXPECT_GE(num_animate_, 2);
835 } 811 }
836 812
837 private: 813 private:
838 int num_animate_; 814 int num_animate_;
839 int num_draw_layers_; 815 int num_draw_layers_;
840 }; 816 };
841 817
842 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit); 818 MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestAnimateAfterSetNeedsCommit);
843 819
844 // Make sure the main thread can still execute animations when CanDraw() is not 820 // Make sure the main thread can still execute animations when CanDraw() is not
845 // true. 821 // true.
846 class LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw 822 class LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw
847 : public LayerTreeHostAnimationTest { 823 : public LayerTreeHostAnimationTest {
848 public: 824 public:
849 LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw() : started_times_(0) {} 825 LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw() : started_times_(0) {}
850 826
851 virtual void SetupTree() override { 827 void SetupTree() override {
852 LayerTreeHostAnimationTest::SetupTree(); 828 LayerTreeHostAnimationTest::SetupTree();
853 content_ = FakeContentLayer::Create(&client_); 829 content_ = FakeContentLayer::Create(&client_);
854 content_->SetBounds(gfx::Size(4, 4)); 830 content_->SetBounds(gfx::Size(4, 4));
855 content_->set_layer_animation_delegate(this); 831 content_->set_layer_animation_delegate(this);
856 layer_tree_host()->root_layer()->AddChild(content_); 832 layer_tree_host()->root_layer()->AddChild(content_);
857 } 833 }
858 834
859 virtual void BeginTest() override { 835 void BeginTest() override {
860 layer_tree_host()->SetViewportSize(gfx::Size()); 836 layer_tree_host()->SetViewportSize(gfx::Size());
861 PostAddAnimationToMainThread(content_.get()); 837 PostAddAnimationToMainThread(content_.get());
862 } 838 }
863 839
864 virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time, 840 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
865 Animation::TargetProperty target_property, 841 Animation::TargetProperty target_property,
866 int group) override { 842 int group) override {
867 started_times_++; 843 started_times_++;
868 } 844 }
869 845
870 virtual void NotifyAnimationFinished( 846 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
871 base::TimeTicks monotonic_time, 847 Animation::TargetProperty target_property,
872 Animation::TargetProperty target_property, 848 int group) override {
873 int group) override {
874 EndTest(); 849 EndTest();
875 } 850 }
876 851
877 virtual void AfterTest() override { 852 void AfterTest() override { EXPECT_EQ(1, started_times_); }
878 EXPECT_EQ(1, started_times_);
879 }
880 853
881 private: 854 private:
882 int started_times_; 855 int started_times_;
883 FakeContentLayerClient client_; 856 FakeContentLayerClient client_;
884 scoped_refptr<FakeContentLayer> content_; 857 scoped_refptr<FakeContentLayer> content_;
885 }; 858 };
886 859
887 SINGLE_AND_MULTI_THREAD_TEST_F( 860 SINGLE_AND_MULTI_THREAD_TEST_F(
888 LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw); 861 LayerTreeHostAnimationTestRunAnimationWhenNotCanDraw);
889 862
890 // Make sure the main thread can still execute animations when the renderer is 863 // Make sure the main thread can still execute animations when the renderer is
891 // backgrounded. 864 // backgrounded.
892 class LayerTreeHostAnimationTestRunAnimationWhenNotVisible 865 class LayerTreeHostAnimationTestRunAnimationWhenNotVisible
893 : public LayerTreeHostAnimationTest { 866 : public LayerTreeHostAnimationTest {
894 public: 867 public:
895 LayerTreeHostAnimationTestRunAnimationWhenNotVisible() : started_times_(0) {} 868 LayerTreeHostAnimationTestRunAnimationWhenNotVisible() : started_times_(0) {}
896 869
897 virtual void SetupTree() override { 870 void SetupTree() override {
898 LayerTreeHostAnimationTest::SetupTree(); 871 LayerTreeHostAnimationTest::SetupTree();
899 content_ = FakeContentLayer::Create(&client_); 872 content_ = FakeContentLayer::Create(&client_);
900 content_->SetBounds(gfx::Size(4, 4)); 873 content_->SetBounds(gfx::Size(4, 4));
901 content_->set_layer_animation_delegate(this); 874 content_->set_layer_animation_delegate(this);
902 layer_tree_host()->root_layer()->AddChild(content_); 875 layer_tree_host()->root_layer()->AddChild(content_);
903 } 876 }
904 877
905 virtual void BeginTest() override { 878 void BeginTest() override {
906 visible_ = true; 879 visible_ = true;
907 PostAddAnimationToMainThread(content_.get()); 880 PostAddAnimationToMainThread(content_.get());
908 } 881 }
909 882
910 virtual void DidCommit() override { 883 void DidCommit() override {
911 visible_ = false; 884 visible_ = false;
912 layer_tree_host()->SetVisible(false); 885 layer_tree_host()->SetVisible(false);
913 } 886 }
914 887
915 virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time, 888 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
916 Animation::TargetProperty target_property, 889 Animation::TargetProperty target_property,
917 int group) override { 890 int group) override {
918 EXPECT_FALSE(visible_); 891 EXPECT_FALSE(visible_);
919 started_times_++; 892 started_times_++;
920 } 893 }
921 894
922 virtual void NotifyAnimationFinished( 895 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
923 base::TimeTicks monotonic_time, 896 Animation::TargetProperty target_property,
924 Animation::TargetProperty target_property, 897 int group) override {
925 int group) override {
926 EXPECT_FALSE(visible_); 898 EXPECT_FALSE(visible_);
927 EXPECT_EQ(1, started_times_); 899 EXPECT_EQ(1, started_times_);
928 EndTest(); 900 EndTest();
929 } 901 }
930 902
931 virtual void AfterTest() override {} 903 void AfterTest() override {}
932 904
933 private: 905 private:
934 bool visible_; 906 bool visible_;
935 int started_times_; 907 int started_times_;
936 FakeContentLayerClient client_; 908 FakeContentLayerClient client_;
937 scoped_refptr<FakeContentLayer> content_; 909 scoped_refptr<FakeContentLayer> content_;
938 }; 910 };
939 911
940 SINGLE_AND_MULTI_THREAD_TEST_F( 912 SINGLE_AND_MULTI_THREAD_TEST_F(
941 LayerTreeHostAnimationTestRunAnimationWhenNotVisible); 913 LayerTreeHostAnimationTestRunAnimationWhenNotVisible);
942 914
943 // Animations should not be started when frames are being skipped due to 915 // Animations should not be started when frames are being skipped due to
944 // checkerboard. 916 // checkerboard.
945 class LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations 917 class LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations
946 : public LayerTreeHostAnimationTest { 918 : public LayerTreeHostAnimationTest {
947 virtual void SetupTree() override { 919 void SetupTree() override {
948 LayerTreeHostAnimationTest::SetupTree(); 920 LayerTreeHostAnimationTest::SetupTree();
949 content_ = FakeContentLayer::Create(&client_); 921 content_ = FakeContentLayer::Create(&client_);
950 content_->SetBounds(gfx::Size(4, 4)); 922 content_->SetBounds(gfx::Size(4, 4));
951 content_->set_layer_animation_delegate(this); 923 content_->set_layer_animation_delegate(this);
952 layer_tree_host()->root_layer()->AddChild(content_); 924 layer_tree_host()->root_layer()->AddChild(content_);
953 } 925 }
954 926
955 virtual void InitializeSettings(LayerTreeSettings* settings) override { 927 void InitializeSettings(LayerTreeSettings* settings) override {
956 // Make sure that drawing many times doesn't cause a checkerboarded 928 // Make sure that drawing many times doesn't cause a checkerboarded
957 // animation to start so we avoid flake in this test. 929 // animation to start so we avoid flake in this test.
958 settings->timeout_and_draw_when_animation_checkerboards = false; 930 settings->timeout_and_draw_when_animation_checkerboards = false;
959 } 931 }
960 932
961 virtual void BeginTest() override { 933 void BeginTest() override {
962 prevented_draw_ = 0; 934 prevented_draw_ = 0;
963 added_animations_ = 0; 935 added_animations_ = 0;
964 started_times_ = 0; 936 started_times_ = 0;
965 937
966 PostSetNeedsCommitToMainThread(); 938 PostSetNeedsCommitToMainThread();
967 } 939 }
968 940
969 virtual DrawResult PrepareToDrawOnThread( 941 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
970 LayerTreeHostImpl* host_impl, 942 LayerTreeHostImpl::FrameData* frame_data,
971 LayerTreeHostImpl::FrameData* frame_data, 943 DrawResult draw_result) override {
972 DrawResult draw_result) override {
973 if (added_animations_ < 2) 944 if (added_animations_ < 2)
974 return draw_result; 945 return draw_result;
975 if (TestEnded()) 946 if (TestEnded())
976 return draw_result; 947 return draw_result;
977 // Act like there is checkerboard when the second animation wants to draw. 948 // Act like there is checkerboard when the second animation wants to draw.
978 ++prevented_draw_; 949 ++prevented_draw_;
979 if (prevented_draw_ > 2) 950 if (prevented_draw_ > 2)
980 EndTest(); 951 EndTest();
981 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; 952 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
982 } 953 }
983 954
984 virtual void DidCommitAndDrawFrame() override { 955 void DidCommitAndDrawFrame() override {
985 switch (layer_tree_host()->source_frame_number()) { 956 switch (layer_tree_host()->source_frame_number()) {
986 case 1: 957 case 1:
987 // The animation is longer than 1 BeginFrame interval. 958 // The animation is longer than 1 BeginFrame interval.
988 AddOpacityTransitionToLayer(content_.get(), 0.1, 0.2f, 0.8f, false); 959 AddOpacityTransitionToLayer(content_.get(), 0.1, 0.2f, 0.8f, false);
989 added_animations_++; 960 added_animations_++;
990 break; 961 break;
991 case 2: 962 case 2:
992 // This second animation will not be drawn so it should not start. 963 // This second animation will not be drawn so it should not start.
993 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5); 964 AddAnimatedTransformToLayer(content_.get(), 0.1, 5, 5);
994 added_animations_++; 965 added_animations_++;
995 break; 966 break;
996 } 967 }
997 } 968 }
998 969
999 virtual void NotifyAnimationStarted(base::TimeTicks monotonic_time, 970 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
1000 Animation::TargetProperty target_property, 971 Animation::TargetProperty target_property,
1001 int group) override { 972 int group) override {
1002 if (TestEnded()) 973 if (TestEnded())
1003 return; 974 return;
1004 started_times_++; 975 started_times_++;
1005 } 976 }
1006 977
1007 virtual void AfterTest() override { 978 void AfterTest() override {
1008 // Make sure we tried to draw the second animation but failed. 979 // Make sure we tried to draw the second animation but failed.
1009 EXPECT_LT(0, prevented_draw_); 980 EXPECT_LT(0, prevented_draw_);
1010 // The first animation should be started, but the second should not because 981 // The first animation should be started, but the second should not because
1011 // of checkerboard. 982 // of checkerboard.
1012 EXPECT_EQ(1, started_times_); 983 EXPECT_EQ(1, started_times_);
1013 } 984 }
1014 985
1015 int prevented_draw_; 986 int prevented_draw_;
1016 int added_animations_; 987 int added_animations_;
1017 int started_times_; 988 int started_times_;
1018 FakeContentLayerClient client_; 989 FakeContentLayerClient client_;
1019 scoped_refptr<FakeContentLayer> content_; 990 scoped_refptr<FakeContentLayer> content_;
1020 }; 991 };
1021 992
1022 MULTI_THREAD_TEST_F( 993 MULTI_THREAD_TEST_F(
1023 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations); 994 LayerTreeHostAnimationTestCheckerboardDoesntStartAnimations);
1024 995
1025 // Verifies that scroll offset animations are only accepted when impl-scrolling 996 // Verifies that scroll offset animations are only accepted when impl-scrolling
1026 // is supported, and that when scroll offset animations are accepted, 997 // is supported, and that when scroll offset animations are accepted,
1027 // scroll offset updates are sent back to the main thread. 998 // scroll offset updates are sent back to the main thread.
1028 class LayerTreeHostAnimationTestScrollOffsetChangesArePropagated 999 class LayerTreeHostAnimationTestScrollOffsetChangesArePropagated
1029 : public LayerTreeHostAnimationTest { 1000 : public LayerTreeHostAnimationTest {
1030 public: 1001 public:
1031 LayerTreeHostAnimationTestScrollOffsetChangesArePropagated() {} 1002 LayerTreeHostAnimationTestScrollOffsetChangesArePropagated() {}
1032 1003
1033 virtual void SetupTree() override { 1004 void SetupTree() override {
1034 LayerTreeHostAnimationTest::SetupTree(); 1005 LayerTreeHostAnimationTest::SetupTree();
1035 1006
1036 scroll_layer_ = FakeContentLayer::Create(&client_); 1007 scroll_layer_ = FakeContentLayer::Create(&client_);
1037 scroll_layer_->SetScrollClipLayerId(layer_tree_host()->root_layer()->id()); 1008 scroll_layer_->SetScrollClipLayerId(layer_tree_host()->root_layer()->id());
1038 scroll_layer_->SetBounds(gfx::Size(1000, 1000)); 1009 scroll_layer_->SetBounds(gfx::Size(1000, 1000));
1039 scroll_layer_->SetScrollOffset(gfx::ScrollOffset(10, 20)); 1010 scroll_layer_->SetScrollOffset(gfx::ScrollOffset(10, 20));
1040 layer_tree_host()->root_layer()->AddChild(scroll_layer_); 1011 layer_tree_host()->root_layer()->AddChild(scroll_layer_);
1041 } 1012 }
1042 1013
1043 virtual void BeginTest() override { 1014 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
1044 PostSetNeedsCommitToMainThread();
1045 }
1046 1015
1047 virtual void DidCommit() override { 1016 void DidCommit() override {
1048 switch (layer_tree_host()->source_frame_number()) { 1017 switch (layer_tree_host()->source_frame_number()) {
1049 case 1: { 1018 case 1: {
1050 scoped_ptr<ScrollOffsetAnimationCurve> curve( 1019 scoped_ptr<ScrollOffsetAnimationCurve> curve(
1051 ScrollOffsetAnimationCurve::Create( 1020 ScrollOffsetAnimationCurve::Create(
1052 gfx::ScrollOffset(500.f, 550.f), 1021 gfx::ScrollOffset(500.f, 550.f),
1053 EaseInOutTimingFunction::Create())); 1022 EaseInOutTimingFunction::Create()));
1054 scoped_ptr<Animation> animation( 1023 scoped_ptr<Animation> animation(
1055 Animation::Create(curve.Pass(), 1, 0, Animation::ScrollOffset)); 1024 Animation::Create(curve.Pass(), 1, 0, Animation::ScrollOffset));
1056 animation->set_needs_synchronized_start_time(true); 1025 animation->set_needs_synchronized_start_time(true);
1057 bool animation_added = scroll_layer_->AddAnimation(animation.Pass()); 1026 bool animation_added = scroll_layer_->AddAnimation(animation.Pass());
1058 bool impl_scrolling_supported = 1027 bool impl_scrolling_supported =
1059 layer_tree_host()->proxy()->SupportsImplScrolling(); 1028 layer_tree_host()->proxy()->SupportsImplScrolling();
1060 EXPECT_EQ(impl_scrolling_supported, animation_added); 1029 EXPECT_EQ(impl_scrolling_supported, animation_added);
1061 if (!impl_scrolling_supported) 1030 if (!impl_scrolling_supported)
1062 EndTest(); 1031 EndTest();
1063 break; 1032 break;
1064 } 1033 }
1065 default: 1034 default:
1066 if (scroll_layer_->scroll_offset().x() > 10 && 1035 if (scroll_layer_->scroll_offset().x() > 10 &&
1067 scroll_layer_->scroll_offset().y() > 20) 1036 scroll_layer_->scroll_offset().y() > 20)
1068 EndTest(); 1037 EndTest();
1069 } 1038 }
1070 } 1039 }
1071 1040
1072 virtual void AfterTest() override {} 1041 void AfterTest() override {}
1073 1042
1074 private: 1043 private:
1075 FakeContentLayerClient client_; 1044 FakeContentLayerClient client_;
1076 scoped_refptr<FakeContentLayer> scroll_layer_; 1045 scoped_refptr<FakeContentLayer> scroll_layer_;
1077 }; 1046 };
1078 1047
1079 SINGLE_AND_MULTI_THREAD_TEST_F( 1048 SINGLE_AND_MULTI_THREAD_TEST_F(
1080 LayerTreeHostAnimationTestScrollOffsetChangesArePropagated); 1049 LayerTreeHostAnimationTestScrollOffsetChangesArePropagated);
1081 1050
1082 // When animations are simultaneously added to an existing layer and to a new 1051 // When animations are simultaneously added to an existing layer and to a new
1083 // layer, they should start at the same time, even when there's already a 1052 // layer, they should start at the same time, even when there's already a
1084 // running animation on the existing layer. 1053 // running animation on the existing layer.
1085 class LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers 1054 class LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers
1086 : public LayerTreeHostAnimationTest { 1055 : public LayerTreeHostAnimationTest {
1087 public: 1056 public:
1088 LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers() 1057 LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers()
1089 : frame_count_with_pending_tree_(0) {} 1058 : frame_count_with_pending_tree_(0) {}
1090 1059
1091 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } 1060 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
1092 1061
1093 virtual void DidCommit() override { 1062 void DidCommit() override {
1094 if (layer_tree_host()->source_frame_number() == 1) { 1063 if (layer_tree_host()->source_frame_number() == 1) {
1095 AddAnimatedTransformToLayer(layer_tree_host()->root_layer(), 4, 1, 1); 1064 AddAnimatedTransformToLayer(layer_tree_host()->root_layer(), 4, 1, 1);
1096 } else if (layer_tree_host()->source_frame_number() == 2) { 1065 } else if (layer_tree_host()->source_frame_number() == 2) {
1097 AddOpacityTransitionToLayer( 1066 AddOpacityTransitionToLayer(
1098 layer_tree_host()->root_layer(), 1, 0.f, 0.5f, true); 1067 layer_tree_host()->root_layer(), 1, 0.f, 0.5f, true);
1099 1068
1100 scoped_refptr<Layer> layer = Layer::Create(); 1069 scoped_refptr<Layer> layer = Layer::Create();
1101 layer_tree_host()->root_layer()->AddChild(layer); 1070 layer_tree_host()->root_layer()->AddChild(layer);
1102 layer->set_layer_animation_delegate(this); 1071 layer->set_layer_animation_delegate(this);
1103 layer->SetBounds(gfx::Size(4, 4)); 1072 layer->SetBounds(gfx::Size(4, 4));
1104 AddOpacityTransitionToLayer(layer.get(), 1, 0.f, 0.5f, true); 1073 AddOpacityTransitionToLayer(layer.get(), 1, 0.f, 0.5f, true);
1105 } 1074 }
1106 } 1075 }
1107 1076
1108 virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override { 1077 void BeginCommitOnThread(LayerTreeHostImpl* host_impl) override {
1109 if (host_impl->settings().impl_side_painting) 1078 if (host_impl->settings().impl_side_painting)
1110 host_impl->BlockNotifyReadyToActivateForTesting(true); 1079 host_impl->BlockNotifyReadyToActivateForTesting(true);
1111 } 1080 }
1112 1081
1113 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { 1082 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
1114 // For the commit that added animations to new and existing layers, keep 1083 // For the commit that added animations to new and existing layers, keep
1115 // blocking activation. We want to verify that even with activation blocked, 1084 // blocking activation. We want to verify that even with activation blocked,
1116 // the animation on the layer that's already in the active tree won't get a 1085 // the animation on the layer that's already in the active tree won't get a
1117 // head start. 1086 // head start.
1118 if (host_impl->settings().impl_side_painting && 1087 if (host_impl->settings().impl_side_painting &&
1119 host_impl->pending_tree()->source_frame_number() != 2) { 1088 host_impl->pending_tree()->source_frame_number() != 2) {
1120 host_impl->BlockNotifyReadyToActivateForTesting(false); 1089 host_impl->BlockNotifyReadyToActivateForTesting(false);
1121 } 1090 }
1122 } 1091 }
1123 1092
1124 virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* host_impl, 1093 void WillBeginImplFrameOnThread(LayerTreeHostImpl* host_impl,
1125 const BeginFrameArgs& args) override { 1094 const BeginFrameArgs& args) override {
1126 if (!host_impl->pending_tree() || 1095 if (!host_impl->pending_tree() ||
1127 host_impl->pending_tree()->source_frame_number() != 2) 1096 host_impl->pending_tree()->source_frame_number() != 2)
1128 return; 1097 return;
1129 1098
1130 frame_count_with_pending_tree_++; 1099 frame_count_with_pending_tree_++;
1131 if (frame_count_with_pending_tree_ == 2 && 1100 if (frame_count_with_pending_tree_ == 2 &&
1132 host_impl->settings().impl_side_painting) { 1101 host_impl->settings().impl_side_painting) {
1133 host_impl->BlockNotifyReadyToActivateForTesting(false); 1102 host_impl->BlockNotifyReadyToActivateForTesting(false);
1134 } 1103 }
1135 } 1104 }
1136 1105
1137 virtual void UpdateAnimationState(LayerTreeHostImpl* host_impl, 1106 void UpdateAnimationState(LayerTreeHostImpl* host_impl,
1138 bool has_unfinished_animation) override { 1107 bool has_unfinished_animation) override {
1139 LayerAnimationController* root_controller_impl = 1108 LayerAnimationController* root_controller_impl =
1140 host_impl->active_tree()->root_layer()->layer_animation_controller(); 1109 host_impl->active_tree()->root_layer()->layer_animation_controller();
1141 Animation* root_animation = 1110 Animation* root_animation =
1142 root_controller_impl->GetAnimation(Animation::Opacity); 1111 root_controller_impl->GetAnimation(Animation::Opacity);
1143 if (!root_animation || root_animation->run_state() != Animation::Running) 1112 if (!root_animation || root_animation->run_state() != Animation::Running)
1144 return; 1113 return;
1145 1114
1146 LayerAnimationController* child_controller_impl = 1115 LayerAnimationController* child_controller_impl =
1147 host_impl->active_tree()->root_layer()->children() 1116 host_impl->active_tree()->root_layer()->children()
1148 [0]->layer_animation_controller(); 1117 [0]->layer_animation_controller();
1149 Animation* child_animation = 1118 Animation* child_animation =
1150 child_controller_impl->GetAnimation(Animation::Opacity); 1119 child_controller_impl->GetAnimation(Animation::Opacity);
1151 EXPECT_EQ(Animation::Running, child_animation->run_state()); 1120 EXPECT_EQ(Animation::Running, child_animation->run_state());
1152 EXPECT_EQ(root_animation->start_time(), child_animation->start_time()); 1121 EXPECT_EQ(root_animation->start_time(), child_animation->start_time());
1153 root_controller_impl->AbortAnimations(Animation::Opacity); 1122 root_controller_impl->AbortAnimations(Animation::Opacity);
1154 root_controller_impl->AbortAnimations(Animation::Transform); 1123 root_controller_impl->AbortAnimations(Animation::Transform);
1155 child_controller_impl->AbortAnimations(Animation::Opacity); 1124 child_controller_impl->AbortAnimations(Animation::Opacity);
1156 EndTest(); 1125 EndTest();
1157 } 1126 }
1158 1127
1159 virtual void AfterTest() override {} 1128 void AfterTest() override {}
1160 1129
1161 private: 1130 private:
1162 int frame_count_with_pending_tree_; 1131 int frame_count_with_pending_tree_;
1163 }; 1132 };
1164 1133
1165 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F( 1134 SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F(
1166 LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers); 1135 LayerTreeHostAnimationTestAnimationsAddedToNewAndExistingLayers);
1167 1136
1168 class LayerTreeHostAnimationTestAddAnimationAfterAnimating 1137 class LayerTreeHostAnimationTestAddAnimationAfterAnimating
1169 : public LayerTreeHostAnimationTest { 1138 : public LayerTreeHostAnimationTest {
1170 public: 1139 public:
1171 LayerTreeHostAnimationTestAddAnimationAfterAnimating() 1140 LayerTreeHostAnimationTestAddAnimationAfterAnimating()
1172 : num_swap_buffers_(0) {} 1141 : num_swap_buffers_(0) {}
1173 1142
1174 virtual void SetupTree() override { 1143 void SetupTree() override {
1175 LayerTreeHostAnimationTest::SetupTree(); 1144 LayerTreeHostAnimationTest::SetupTree();
1176 content_ = Layer::Create(); 1145 content_ = Layer::Create();
1177 content_->SetBounds(gfx::Size(4, 4)); 1146 content_->SetBounds(gfx::Size(4, 4));
1178 layer_tree_host()->root_layer()->AddChild(content_); 1147 layer_tree_host()->root_layer()->AddChild(content_);
1179 } 1148 }
1180 1149
1181 virtual void BeginTest() override { PostSetNeedsCommitToMainThread(); } 1150 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
1182 1151
1183 virtual void DidCommit() override { 1152 void DidCommit() override {
1184 switch (layer_tree_host()->source_frame_number()) { 1153 switch (layer_tree_host()->source_frame_number()) {
1185 case 1: 1154 case 1:
1186 // First frame: add an animation to the root layer. 1155 // First frame: add an animation to the root layer.
1187 AddAnimatedTransformToLayer(layer_tree_host()->root_layer(), 0.1, 5, 5); 1156 AddAnimatedTransformToLayer(layer_tree_host()->root_layer(), 0.1, 5, 5);
1188 break; 1157 break;
1189 case 2: 1158 case 2:
1190 // Second frame: add an animation to the content layer. The root layer 1159 // Second frame: add an animation to the content layer. The root layer
1191 // animation has caused us to animate already during this frame. 1160 // animation has caused us to animate already during this frame.
1192 AddOpacityTransitionToLayer(content_.get(), 0.1, 5, 5, false); 1161 AddOpacityTransitionToLayer(content_.get(), 0.1, 5, 5, false);
1193 break; 1162 break;
1194 } 1163 }
1195 } 1164 }
1196 1165
1197 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 1166 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
1198 bool result) override {
1199 // After both animations have started, verify that they have valid 1167 // After both animations have started, verify that they have valid
1200 // start times. 1168 // start times.
1201 num_swap_buffers_++; 1169 num_swap_buffers_++;
1202 AnimationRegistrar::AnimationControllerMap copy = 1170 AnimationRegistrar::AnimationControllerMap copy =
1203 host_impl->animation_registrar()->active_animation_controllers(); 1171 host_impl->animation_registrar()->active_animation_controllers();
1204 if (copy.size() == 2u) { 1172 if (copy.size() == 2u) {
1205 EndTest(); 1173 EndTest();
1206 EXPECT_GE(num_swap_buffers_, 3); 1174 EXPECT_GE(num_swap_buffers_, 3);
1207 for (AnimationRegistrar::AnimationControllerMap::iterator iter = 1175 for (AnimationRegistrar::AnimationControllerMap::iterator iter =
1208 copy.begin(); 1176 copy.begin();
1209 iter != copy.end(); 1177 iter != copy.end();
1210 ++iter) { 1178 ++iter) {
1211 int id = ((*iter).second->id()); 1179 int id = ((*iter).second->id());
1212 if (id == host_impl->RootLayer()->id()) { 1180 if (id == host_impl->RootLayer()->id()) {
1213 Animation* anim = (*iter).second->GetAnimation(Animation::Transform); 1181 Animation* anim = (*iter).second->GetAnimation(Animation::Transform);
1214 EXPECT_GT((anim->start_time() - base::TimeTicks()).InSecondsF(), 0); 1182 EXPECT_GT((anim->start_time() - base::TimeTicks()).InSecondsF(), 0);
1215 } else if (id == host_impl->RootLayer()->children()[0]->id()) { 1183 } else if (id == host_impl->RootLayer()->children()[0]->id()) {
1216 Animation* anim = (*iter).second->GetAnimation(Animation::Opacity); 1184 Animation* anim = (*iter).second->GetAnimation(Animation::Opacity);
1217 EXPECT_GT((anim->start_time() - base::TimeTicks()).InSecondsF(), 0); 1185 EXPECT_GT((anim->start_time() - base::TimeTicks()).InSecondsF(), 0);
1218 } 1186 }
1219 } 1187 }
1220 } 1188 }
1221 } 1189 }
1222 1190
1223 virtual void AfterTest() override {} 1191 void AfterTest() override {}
1224 1192
1225 private: 1193 private:
1226 scoped_refptr<Layer> content_; 1194 scoped_refptr<Layer> content_;
1227 int num_swap_buffers_; 1195 int num_swap_buffers_;
1228 }; 1196 };
1229 1197
1230 SINGLE_AND_MULTI_THREAD_TEST_F( 1198 SINGLE_AND_MULTI_THREAD_TEST_F(
1231 LayerTreeHostAnimationTestAddAnimationAfterAnimating); 1199 LayerTreeHostAnimationTestAddAnimationAfterAnimating);
1232 1200
1233 } // namespace 1201 } // namespace
1234 } // namespace cc 1202 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698