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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 16863005: cc: Add BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@nofrc12
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 EXPECT_TRUE(client.needs_begin_frame()); 159 EXPECT_TRUE(client.needs_begin_frame());
160 client.Reset(); 160 client.Reset();
161 161
162 // FinishCommit should commit 162 // FinishCommit should commit
163 scheduler->FinishCommit(); 163 scheduler->FinishCommit();
164 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 164 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
165 EXPECT_TRUE(client.needs_begin_frame()); 165 EXPECT_TRUE(client.needs_begin_frame());
166 client.Reset(); 166 client.Reset();
167 167
168 // BeginFrame should draw. 168 // BeginFrame should draw.
169 scheduler->BeginFrame(base::TimeTicks::Now()); 169 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
170 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 170 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
171 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 171 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
172 EXPECT_FALSE(client.needs_begin_frame()); 172 EXPECT_FALSE(client.needs_begin_frame());
173 client.Reset(); 173 client.Reset();
174 } 174 }
175 175
176 TEST(SchedulerTest, RequestCommitAfterBeginFrameSentToMainThread) { 176 TEST(SchedulerTest, RequestCommitAfterBeginFrameSentToMainThread) {
177 FakeSchedulerClient client; 177 FakeSchedulerClient client;
178 SchedulerSettings default_scheduler_settings; 178 SchedulerSettings default_scheduler_settings;
179 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 179 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
(...skipping 14 matching lines...) Expand all
194 // Now SetNeedsCommit again. Calling here means we need a second frame. 194 // Now SetNeedsCommit again. Calling here means we need a second frame.
195 scheduler->SetNeedsCommit(); 195 scheduler->SetNeedsCommit();
196 196
197 // Since another commit is needed, FinishCommit should commit, 197 // Since another commit is needed, FinishCommit should commit,
198 // then begin another frame. 198 // then begin another frame.
199 scheduler->FinishCommit(); 199 scheduler->FinishCommit();
200 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 200 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
201 client.Reset(); 201 client.Reset();
202 202
203 // Tick should draw but then begin another frame. 203 // Tick should draw but then begin another frame.
204 scheduler->BeginFrame(base::TimeTicks::Now()); 204 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
205 EXPECT_TRUE(client.needs_begin_frame()); 205 EXPECT_TRUE(client.needs_begin_frame());
206 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 206 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
207 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 2); 207 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 2);
208 client.Reset(); 208 client.Reset();
209 209
210 // Go back to quiescent state and verify we no longer request BeginFrames. 210 // Go back to quiescent state and verify we no longer request BeginFrames.
211 scheduler->FinishCommit(); 211 scheduler->FinishCommit();
212 scheduler->BeginFrame(base::TimeTicks::Now()); 212 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
213 EXPECT_FALSE(client.needs_begin_frame()); 213 EXPECT_FALSE(client.needs_begin_frame());
214 } 214 }
215 215
216 TEST(SchedulerTest, TextureAcquisitionCausesCommitInsteadOfDraw) { 216 TEST(SchedulerTest, TextureAcquisitionCausesCommitInsteadOfDraw) {
217 FakeSchedulerClient client; 217 FakeSchedulerClient client;
218 SchedulerSettings default_scheduler_settings; 218 SchedulerSettings default_scheduler_settings;
219 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 219 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
220 scheduler->SetCanStart(); 220 scheduler->SetCanStart();
221 scheduler->SetVisible(true); 221 scheduler->SetVisible(true);
222 scheduler->SetCanDraw(true); 222 scheduler->SetCanDraw(true);
223 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 223 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
224 224
225 client.Reset(); 225 client.Reset();
226 scheduler->DidCreateAndInitializeOutputSurface(); 226 scheduler->DidCreateAndInitializeOutputSurface();
227 scheduler->SetNeedsRedraw(); 227 scheduler->SetNeedsRedraw();
228 EXPECT_TRUE(scheduler->RedrawPending()); 228 EXPECT_TRUE(scheduler->RedrawPending());
229 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client); 229 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client);
230 EXPECT_TRUE(client.needs_begin_frame()); 230 EXPECT_TRUE(client.needs_begin_frame());
231 231
232 client.Reset(); 232 client.Reset();
233 scheduler->BeginFrame(base::TimeTicks::Now()); 233 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
234 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 234 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
235 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 235 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
236 EXPECT_FALSE(scheduler->RedrawPending()); 236 EXPECT_FALSE(scheduler->RedrawPending());
237 EXPECT_FALSE(client.needs_begin_frame()); 237 EXPECT_FALSE(client.needs_begin_frame());
238 238
239 client.Reset(); 239 client.Reset();
240 scheduler->SetMainThreadNeedsLayerTextures(); 240 scheduler->SetMainThreadNeedsLayerTextures();
241 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread", 241 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread",
242 client, 242 client,
243 0, 243 0,
244 3); 244 3);
245 // A commit was started by SetMainThreadNeedsLayerTextures(). 245 // A commit was started by SetMainThreadNeedsLayerTextures().
246 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 3); 246 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 3);
247 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 2, 3); 247 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 2, 3);
248 248
249 // We should request a BeginFrame in anticipation of a draw. 249 // We should request a BeginFrame in anticipation of a draw.
250 client.Reset(); 250 client.Reset();
251 scheduler->SetNeedsRedraw(); 251 scheduler->SetNeedsRedraw();
252 EXPECT_TRUE(scheduler->RedrawPending()); 252 EXPECT_TRUE(scheduler->RedrawPending());
253 EXPECT_TRUE(client.needs_begin_frame()); 253 EXPECT_TRUE(client.needs_begin_frame());
254 254
255 // No draw happens since the textures are acquired by the main thread. 255 // No draw happens since the textures are acquired by the main thread.
256 client.Reset(); 256 client.Reset();
257 scheduler->BeginFrame(base::TimeTicks::Now()); 257 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
258 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client); 258 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client);
259 EXPECT_TRUE(scheduler->RedrawPending()); 259 EXPECT_TRUE(scheduler->RedrawPending());
260 EXPECT_TRUE(client.needs_begin_frame()); 260 EXPECT_TRUE(client.needs_begin_frame());
261 261
262 // Commit will release the texture. 262 // Commit will release the texture.
263 client.Reset(); 263 client.Reset();
264 scheduler->FinishCommit(); 264 scheduler->FinishCommit();
265 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 265 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
266 EXPECT_TRUE(scheduler->RedrawPending()); 266 EXPECT_TRUE(scheduler->RedrawPending());
267 EXPECT_TRUE(client.needs_begin_frame()); 267 EXPECT_TRUE(client.needs_begin_frame());
268 268
269 // Now we can draw again after the commit happens. 269 // Now we can draw again after the commit happens.
270 client.Reset(); 270 client.Reset();
271 scheduler->BeginFrame(base::TimeTicks::Now()); 271 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
272 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 272 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
273 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 273 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
274 EXPECT_FALSE(scheduler->RedrawPending()); 274 EXPECT_FALSE(scheduler->RedrawPending());
275 EXPECT_FALSE(client.needs_begin_frame()); 275 EXPECT_FALSE(client.needs_begin_frame());
276 client.Reset(); 276 client.Reset();
277 } 277 }
278 278
279 TEST(SchedulerTest, TextureAcquisitionCollision) { 279 TEST(SchedulerTest, TextureAcquisitionCollision) {
280 FakeSchedulerClient client; 280 FakeSchedulerClient client;
281 SchedulerSettings default_scheduler_settings; 281 SchedulerSettings default_scheduler_settings;
(...skipping 26 matching lines...) Expand all
308 EXPECT_TRUE(client.needs_begin_frame()); 308 EXPECT_TRUE(client.needs_begin_frame());
309 client.Reset(); 309 client.Reset();
310 310
311 // Between commit and draw, texture acquisition for main thread delayed, 311 // Between commit and draw, texture acquisition for main thread delayed,
312 // and main thread blocks. 312 // and main thread blocks.
313 scheduler->SetMainThreadNeedsLayerTextures(); 313 scheduler->SetMainThreadNeedsLayerTextures();
314 EXPECT_EQ(0, client.num_actions_()); 314 EXPECT_EQ(0, client.num_actions_());
315 client.Reset(); 315 client.Reset();
316 316
317 // Once compositor draw complete, the delayed texture acquisition fires. 317 // Once compositor draw complete, the delayed texture acquisition fires.
318 scheduler->BeginFrame(base::TimeTicks::Now()); 318 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
319 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 3); 319 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 3);
320 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread", 320 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread",
321 client, 321 client,
322 1, 322 1,
323 3); 323 3);
324 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 2, 3); 324 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 2, 3);
325 client.Reset(); 325 client.Reset();
326 } 326 }
327 327
328 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) { 328 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 scheduler->SetCanStart(); 389 scheduler->SetCanStart();
390 scheduler->SetVisible(true); 390 scheduler->SetVisible(true);
391 scheduler->SetCanDraw(true); 391 scheduler->SetCanDraw(true);
392 scheduler->DidCreateAndInitializeOutputSurface(); 392 scheduler->DidCreateAndInitializeOutputSurface();
393 393
394 scheduler->SetNeedsRedraw(); 394 scheduler->SetNeedsRedraw();
395 EXPECT_TRUE(scheduler->RedrawPending()); 395 EXPECT_TRUE(scheduler->RedrawPending());
396 EXPECT_TRUE(client.needs_begin_frame()); 396 EXPECT_TRUE(client.needs_begin_frame());
397 EXPECT_EQ(0, client.num_draws()); 397 EXPECT_EQ(0, client.num_draws());
398 398
399 scheduler->BeginFrame(base::TimeTicks::Now()); 399 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
400 EXPECT_EQ(1, client.num_draws()); 400 EXPECT_EQ(1, client.num_draws());
401 EXPECT_TRUE(scheduler->RedrawPending()); 401 EXPECT_TRUE(scheduler->RedrawPending());
402 EXPECT_TRUE(client.needs_begin_frame()); 402 EXPECT_TRUE(client.needs_begin_frame());
403 403
404 scheduler->BeginFrame(base::TimeTicks::Now()); 404 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
405 EXPECT_EQ(2, client.num_draws()); 405 EXPECT_EQ(2, client.num_draws());
406 EXPECT_FALSE(scheduler->RedrawPending()); 406 EXPECT_FALSE(scheduler->RedrawPending());
407 EXPECT_FALSE(client.needs_begin_frame()); 407 EXPECT_FALSE(client.needs_begin_frame());
408 } 408 }
409 409
410 // Test that requesting redraw inside a failed draw doesn't lose the request. 410 // Test that requesting redraw inside a failed draw doesn't lose the request.
411 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) { 411 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
412 SchedulerClientThatsetNeedsDrawInsideDraw client; 412 SchedulerClientThatsetNeedsDrawInsideDraw client;
413 SchedulerSettings default_scheduler_settings; 413 SchedulerSettings default_scheduler_settings;
414 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 414 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
415 scheduler->SetCanStart(); 415 scheduler->SetCanStart();
416 scheduler->SetVisible(true); 416 scheduler->SetVisible(true);
417 scheduler->SetCanDraw(true); 417 scheduler->SetCanDraw(true);
418 scheduler->DidCreateAndInitializeOutputSurface(); 418 scheduler->DidCreateAndInitializeOutputSurface();
419 419
420 client.SetDrawWillHappen(false); 420 client.SetDrawWillHappen(false);
421 421
422 scheduler->SetNeedsRedraw(); 422 scheduler->SetNeedsRedraw();
423 EXPECT_TRUE(scheduler->RedrawPending()); 423 EXPECT_TRUE(scheduler->RedrawPending());
424 EXPECT_TRUE(client.needs_begin_frame()); 424 EXPECT_TRUE(client.needs_begin_frame());
425 EXPECT_EQ(0, client.num_draws()); 425 EXPECT_EQ(0, client.num_draws());
426 426
427 // Fail the draw. 427 // Fail the draw.
428 scheduler->BeginFrame(base::TimeTicks::Now()); 428 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
429 EXPECT_EQ(1, client.num_draws()); 429 EXPECT_EQ(1, client.num_draws());
430 430
431 // We have a commit pending and the draw failed, and we didn't lose the redraw 431 // We have a commit pending and the draw failed, and we didn't lose the redraw
432 // request. 432 // request.
433 EXPECT_TRUE(scheduler->CommitPending()); 433 EXPECT_TRUE(scheduler->CommitPending());
434 EXPECT_TRUE(scheduler->RedrawPending()); 434 EXPECT_TRUE(scheduler->RedrawPending());
435 EXPECT_TRUE(client.needs_begin_frame()); 435 EXPECT_TRUE(client.needs_begin_frame());
436 436
437 // Fail the draw again. 437 // Fail the draw again.
438 scheduler->BeginFrame(base::TimeTicks::Now()); 438 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
439 EXPECT_EQ(2, client.num_draws()); 439 EXPECT_EQ(2, client.num_draws());
440 EXPECT_TRUE(scheduler->CommitPending()); 440 EXPECT_TRUE(scheduler->CommitPending());
441 EXPECT_TRUE(scheduler->RedrawPending()); 441 EXPECT_TRUE(scheduler->RedrawPending());
442 EXPECT_TRUE(client.needs_begin_frame()); 442 EXPECT_TRUE(client.needs_begin_frame());
443 443
444 // Draw successfully. 444 // Draw successfully.
445 client.SetDrawWillHappen(true); 445 client.SetDrawWillHappen(true);
446 scheduler->BeginFrame(base::TimeTicks::Now()); 446 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
447 EXPECT_EQ(3, client.num_draws()); 447 EXPECT_EQ(3, client.num_draws());
448 EXPECT_TRUE(scheduler->CommitPending()); 448 EXPECT_TRUE(scheduler->CommitPending());
449 EXPECT_FALSE(scheduler->RedrawPending()); 449 EXPECT_FALSE(scheduler->RedrawPending());
450 EXPECT_TRUE(client.needs_begin_frame()); 450 EXPECT_TRUE(client.needs_begin_frame());
451 } 451 }
452 452
453 class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient { 453 class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient {
454 public: 454 public:
455 virtual void ScheduledActionSendBeginFrameToMainThread() OVERRIDE {} 455 virtual void ScheduledActionSendBeginFrameToMainThread() OVERRIDE {}
456 virtual ScheduledActionDrawAndSwapResult 456 virtual ScheduledActionDrawAndSwapResult
(...skipping 24 matching lines...) Expand all
481 scheduler->SetCanStart(); 481 scheduler->SetCanStart();
482 scheduler->SetVisible(true); 482 scheduler->SetVisible(true);
483 scheduler->SetCanDraw(true); 483 scheduler->SetCanDraw(true);
484 scheduler->DidCreateAndInitializeOutputSurface(); 484 scheduler->DidCreateAndInitializeOutputSurface();
485 485
486 scheduler->SetNeedsRedraw(); 486 scheduler->SetNeedsRedraw();
487 EXPECT_TRUE(scheduler->RedrawPending()); 487 EXPECT_TRUE(scheduler->RedrawPending());
488 EXPECT_EQ(0, client.num_draws()); 488 EXPECT_EQ(0, client.num_draws());
489 EXPECT_TRUE(client.needs_begin_frame()); 489 EXPECT_TRUE(client.needs_begin_frame());
490 490
491 scheduler->BeginFrame(base::TimeTicks::Now()); 491 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
492 EXPECT_EQ(1, client.num_draws()); 492 EXPECT_EQ(1, client.num_draws());
493 EXPECT_TRUE(scheduler->CommitPending()); 493 EXPECT_TRUE(scheduler->CommitPending());
494 EXPECT_TRUE(client.needs_begin_frame()); 494 EXPECT_TRUE(client.needs_begin_frame());
495 scheduler->FinishCommit(); 495 scheduler->FinishCommit();
496 496
497 scheduler->BeginFrame(base::TimeTicks::Now()); 497 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
498 EXPECT_EQ(2, client.num_draws());; 498 EXPECT_EQ(2, client.num_draws());;
499 EXPECT_FALSE(scheduler->RedrawPending()); 499 EXPECT_FALSE(scheduler->RedrawPending());
500 EXPECT_FALSE(scheduler->CommitPending()); 500 EXPECT_FALSE(scheduler->CommitPending());
501 EXPECT_FALSE(client.needs_begin_frame()); 501 EXPECT_FALSE(client.needs_begin_frame());
502 } 502 }
503 503
504 // Tests that when a draw fails then the pending commit should not be dropped. 504 // Tests that when a draw fails then the pending commit should not be dropped.
505 TEST(SchedulerTest, RequestCommitInsideFailedDraw) { 505 TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
506 SchedulerClientThatsetNeedsDrawInsideDraw client; 506 SchedulerClientThatsetNeedsDrawInsideDraw client;
507 SchedulerSettings default_scheduler_settings; 507 SchedulerSettings default_scheduler_settings;
508 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 508 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
509 scheduler->SetCanStart(); 509 scheduler->SetCanStart();
510 scheduler->SetVisible(true); 510 scheduler->SetVisible(true);
511 scheduler->SetCanDraw(true); 511 scheduler->SetCanDraw(true);
512 scheduler->DidCreateAndInitializeOutputSurface(); 512 scheduler->DidCreateAndInitializeOutputSurface();
513 513
514 client.SetDrawWillHappen(false); 514 client.SetDrawWillHappen(false);
515 515
516 scheduler->SetNeedsRedraw(); 516 scheduler->SetNeedsRedraw();
517 EXPECT_TRUE(scheduler->RedrawPending()); 517 EXPECT_TRUE(scheduler->RedrawPending());
518 EXPECT_TRUE(client.needs_begin_frame()); 518 EXPECT_TRUE(client.needs_begin_frame());
519 EXPECT_EQ(0, client.num_draws()); 519 EXPECT_EQ(0, client.num_draws());
520 520
521 // Fail the draw. 521 // Fail the draw.
522 scheduler->BeginFrame(base::TimeTicks::Now()); 522 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
523 EXPECT_EQ(1, client.num_draws()); 523 EXPECT_EQ(1, client.num_draws());
524 524
525 // We have a commit pending and the draw failed, and we didn't lose the commit 525 // We have a commit pending and the draw failed, and we didn't lose the commit
526 // request. 526 // request.
527 EXPECT_TRUE(scheduler->CommitPending()); 527 EXPECT_TRUE(scheduler->CommitPending());
528 EXPECT_TRUE(scheduler->RedrawPending()); 528 EXPECT_TRUE(scheduler->RedrawPending());
529 EXPECT_TRUE(client.needs_begin_frame()); 529 EXPECT_TRUE(client.needs_begin_frame());
530 530
531 // Fail the draw again. 531 // Fail the draw again.
532 scheduler->BeginFrame(base::TimeTicks::Now()); 532 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
533 EXPECT_EQ(2, client.num_draws()); 533 EXPECT_EQ(2, client.num_draws());
534 EXPECT_TRUE(scheduler->CommitPending()); 534 EXPECT_TRUE(scheduler->CommitPending());
535 EXPECT_TRUE(scheduler->RedrawPending()); 535 EXPECT_TRUE(scheduler->RedrawPending());
536 EXPECT_TRUE(client.needs_begin_frame()); 536 EXPECT_TRUE(client.needs_begin_frame());
537 537
538 // Draw successfully. 538 // Draw successfully.
539 client.SetDrawWillHappen(true); 539 client.SetDrawWillHappen(true);
540 scheduler->BeginFrame(base::TimeTicks::Now()); 540 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
541 EXPECT_EQ(3, client.num_draws()); 541 EXPECT_EQ(3, client.num_draws());
542 EXPECT_TRUE(scheduler->CommitPending()); 542 EXPECT_TRUE(scheduler->CommitPending());
543 EXPECT_FALSE(scheduler->RedrawPending()); 543 EXPECT_FALSE(scheduler->RedrawPending());
544 EXPECT_TRUE(client.needs_begin_frame()); 544 EXPECT_TRUE(client.needs_begin_frame());
545 } 545 }
546 546
547 TEST(SchedulerTest, NoSwapWhenDrawFails) { 547 TEST(SchedulerTest, NoSwapWhenDrawFails) {
548 SchedulerClientThatsetNeedsCommitInsideDraw client; 548 SchedulerClientThatsetNeedsCommitInsideDraw client;
549 SchedulerSettings default_scheduler_settings; 549 SchedulerSettings default_scheduler_settings;
550 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 550 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
551 scheduler->SetCanStart(); 551 scheduler->SetCanStart();
552 scheduler->SetVisible(true); 552 scheduler->SetVisible(true);
553 scheduler->SetCanDraw(true); 553 scheduler->SetCanDraw(true);
554 scheduler->DidCreateAndInitializeOutputSurface(); 554 scheduler->DidCreateAndInitializeOutputSurface();
555 555
556 scheduler->SetNeedsRedraw(); 556 scheduler->SetNeedsRedraw();
557 EXPECT_TRUE(scheduler->RedrawPending()); 557 EXPECT_TRUE(scheduler->RedrawPending());
558 EXPECT_TRUE(client.needs_begin_frame()); 558 EXPECT_TRUE(client.needs_begin_frame());
559 EXPECT_EQ(0, client.num_draws()); 559 EXPECT_EQ(0, client.num_draws());
560 560
561 // Draw successfully, this starts a new frame. 561 // Draw successfully, this starts a new frame.
562 scheduler->BeginFrame(base::TimeTicks::Now()); 562 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
563 EXPECT_EQ(1, client.num_draws()); 563 EXPECT_EQ(1, client.num_draws());
564 564
565 scheduler->SetNeedsRedraw(); 565 scheduler->SetNeedsRedraw();
566 EXPECT_TRUE(scheduler->RedrawPending()); 566 EXPECT_TRUE(scheduler->RedrawPending());
567 EXPECT_TRUE(client.needs_begin_frame()); 567 EXPECT_TRUE(client.needs_begin_frame());
568 568
569 // Fail to draw, this should not start a frame. 569 // Fail to draw, this should not start a frame.
570 client.SetDrawWillHappen(false); 570 client.SetDrawWillHappen(false);
571 scheduler->BeginFrame(base::TimeTicks::Now()); 571 scheduler->BeginFrame(BeginFrameArgs::CreateBeginFrameForTesting());
572 EXPECT_EQ(2, client.num_draws()); 572 EXPECT_EQ(2, client.num_draws());
573 } 573 }
574 574
575 TEST(SchedulerTest, NoSwapWhenSwapFailsDuringForcedCommit) { 575 TEST(SchedulerTest, NoSwapWhenSwapFailsDuringForcedCommit) {
576 FakeSchedulerClient client; 576 FakeSchedulerClient client;
577 SchedulerSettings default_scheduler_settings; 577 SchedulerSettings default_scheduler_settings;
578 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 578 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
579 579
580 // Tell the client that it will fail to swap. 580 // Tell the client that it will fail to swap.
581 client.SetDrawWillHappen(true); 581 client.SetDrawWillHappen(true);
582 client.SetSwapWillHappenIfDrawHappens(false); 582 client.SetSwapWillHappenIfDrawHappens(false);
583 583
584 // Get the compositor to do a ScheduledActionDrawAndSwapForced. 584 // Get the compositor to do a ScheduledActionDrawAndSwapForced.
585 scheduler->SetCanDraw(true); 585 scheduler->SetCanDraw(true);
586 scheduler->SetNeedsRedraw(); 586 scheduler->SetNeedsRedraw();
587 scheduler->SetNeedsForcedRedraw(); 587 scheduler->SetNeedsForcedRedraw();
588 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapForced")); 588 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapForced"));
589 } 589 }
590 590
591 } // namespace 591 } // namespace
592 } // namespace cc 592 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698