OLD | NEW |
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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCTextureUpdateController.h" | 7 #include "CCTextureUpdateController.h" |
8 | 8 |
9 #include "CCSchedulerTestCommon.h" | 9 #include "CCSchedulerTestCommon.h" |
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread | 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 bool m_readyToFinalizeCalled; | 374 bool m_readyToFinalizeCalled; |
375 }; | 375 }; |
376 | 376 |
377 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { | 377 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { |
378 public: | 378 public: |
379 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC
ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue>
queue, CCResourceProvider* resourceProvider, TextureUploader* uploader) | 379 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC
ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue>
queue, CCResourceProvider* resourceProvider, TextureUploader* uploader) |
380 { | 380 { |
381 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue,
resourceProvider, uploader)); | 381 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue,
resourceProvider, uploader)); |
382 } | 382 } |
383 | 383 |
384 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } | |
385 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow
; } | |
386 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim
e; } | |
387 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore
TexturesTime; } | |
388 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz
e; } | 384 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz
e; } |
389 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore
TexturesSize; } | 385 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore
TexturesSize; } |
390 | 386 |
391 protected: | 387 protected: |
392 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c
c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider*
resourceProvider, TextureUploader* uploader) | 388 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c
c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider*
resourceProvider, TextureUploader* uploader) |
393 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider,
uploader) | 389 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider,
uploader) |
394 , m_monotonicTimeNow(0) | |
395 , m_updateMoreTexturesTime(0) | |
396 , m_updateMoreTexturesSize(0) { } | 390 , m_updateMoreTexturesSize(0) { } |
397 | 391 |
398 double m_monotonicTimeNow; | |
399 double m_updateMoreTexturesTime; | |
400 size_t m_updateMoreTexturesSize; | 392 size_t m_updateMoreTexturesSize; |
401 }; | 393 }; |
402 | 394 |
403 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController*
controller) | 395 TEST_F(CCTextureUpdateControllerTest, OneFullUpdate) |
404 { | |
405 EXPECT_TRUE(thread->hasPendingTask()); | |
406 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen
dingDelayMs() / 1000.0); | |
407 thread->runPendingTask(); | |
408 } | |
409 | |
410 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) | |
411 { | 396 { |
412 FakeCCTextureUpdateControllerClient client; | 397 FakeCCTextureUpdateControllerClient client; |
413 FakeCCThread thread; | 398 FakeCCThread thread; |
414 | 399 |
415 setMaxUploadCountPerUpdate(1); | 400 setMaxUploadCountPerUpdate(1); |
416 appendFullUploadsToUpdateQueue(3); | 401 appendFullUploadsToUpdateQueue(1); |
417 appendPartialUploadsToUpdateQueue(0); | 402 appendPartialUploadsToUpdateQueue(0); |
418 | 403 |
419 DebugScopedSetImplThread implThread; | 404 DebugScopedSetImplThread implThread; |
420 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); | 405 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); |
421 | 406 |
422 controller->setMonotonicTimeNow(0); | |
423 controller->setUpdateMoreTexturesTime(0.1); | |
424 controller->setUpdateMoreTexturesSize(1); | 407 controller->setUpdateMoreTexturesSize(1); |
425 // Not enough time for any updates. | 408 controller->start(); |
426 controller->performMoreUpdates(0.09); | 409 EXPECT_TRUE(thread.hasPendingTask()); |
| 410 thread.runPendingTask(); |
427 EXPECT_FALSE(thread.hasPendingTask()); | 411 EXPECT_FALSE(thread.hasPendingTask()); |
428 EXPECT_EQ(0, m_numBeginUploads); | 412 EXPECT_TRUE(client.readyToFinalizeCalled()); |
429 EXPECT_EQ(0, m_numEndUploads); | |
430 | |
431 controller->setMonotonicTimeNow(0); | |
432 controller->setUpdateMoreTexturesTime(0.1); | |
433 controller->setUpdateMoreTexturesSize(1); | |
434 // Only enough time for 1 update. | |
435 controller->performMoreUpdates(0.12); | |
436 runPendingTask(&thread, controller.get()); | |
437 EXPECT_FALSE(thread.hasPendingTask()); | |
438 EXPECT_EQ(1, m_numBeginUploads); | 413 EXPECT_EQ(1, m_numBeginUploads); |
439 EXPECT_EQ(1, m_numEndUploads); | 414 EXPECT_EQ(1, m_numEndUploads); |
440 EXPECT_EQ(1, m_numTotalUploads); | 415 EXPECT_EQ(1, m_numTotalUploads); |
441 | |
442 controller->setMonotonicTimeNow(0); | |
443 controller->setUpdateMoreTexturesTime(0.1); | |
444 controller->setUpdateMoreTexturesSize(1); | |
445 // Enough time for 2 updates. | |
446 controller->performMoreUpdates(0.22); | |
447 runPendingTask(&thread, controller.get()); | |
448 runPendingTask(&thread, controller.get()); | |
449 EXPECT_FALSE(thread.hasPendingTask()); | |
450 EXPECT_TRUE(client.readyToFinalizeCalled()); | |
451 EXPECT_EQ(3, m_numBeginUploads); | |
452 EXPECT_EQ(3, m_numEndUploads); | |
453 EXPECT_EQ(3, m_numTotalUploads); | |
454 } | 416 } |
455 | 417 |
456 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) | 418 TEST_F(CCTextureUpdateControllerTest, TwoPartialUpdates) |
457 { | 419 { |
458 FakeCCTextureUpdateControllerClient client; | 420 FakeCCTextureUpdateControllerClient client; |
459 FakeCCThread thread; | 421 FakeCCThread thread; |
460 | 422 |
461 setMaxUploadCountPerUpdate(1); | 423 setMaxUploadCountPerUpdate(2); |
462 appendFullUploadsToUpdateQueue(2); | 424 appendFullUploadsToUpdateQueue(0); |
463 appendPartialUploadsToUpdateQueue(0); | 425 appendPartialUploadsToUpdateQueue(2); |
464 | 426 |
465 DebugScopedSetImplThread implThread; | 427 DebugScopedSetImplThread implThread; |
466 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); | 428 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); |
467 | 429 |
468 controller->setMonotonicTimeNow(0); | 430 controller->setUpdateMoreTexturesSize(2); |
469 controller->setUpdateMoreTexturesTime(0.1); | 431 controller->start(); |
470 controller->setUpdateMoreTexturesSize(1); | 432 EXPECT_TRUE(thread.hasPendingTask()); |
471 // Enough time for 3 updates but only 2 necessary. | 433 thread.runPendingTask(); |
472 controller->performMoreUpdates(0.31); | 434 EXPECT_FALSE(thread.hasPendingTask()); |
473 runPendingTask(&thread, controller.get()); | 435 EXPECT_TRUE(client.readyToFinalizeCalled()); |
474 runPendingTask(&thread, controller.get()); | 436 EXPECT_EQ(0, m_numBeginUploads); |
| 437 EXPECT_EQ(0, m_numEndUploads); |
| 438 EXPECT_EQ(0, m_numTotalUploads); |
| 439 |
| 440 controller->finalize(); |
| 441 EXPECT_EQ(2, m_numTotalUploads); |
| 442 } |
| 443 |
| 444 TEST_F(CCTextureUpdateControllerTest, FourFullUpdatesAndOnePartialUpdate) |
| 445 { |
| 446 FakeCCTextureUpdateControllerClient client; |
| 447 FakeCCThread thread; |
| 448 |
| 449 setMaxUploadCountPerUpdate(2); |
| 450 appendFullUploadsToUpdateQueue(4); |
| 451 appendPartialUploadsToUpdateQueue(1); |
| 452 |
| 453 DebugScopedSetImplThread implThread; |
| 454 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); |
| 455 |
| 456 controller->setUpdateMoreTexturesSize(2); |
| 457 controller->start(); |
| 458 EXPECT_TRUE(thread.hasPendingTask()); |
| 459 thread.runPendingTask(); |
| 460 EXPECT_TRUE(thread.hasPendingTask()); |
| 461 thread.runPendingTask(); |
475 EXPECT_FALSE(thread.hasPendingTask()); | 462 EXPECT_FALSE(thread.hasPendingTask()); |
476 EXPECT_TRUE(client.readyToFinalizeCalled()); | 463 EXPECT_TRUE(client.readyToFinalizeCalled()); |
477 EXPECT_EQ(2, m_numBeginUploads); | 464 EXPECT_EQ(2, m_numBeginUploads); |
478 EXPECT_EQ(2, m_numEndUploads); | 465 EXPECT_EQ(2, m_numEndUploads); |
479 EXPECT_EQ(2, m_numTotalUploads); | 466 EXPECT_EQ(4, m_numTotalUploads); |
480 | 467 |
481 controller->setMonotonicTimeNow(0); | 468 controller->finalize(); |
482 controller->setUpdateMoreTexturesTime(0.1); | 469 EXPECT_EQ(5, m_numTotalUploads); |
483 controller->setUpdateMoreTexturesSize(1); | |
484 // Enough time for updates but no more updates left. | |
485 controller->performMoreUpdates(0.31); | |
486 // 0-delay task used to call readyToFinalizeTextureUpdates(). | |
487 runPendingTask(&thread, controller.get()); | |
488 EXPECT_FALSE(thread.hasPendingTask()); | |
489 EXPECT_TRUE(client.readyToFinalizeCalled()); | |
490 EXPECT_EQ(2, m_numBeginUploads); | |
491 EXPECT_EQ(2, m_numEndUploads); | |
492 EXPECT_EQ(2, m_numTotalUploads); | |
493 } | |
494 | |
495 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) | |
496 { | |
497 FakeCCTextureUpdateControllerClient client; | |
498 FakeCCThread thread; | |
499 | |
500 setMaxUploadCountPerUpdate(1); | |
501 appendFullUploadsToUpdateQueue(2); | |
502 appendPartialUploadsToUpdateQueue(0); | |
503 | |
504 DebugScopedSetImplThread implThread; | |
505 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl
oader)); | |
506 | |
507 controller->setMonotonicTimeNow(0); | |
508 controller->setUpdateMoreTexturesTime(0.5); | |
509 controller->setUpdateMoreTexturesSize(1); | |
510 | |
511 for (int i = 0; i < 100; i++) { | |
512 if (client.readyToFinalizeCalled()) | |
513 break; | |
514 | |
515 // Not enough time for any updates. | |
516 controller->performMoreUpdates(0.4); | |
517 | |
518 if (thread.hasPendingTask()) | |
519 runPendingTask(&thread, controller.get()); | |
520 } | |
521 | |
522 EXPECT_FALSE(thread.hasPendingTask()); | |
523 EXPECT_TRUE(client.readyToFinalizeCalled()); | |
524 EXPECT_EQ(2, m_numBeginUploads); | |
525 EXPECT_EQ(2, m_numEndUploads); | |
526 EXPECT_EQ(2, m_numTotalUploads); | |
527 } | 470 } |
528 | 471 |
529 TEST_F(CCTextureUpdateControllerTest, ClearUploadsToEvictedResources) | 472 TEST_F(CCTextureUpdateControllerTest, ClearUploadsToEvictedResources) |
530 { | 473 { |
531 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 0); | 474 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 0); |
532 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 1); | 475 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 1); |
533 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 2); | 476 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 2); |
534 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 3); | 477 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 3); |
535 DebugScopedSetImplThread implThread; | 478 DebugScopedSetImplThread implThread; |
536 | 479 |
(...skipping 16 matching lines...) Expand all Loading... |
553 EXPECT_EQ(0u, m_queue->fullUploadSize()); | 496 EXPECT_EQ(0u, m_queue->fullUploadSize()); |
554 EXPECT_EQ(1u, m_queue->partialUploadSize()); | 497 EXPECT_EQ(1u, m_queue->partialUploadSize()); |
555 | 498 |
556 m_textures[1].evictBackingResource(); | 499 m_textures[1].evictBackingResource(); |
557 m_queue->clearUploadsToEvictedResources(); | 500 m_queue->clearUploadsToEvictedResources(); |
558 EXPECT_EQ(0u, m_queue->fullUploadSize()); | 501 EXPECT_EQ(0u, m_queue->fullUploadSize()); |
559 EXPECT_EQ(0u, m_queue->partialUploadSize()); | 502 EXPECT_EQ(0u, m_queue->partialUploadSize()); |
560 } | 503 } |
561 | 504 |
562 } // namespace | 505 } // namespace |
OLD | NEW |