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

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

Issue 17391006: cc: Add BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 client.Reset(); 163 client.Reset();
164 164
165 // FinishCommit should commit 165 // FinishCommit should commit
166 scheduler->FinishCommit(); 166 scheduler->FinishCommit();
167 EXPECT_ACTION("ScheduledActionCommit", client, 0, 2); 167 EXPECT_ACTION("ScheduledActionCommit", client, 0, 2);
168 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 168 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
169 EXPECT_TRUE(client.needs_begin_frame()); 169 EXPECT_TRUE(client.needs_begin_frame());
170 client.Reset(); 170 client.Reset();
171 171
172 // BeginFrame should draw. 172 // BeginFrame should draw.
173 scheduler->BeginFrame(base::TimeTicks::Now()); 173 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
174 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 174 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
175 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 175 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
176 EXPECT_FALSE(client.needs_begin_frame()); 176 EXPECT_FALSE(client.needs_begin_frame());
177 client.Reset(); 177 client.Reset();
178 } 178 }
179 179
180 TEST(SchedulerTest, RequestCommitAfterBeginFrameSentToMainThread) { 180 TEST(SchedulerTest, RequestCommitAfterBeginFrameSentToMainThread) {
181 FakeSchedulerClient client; 181 FakeSchedulerClient client;
182 SchedulerSettings default_scheduler_settings; 182 SchedulerSettings default_scheduler_settings;
183 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 183 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
(...skipping 17 matching lines...) Expand all
201 client.Reset(); 201 client.Reset();
202 202
203 // Since another commit is needed, FinishCommit should commit, 203 // Since another commit is needed, FinishCommit should commit,
204 // then begin another frame. 204 // then begin another frame.
205 scheduler->FinishCommit(); 205 scheduler->FinishCommit();
206 EXPECT_ACTION("ScheduledActionCommit", client, 0, 2); 206 EXPECT_ACTION("ScheduledActionCommit", client, 0, 2);
207 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 207 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
208 client.Reset(); 208 client.Reset();
209 209
210 // Tick should draw but then begin another frame. 210 // Tick should draw but then begin another frame.
211 scheduler->BeginFrame(base::TimeTicks::Now()); 211 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
212 EXPECT_TRUE(client.needs_begin_frame()); 212 EXPECT_TRUE(client.needs_begin_frame());
213 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 213 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
214 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 2); 214 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 2);
215 client.Reset(); 215 client.Reset();
216 216
217 // Go back to quiescent state and verify we no longer request BeginFrames. 217 // Go back to quiescent state and verify we no longer request BeginFrames.
218 scheduler->FinishCommit(); 218 scheduler->FinishCommit();
219 scheduler->BeginFrame(base::TimeTicks::Now()); 219 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
220 EXPECT_FALSE(client.needs_begin_frame()); 220 EXPECT_FALSE(client.needs_begin_frame());
221 } 221 }
222 222
223 TEST(SchedulerTest, TextureAcquisitionCausesCommitInsteadOfDraw) { 223 TEST(SchedulerTest, TextureAcquisitionCausesCommitInsteadOfDraw) {
224 FakeSchedulerClient client; 224 FakeSchedulerClient client;
225 SchedulerSettings default_scheduler_settings; 225 SchedulerSettings default_scheduler_settings;
226 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 226 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
227 scheduler->SetCanStart(); 227 scheduler->SetCanStart();
228 scheduler->SetVisible(true); 228 scheduler->SetVisible(true);
229 scheduler->SetCanDraw(true); 229 scheduler->SetCanDraw(true);
230 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 230 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
231 231
232 client.Reset(); 232 client.Reset();
233 scheduler->DidCreateAndInitializeOutputSurface(); 233 scheduler->DidCreateAndInitializeOutputSurface();
234 scheduler->SetNeedsRedraw(); 234 scheduler->SetNeedsRedraw();
235 EXPECT_TRUE(scheduler->RedrawPending()); 235 EXPECT_TRUE(scheduler->RedrawPending());
236 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client); 236 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client);
237 EXPECT_TRUE(client.needs_begin_frame()); 237 EXPECT_TRUE(client.needs_begin_frame());
238 238
239 client.Reset(); 239 client.Reset();
240 scheduler->BeginFrame(base::TimeTicks::Now()); 240 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
241 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 241 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
242 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 242 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
243 EXPECT_FALSE(scheduler->RedrawPending()); 243 EXPECT_FALSE(scheduler->RedrawPending());
244 EXPECT_FALSE(client.needs_begin_frame()); 244 EXPECT_FALSE(client.needs_begin_frame());
245 245
246 client.Reset(); 246 client.Reset();
247 scheduler->SetMainThreadNeedsLayerTextures(); 247 scheduler->SetMainThreadNeedsLayerTextures();
248 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread", 248 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread",
249 client, 249 client,
250 0, 250 0,
251 3); 251 3);
252 // A commit was started by SetMainThreadNeedsLayerTextures(). 252 // A commit was started by SetMainThreadNeedsLayerTextures().
253 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 3); 253 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 1, 3);
254 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 2, 3); 254 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 2, 3);
255 255
256 // We should request a BeginFrame in anticipation of a draw. 256 // We should request a BeginFrame in anticipation of a draw.
257 client.Reset(); 257 client.Reset();
258 scheduler->SetNeedsRedraw(); 258 scheduler->SetNeedsRedraw();
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 // No draw happens since the textures are acquired by the main thread. 262 // No draw happens since the textures are acquired by the main thread.
263 client.Reset(); 263 client.Reset();
264 scheduler->BeginFrame(base::TimeTicks::Now()); 264 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
265 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", client); 265 EXPECT_SINGLE_ACTION("SetNeedsBeginFrameOnImplThread", 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 // Commit will release the texture. 269 // Commit will release the texture.
270 client.Reset(); 270 client.Reset();
271 scheduler->FinishCommit(); 271 scheduler->FinishCommit();
272 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 272 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
273 EXPECT_TRUE(scheduler->RedrawPending()); 273 EXPECT_TRUE(scheduler->RedrawPending());
274 EXPECT_TRUE(client.needs_begin_frame()); 274 EXPECT_TRUE(client.needs_begin_frame());
275 275
276 // Now we can draw again after the commit happens. 276 // Now we can draw again after the commit happens.
277 client.Reset(); 277 client.Reset();
278 scheduler->BeginFrame(base::TimeTicks::Now()); 278 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
279 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2); 279 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
280 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2); 280 EXPECT_ACTION("SetNeedsBeginFrameOnImplThread", client, 1, 2);
281 EXPECT_FALSE(scheduler->RedrawPending()); 281 EXPECT_FALSE(scheduler->RedrawPending());
282 EXPECT_FALSE(client.needs_begin_frame()); 282 EXPECT_FALSE(client.needs_begin_frame());
283 client.Reset(); 283 client.Reset();
284 } 284 }
285 285
286 TEST(SchedulerTest, TextureAcquisitionCollision) { 286 TEST(SchedulerTest, TextureAcquisitionCollision) {
287 FakeSchedulerClient client; 287 FakeSchedulerClient client;
288 SchedulerSettings default_scheduler_settings; 288 SchedulerSettings default_scheduler_settings;
(...skipping 27 matching lines...) Expand all
316 EXPECT_TRUE(client.needs_begin_frame()); 316 EXPECT_TRUE(client.needs_begin_frame());
317 client.Reset(); 317 client.Reset();
318 318
319 // Between commit and draw, texture acquisition for main thread delayed, 319 // Between commit and draw, texture acquisition for main thread delayed,
320 // and main thread blocks. 320 // and main thread blocks.
321 scheduler->SetMainThreadNeedsLayerTextures(); 321 scheduler->SetMainThreadNeedsLayerTextures();
322 EXPECT_EQ(0, client.num_actions_()); 322 EXPECT_EQ(0, client.num_actions_());
323 client.Reset(); 323 client.Reset();
324 324
325 // Once compositor draw complete, the delayed texture acquisition fires. 325 // Once compositor draw complete, the delayed texture acquisition fires.
326 scheduler->BeginFrame(base::TimeTicks::Now()); 326 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
327 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 3); 327 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 3);
328 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread", 328 EXPECT_ACTION("ScheduledActionAcquireLayerTexturesForMainThread",
329 client, 329 client,
330 1, 330 1,
331 3); 331 3);
332 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 2, 3); 332 EXPECT_ACTION("ScheduledActionSendBeginFrameToMainThread", client, 2, 3);
333 client.Reset(); 333 client.Reset();
334 } 334 }
335 335
336 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) { 336 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 scheduler->SetCanStart(); 397 scheduler->SetCanStart();
398 scheduler->SetVisible(true); 398 scheduler->SetVisible(true);
399 scheduler->SetCanDraw(true); 399 scheduler->SetCanDraw(true);
400 scheduler->DidCreateAndInitializeOutputSurface(); 400 scheduler->DidCreateAndInitializeOutputSurface();
401 401
402 scheduler->SetNeedsRedraw(); 402 scheduler->SetNeedsRedraw();
403 EXPECT_TRUE(scheduler->RedrawPending()); 403 EXPECT_TRUE(scheduler->RedrawPending());
404 EXPECT_TRUE(client.needs_begin_frame()); 404 EXPECT_TRUE(client.needs_begin_frame());
405 EXPECT_EQ(0, client.num_draws()); 405 EXPECT_EQ(0, client.num_draws());
406 406
407 scheduler->BeginFrame(base::TimeTicks::Now()); 407 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
408 EXPECT_EQ(1, client.num_draws()); 408 EXPECT_EQ(1, client.num_draws());
409 EXPECT_TRUE(scheduler->RedrawPending()); 409 EXPECT_TRUE(scheduler->RedrawPending());
410 EXPECT_TRUE(client.needs_begin_frame()); 410 EXPECT_TRUE(client.needs_begin_frame());
411 411
412 scheduler->BeginFrame(base::TimeTicks::Now()); 412 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
413 EXPECT_EQ(2, client.num_draws()); 413 EXPECT_EQ(2, client.num_draws());
414 EXPECT_FALSE(scheduler->RedrawPending()); 414 EXPECT_FALSE(scheduler->RedrawPending());
415 EXPECT_FALSE(client.needs_begin_frame()); 415 EXPECT_FALSE(client.needs_begin_frame());
416 } 416 }
417 417
418 // Test that requesting redraw inside a failed draw doesn't lose the request. 418 // Test that requesting redraw inside a failed draw doesn't lose the request.
419 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) { 419 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
420 SchedulerClientThatsetNeedsDrawInsideDraw client; 420 SchedulerClientThatsetNeedsDrawInsideDraw client;
421 SchedulerSettings default_scheduler_settings; 421 SchedulerSettings default_scheduler_settings;
422 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 422 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
423 scheduler->SetCanStart(); 423 scheduler->SetCanStart();
424 scheduler->SetVisible(true); 424 scheduler->SetVisible(true);
425 scheduler->SetCanDraw(true); 425 scheduler->SetCanDraw(true);
426 scheduler->DidCreateAndInitializeOutputSurface(); 426 scheduler->DidCreateAndInitializeOutputSurface();
427 427
428 client.SetDrawWillHappen(false); 428 client.SetDrawWillHappen(false);
429 429
430 scheduler->SetNeedsRedraw(); 430 scheduler->SetNeedsRedraw();
431 EXPECT_TRUE(scheduler->RedrawPending()); 431 EXPECT_TRUE(scheduler->RedrawPending());
432 EXPECT_TRUE(client.needs_begin_frame()); 432 EXPECT_TRUE(client.needs_begin_frame());
433 EXPECT_EQ(0, client.num_draws()); 433 EXPECT_EQ(0, client.num_draws());
434 434
435 // Fail the draw. 435 // Fail the draw.
436 scheduler->BeginFrame(base::TimeTicks::Now()); 436 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
437 EXPECT_EQ(1, client.num_draws()); 437 EXPECT_EQ(1, client.num_draws());
438 438
439 // We have a commit pending and the draw failed, and we didn't lose the redraw 439 // We have a commit pending and the draw failed, and we didn't lose the redraw
440 // request. 440 // request.
441 EXPECT_TRUE(scheduler->CommitPending()); 441 EXPECT_TRUE(scheduler->CommitPending());
442 EXPECT_TRUE(scheduler->RedrawPending()); 442 EXPECT_TRUE(scheduler->RedrawPending());
443 EXPECT_TRUE(client.needs_begin_frame()); 443 EXPECT_TRUE(client.needs_begin_frame());
444 444
445 // Fail the draw again. 445 // Fail the draw again.
446 scheduler->BeginFrame(base::TimeTicks::Now()); 446 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
447 EXPECT_EQ(2, client.num_draws()); 447 EXPECT_EQ(2, client.num_draws());
448 EXPECT_TRUE(scheduler->CommitPending()); 448 EXPECT_TRUE(scheduler->CommitPending());
449 EXPECT_TRUE(scheduler->RedrawPending()); 449 EXPECT_TRUE(scheduler->RedrawPending());
450 EXPECT_TRUE(client.needs_begin_frame()); 450 EXPECT_TRUE(client.needs_begin_frame());
451 451
452 // Draw successfully. 452 // Draw successfully.
453 client.SetDrawWillHappen(true); 453 client.SetDrawWillHappen(true);
454 scheduler->BeginFrame(base::TimeTicks::Now()); 454 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
455 EXPECT_EQ(3, client.num_draws()); 455 EXPECT_EQ(3, client.num_draws());
456 EXPECT_TRUE(scheduler->CommitPending()); 456 EXPECT_TRUE(scheduler->CommitPending());
457 EXPECT_FALSE(scheduler->RedrawPending()); 457 EXPECT_FALSE(scheduler->RedrawPending());
458 EXPECT_TRUE(client.needs_begin_frame()); 458 EXPECT_TRUE(client.needs_begin_frame());
459 } 459 }
460 460
461 class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient { 461 class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient {
462 public: 462 public:
463 virtual void ScheduledActionSendBeginFrameToMainThread() OVERRIDE {} 463 virtual void ScheduledActionSendBeginFrameToMainThread() OVERRIDE {}
464 virtual ScheduledActionDrawAndSwapResult 464 virtual ScheduledActionDrawAndSwapResult
(...skipping 24 matching lines...) Expand all
489 scheduler->SetCanStart(); 489 scheduler->SetCanStart();
490 scheduler->SetVisible(true); 490 scheduler->SetVisible(true);
491 scheduler->SetCanDraw(true); 491 scheduler->SetCanDraw(true);
492 scheduler->DidCreateAndInitializeOutputSurface(); 492 scheduler->DidCreateAndInitializeOutputSurface();
493 493
494 scheduler->SetNeedsRedraw(); 494 scheduler->SetNeedsRedraw();
495 EXPECT_TRUE(scheduler->RedrawPending()); 495 EXPECT_TRUE(scheduler->RedrawPending());
496 EXPECT_EQ(0, client.num_draws()); 496 EXPECT_EQ(0, client.num_draws());
497 EXPECT_TRUE(client.needs_begin_frame()); 497 EXPECT_TRUE(client.needs_begin_frame());
498 498
499 scheduler->BeginFrame(base::TimeTicks::Now()); 499 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
500 EXPECT_EQ(1, client.num_draws()); 500 EXPECT_EQ(1, client.num_draws());
501 EXPECT_TRUE(scheduler->CommitPending()); 501 EXPECT_TRUE(scheduler->CommitPending());
502 EXPECT_TRUE(client.needs_begin_frame()); 502 EXPECT_TRUE(client.needs_begin_frame());
503 scheduler->FinishCommit(); 503 scheduler->FinishCommit();
504 504
505 scheduler->BeginFrame(base::TimeTicks::Now()); 505 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
506 EXPECT_EQ(2, client.num_draws());; 506 EXPECT_EQ(2, client.num_draws());;
507 EXPECT_FALSE(scheduler->RedrawPending()); 507 EXPECT_FALSE(scheduler->RedrawPending());
508 EXPECT_FALSE(scheduler->CommitPending()); 508 EXPECT_FALSE(scheduler->CommitPending());
509 EXPECT_FALSE(client.needs_begin_frame()); 509 EXPECT_FALSE(client.needs_begin_frame());
510 } 510 }
511 511
512 // Tests that when a draw fails then the pending commit should not be dropped. 512 // Tests that when a draw fails then the pending commit should not be dropped.
513 TEST(SchedulerTest, RequestCommitInsideFailedDraw) { 513 TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
514 SchedulerClientThatsetNeedsDrawInsideDraw client; 514 SchedulerClientThatsetNeedsDrawInsideDraw client;
515 SchedulerSettings default_scheduler_settings; 515 SchedulerSettings default_scheduler_settings;
516 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 516 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
517 scheduler->SetCanStart(); 517 scheduler->SetCanStart();
518 scheduler->SetVisible(true); 518 scheduler->SetVisible(true);
519 scheduler->SetCanDraw(true); 519 scheduler->SetCanDraw(true);
520 scheduler->DidCreateAndInitializeOutputSurface(); 520 scheduler->DidCreateAndInitializeOutputSurface();
521 521
522 client.SetDrawWillHappen(false); 522 client.SetDrawWillHappen(false);
523 523
524 scheduler->SetNeedsRedraw(); 524 scheduler->SetNeedsRedraw();
525 EXPECT_TRUE(scheduler->RedrawPending()); 525 EXPECT_TRUE(scheduler->RedrawPending());
526 EXPECT_TRUE(client.needs_begin_frame()); 526 EXPECT_TRUE(client.needs_begin_frame());
527 EXPECT_EQ(0, client.num_draws()); 527 EXPECT_EQ(0, client.num_draws());
528 528
529 // Fail the draw. 529 // Fail the draw.
530 scheduler->BeginFrame(base::TimeTicks::Now()); 530 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
531 EXPECT_EQ(1, client.num_draws()); 531 EXPECT_EQ(1, client.num_draws());
532 532
533 // We have a commit pending and the draw failed, and we didn't lose the commit 533 // We have a commit pending and the draw failed, and we didn't lose the commit
534 // request. 534 // request.
535 EXPECT_TRUE(scheduler->CommitPending()); 535 EXPECT_TRUE(scheduler->CommitPending());
536 EXPECT_TRUE(scheduler->RedrawPending()); 536 EXPECT_TRUE(scheduler->RedrawPending());
537 EXPECT_TRUE(client.needs_begin_frame()); 537 EXPECT_TRUE(client.needs_begin_frame());
538 538
539 // Fail the draw again. 539 // Fail the draw again.
540 scheduler->BeginFrame(base::TimeTicks::Now()); 540 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
541 EXPECT_EQ(2, client.num_draws()); 541 EXPECT_EQ(2, client.num_draws());
542 EXPECT_TRUE(scheduler->CommitPending()); 542 EXPECT_TRUE(scheduler->CommitPending());
543 EXPECT_TRUE(scheduler->RedrawPending()); 543 EXPECT_TRUE(scheduler->RedrawPending());
544 EXPECT_TRUE(client.needs_begin_frame()); 544 EXPECT_TRUE(client.needs_begin_frame());
545 545
546 // Draw successfully. 546 // Draw successfully.
547 client.SetDrawWillHappen(true); 547 client.SetDrawWillHappen(true);
548 scheduler->BeginFrame(base::TimeTicks::Now()); 548 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
549 EXPECT_EQ(3, client.num_draws()); 549 EXPECT_EQ(3, client.num_draws());
550 EXPECT_TRUE(scheduler->CommitPending()); 550 EXPECT_TRUE(scheduler->CommitPending());
551 EXPECT_FALSE(scheduler->RedrawPending()); 551 EXPECT_FALSE(scheduler->RedrawPending());
552 EXPECT_TRUE(client.needs_begin_frame()); 552 EXPECT_TRUE(client.needs_begin_frame());
553 } 553 }
554 554
555 TEST(SchedulerTest, NoSwapWhenDrawFails) { 555 TEST(SchedulerTest, NoSwapWhenDrawFails) {
556 SchedulerClientThatsetNeedsCommitInsideDraw client; 556 SchedulerClientThatsetNeedsCommitInsideDraw client;
557 SchedulerSettings default_scheduler_settings; 557 SchedulerSettings default_scheduler_settings;
558 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 558 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
559 scheduler->SetCanStart(); 559 scheduler->SetCanStart();
560 scheduler->SetVisible(true); 560 scheduler->SetVisible(true);
561 scheduler->SetCanDraw(true); 561 scheduler->SetCanDraw(true);
562 scheduler->DidCreateAndInitializeOutputSurface(); 562 scheduler->DidCreateAndInitializeOutputSurface();
563 563
564 scheduler->SetNeedsRedraw(); 564 scheduler->SetNeedsRedraw();
565 EXPECT_TRUE(scheduler->RedrawPending()); 565 EXPECT_TRUE(scheduler->RedrawPending());
566 EXPECT_TRUE(client.needs_begin_frame()); 566 EXPECT_TRUE(client.needs_begin_frame());
567 EXPECT_EQ(0, client.num_draws()); 567 EXPECT_EQ(0, client.num_draws());
568 568
569 // Draw successfully, this starts a new frame. 569 // Draw successfully, this starts a new frame.
570 scheduler->BeginFrame(base::TimeTicks::Now()); 570 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
571 EXPECT_EQ(1, client.num_draws()); 571 EXPECT_EQ(1, client.num_draws());
572 572
573 scheduler->SetNeedsRedraw(); 573 scheduler->SetNeedsRedraw();
574 EXPECT_TRUE(scheduler->RedrawPending()); 574 EXPECT_TRUE(scheduler->RedrawPending());
575 EXPECT_TRUE(client.needs_begin_frame()); 575 EXPECT_TRUE(client.needs_begin_frame());
576 576
577 // Fail to draw, this should not start a frame. 577 // Fail to draw, this should not start a frame.
578 client.SetDrawWillHappen(false); 578 client.SetDrawWillHappen(false);
579 scheduler->BeginFrame(base::TimeTicks::Now()); 579 scheduler->BeginFrame(BeginFrameArgs::CreateForTesting());
580 EXPECT_EQ(2, client.num_draws()); 580 EXPECT_EQ(2, client.num_draws());
581 } 581 }
582 582
583 TEST(SchedulerTest, NoSwapWhenSwapFailsDuringForcedCommit) { 583 TEST(SchedulerTest, NoSwapWhenSwapFailsDuringForcedCommit) {
584 FakeSchedulerClient client; 584 FakeSchedulerClient client;
585 SchedulerSettings default_scheduler_settings; 585 SchedulerSettings default_scheduler_settings;
586 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 586 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
587 587
588 // Tell the client that it will fail to swap. 588 // Tell the client that it will fail to swap.
589 client.SetDrawWillHappen(true); 589 client.SetDrawWillHappen(true);
590 client.SetSwapWillHappenIfDrawHappens(false); 590 client.SetSwapWillHappenIfDrawHappens(false);
591 591
592 // Get the compositor to do a ScheduledActionDrawAndSwapForced. 592 // Get the compositor to do a ScheduledActionDrawAndSwapForced.
593 scheduler->SetCanDraw(true); 593 scheduler->SetCanDraw(true);
594 scheduler->SetNeedsRedraw(); 594 scheduler->SetNeedsRedraw();
595 scheduler->SetNeedsForcedRedraw(); 595 scheduler->SetNeedsForcedRedraw();
596 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapForced")); 596 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapForced"));
597 } 597 }
598 598
599 } // namespace 599 } // namespace
600 } // namespace cc 600 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine_unittest.cc ('k') | cc/test/fake_layer_tree_host_impl_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698