| 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 |