| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 } | 274 } |
| 275 | 275 |
| 276 GLES2InterfaceForTests* m_gl; | 276 GLES2InterfaceForTests* m_gl; |
| 277 RefPtr<DrawingBufferForTests> m_drawingBuffer; | 277 RefPtr<DrawingBufferForTests> m_drawingBuffer; |
| 278 }; | 278 }; |
| 279 | 279 |
| 280 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) | 280 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) |
| 281 { | 281 { |
| 282 cc::TextureMailbox textureMailbox; | 282 cc::TextureMailbox textureMailbox; |
| 283 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 283 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 284 bool useSharedMemory = false; | |
| 285 | 284 |
| 286 IntSize initialSize(initialWidth, initialHeight); | 285 IntSize initialSize(initialWidth, initialHeight); |
| 287 IntSize alternateSize(initialWidth, alternateHeight); | 286 IntSize alternateSize(initialWidth, alternateHeight); |
| 288 | 287 |
| 289 // Produce one mailbox at size 100x100. | 288 // Produce one mailbox at size 100x100. |
| 290 m_drawingBuffer->markContentsChanged(); | 289 m_drawingBuffer->markContentsChanged(); |
| 291 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 290 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 292 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 291 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 293 | 292 |
| 294 // Resize to 100x50. | 293 // Resize to 100x50. |
| 295 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); | 294 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); |
| 296 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 295 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 297 | 296 |
| 298 // Produce a mailbox at this size. | 297 // Produce a mailbox at this size. |
| 299 m_drawingBuffer->markContentsChanged(); | 298 m_drawingBuffer->markContentsChanged(); |
| 300 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 299 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 301 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); | 300 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); |
| 302 | 301 |
| 303 // Reset to initial size. | 302 // Reset to initial size. |
| 304 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); | 303 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); |
| 305 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 304 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 306 | 305 |
| 307 // Prepare another mailbox and verify that it's the correct size. | 306 // Prepare another mailbox and verify that it's the correct size. |
| 308 m_drawingBuffer->markContentsChanged(); | 307 m_drawingBuffer->markContentsChanged(); |
| 309 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 308 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 310 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 309 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 311 | 310 |
| 312 // Prepare one final mailbox and verify that it's the correct size. | 311 // Prepare one final mailbox and verify that it's the correct size. |
| 313 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 312 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 314 m_drawingBuffer->markContentsChanged(); | 313 m_drawingBuffer->markContentsChanged(); |
| 315 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 314 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 316 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 315 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 317 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 316 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 318 m_drawingBuffer->beginDestruction(); | 317 m_drawingBuffer->beginDestruction(); |
| 319 } | 318 } |
| 320 | 319 |
| 321 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) | 320 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) |
| 322 { | 321 { |
| 323 bool live = true; | 322 bool live = true; |
| 324 m_drawingBuffer->m_live = &live; | 323 m_drawingBuffer->m_live = &live; |
| 325 | 324 |
| 326 cc::TextureMailbox textureMailbox1; | 325 cc::TextureMailbox textureMailbox1; |
| 327 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; | 326 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; |
| 328 cc::TextureMailbox textureMailbox2; | 327 cc::TextureMailbox textureMailbox2; |
| 329 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; | 328 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; |
| 330 cc::TextureMailbox textureMailbox3; | 329 cc::TextureMailbox textureMailbox3; |
| 331 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; | 330 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; |
| 332 bool useSharedMemory = false; | |
| 333 | 331 |
| 334 IntSize initialSize(initialWidth, initialHeight); | 332 IntSize initialSize(initialWidth, initialHeight); |
| 335 | 333 |
| 336 // Produce mailboxes. | 334 // Produce mailboxes. |
| 337 m_drawingBuffer->markContentsChanged(); | 335 m_drawingBuffer->markContentsChanged(); |
| 338 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1, useSharedMemory)); | 336 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1)); |
| 339 m_drawingBuffer->markContentsChanged(); | 337 m_drawingBuffer->markContentsChanged(); |
| 340 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2, useSharedMemory)); | 338 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2)); |
| 341 m_drawingBuffer->markContentsChanged(); | 339 m_drawingBuffer->markContentsChanged(); |
| 342 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3, useSharedMemory)); | 340 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3)); |
| 343 | 341 |
| 344 m_drawingBuffer->markContentsChanged(); | 342 m_drawingBuffer->markContentsChanged(); |
| 345 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); | 343 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 346 | 344 |
| 347 m_drawingBuffer->beginDestruction(); | 345 m_drawingBuffer->beginDestruction(); |
| 348 ASSERT_EQ(live, true); | 346 ASSERT_EQ(live, true); |
| 349 | 347 |
| 350 DrawingBufferForTests* rawPointer = m_drawingBuffer.get(); | 348 DrawingBufferForTests* rawPointer = m_drawingBuffer.get(); |
| 351 m_drawingBuffer.clear(); | 349 m_drawingBuffer.clear(); |
| 352 ASSERT_EQ(live, true); | 350 ASSERT_EQ(live, true); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 364 { | 362 { |
| 365 bool live = true; | 363 bool live = true; |
| 366 m_drawingBuffer->m_live = &live; | 364 m_drawingBuffer->m_live = &live; |
| 367 | 365 |
| 368 cc::TextureMailbox textureMailbox1; | 366 cc::TextureMailbox textureMailbox1; |
| 369 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; | 367 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; |
| 370 cc::TextureMailbox textureMailbox2; | 368 cc::TextureMailbox textureMailbox2; |
| 371 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; | 369 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; |
| 372 cc::TextureMailbox textureMailbox3; | 370 cc::TextureMailbox textureMailbox3; |
| 373 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; | 371 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; |
| 374 bool useSharedMemory = false; | |
| 375 | 372 |
| 376 m_drawingBuffer->markContentsChanged(); | 373 m_drawingBuffer->markContentsChanged(); |
| 377 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1, useSharedMemory)); | 374 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1)); |
| 378 m_drawingBuffer->markContentsChanged(); | 375 m_drawingBuffer->markContentsChanged(); |
| 379 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2, useSharedMemory)); | 376 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2)); |
| 380 m_drawingBuffer->markContentsChanged(); | 377 m_drawingBuffer->markContentsChanged(); |
| 381 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3, useSharedMemory)); | 378 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3)); |
| 382 | 379 |
| 383 m_drawingBuffer->markContentsChanged(); | 380 m_drawingBuffer->markContentsChanged(); |
| 384 releaseCallback1->Run(gpu::SyncToken(), true /* lostResource */); | 381 releaseCallback1->Run(gpu::SyncToken(), true /* lostResource */); |
| 385 EXPECT_EQ(live, true); | 382 EXPECT_EQ(live, true); |
| 386 | 383 |
| 387 m_drawingBuffer->beginDestruction(); | 384 m_drawingBuffer->beginDestruction(); |
| 388 EXPECT_EQ(live, true); | 385 EXPECT_EQ(live, true); |
| 389 | 386 |
| 390 m_drawingBuffer->markContentsChanged(); | 387 m_drawingBuffer->markContentsChanged(); |
| 391 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); | 388 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 392 EXPECT_EQ(live, true); | 389 EXPECT_EQ(live, true); |
| 393 | 390 |
| 394 DrawingBufferForTests* rawPtr = m_drawingBuffer.get(); | 391 DrawingBufferForTests* rawPtr = m_drawingBuffer.get(); |
| 395 m_drawingBuffer.clear(); | 392 m_drawingBuffer.clear(); |
| 396 EXPECT_EQ(live, true); | 393 EXPECT_EQ(live, true); |
| 397 | 394 |
| 398 rawPtr->markContentsChanged(); | 395 rawPtr->markContentsChanged(); |
| 399 releaseCallback3->Run(gpu::SyncToken(), true /* lostResource */); | 396 releaseCallback3->Run(gpu::SyncToken(), true /* lostResource */); |
| 400 EXPECT_EQ(live, false); | 397 EXPECT_EQ(live, false); |
| 401 } | 398 } |
| 402 | 399 |
| 403 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) | 400 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) |
| 404 { | 401 { |
| 405 cc::TextureMailbox textureMailbox1; | 402 cc::TextureMailbox textureMailbox1; |
| 406 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; | 403 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; |
| 407 cc::TextureMailbox textureMailbox2; | 404 cc::TextureMailbox textureMailbox2; |
| 408 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; | 405 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; |
| 409 cc::TextureMailbox textureMailbox3; | 406 cc::TextureMailbox textureMailbox3; |
| 410 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; | 407 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; |
| 411 bool useSharedMemory = false; | |
| 412 | 408 |
| 413 // Produce mailboxes. | 409 // Produce mailboxes. |
| 414 m_drawingBuffer->markContentsChanged(); | 410 m_drawingBuffer->markContentsChanged(); |
| 415 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1, useSharedMemory)); | 411 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1)); |
| 416 m_drawingBuffer->markContentsChanged(); | 412 m_drawingBuffer->markContentsChanged(); |
| 417 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2, useSharedMemory)); | 413 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2)); |
| 418 m_drawingBuffer->markContentsChanged(); | 414 m_drawingBuffer->markContentsChanged(); |
| 419 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3, useSharedMemory)); | 415 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3)); |
| 420 | 416 |
| 421 // Release mailboxes by specific order; 1, 3, 2. | 417 // Release mailboxes by specific order; 1, 3, 2. |
| 422 m_drawingBuffer->markContentsChanged(); | 418 m_drawingBuffer->markContentsChanged(); |
| 423 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); | 419 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 424 m_drawingBuffer->markContentsChanged(); | 420 m_drawingBuffer->markContentsChanged(); |
| 425 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */); | 421 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */); |
| 426 m_drawingBuffer->markContentsChanged(); | 422 m_drawingBuffer->markContentsChanged(); |
| 427 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); | 423 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 428 | 424 |
| 429 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order
because | 425 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order
because |
| 430 // DrawingBuffer never keeps more than one mailbox. | 426 // DrawingBuffer never keeps more than one mailbox. |
| 431 cc::TextureMailbox recycledTextureMailbox1; | 427 cc::TextureMailbox recycledTextureMailbox1; |
| 432 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback1; | 428 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback1; |
| 433 m_drawingBuffer->markContentsChanged(); | 429 m_drawingBuffer->markContentsChanged(); |
| 434 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox1,
&recycledReleaseCallback1, useSharedMemory)); | 430 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox1,
&recycledReleaseCallback1)); |
| 435 EXPECT_EQ(textureMailbox2.mailbox(), recycledTextureMailbox1.mailbox()); | 431 EXPECT_EQ(textureMailbox2.mailbox(), recycledTextureMailbox1.mailbox()); |
| 436 | 432 |
| 437 // The second recycled mailbox must be a new mailbox. | 433 // The second recycled mailbox must be a new mailbox. |
| 438 cc::TextureMailbox recycledTextureMailbox2; | 434 cc::TextureMailbox recycledTextureMailbox2; |
| 439 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback2; | 435 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback2; |
| 440 m_drawingBuffer->markContentsChanged(); | 436 m_drawingBuffer->markContentsChanged(); |
| 441 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox2,
&recycledReleaseCallback2, useSharedMemory)); | 437 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox2,
&recycledReleaseCallback2)); |
| 442 EXPECT_NE(textureMailbox1.mailbox(), recycledTextureMailbox2.mailbox()); | 438 EXPECT_NE(textureMailbox1.mailbox(), recycledTextureMailbox2.mailbox()); |
| 443 EXPECT_NE(textureMailbox2.mailbox(), recycledTextureMailbox2.mailbox()); | 439 EXPECT_NE(textureMailbox2.mailbox(), recycledTextureMailbox2.mailbox()); |
| 444 EXPECT_NE(textureMailbox3.mailbox(), recycledTextureMailbox2.mailbox()); | 440 EXPECT_NE(textureMailbox3.mailbox(), recycledTextureMailbox2.mailbox()); |
| 445 | 441 |
| 446 recycledReleaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); | 442 recycledReleaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 447 recycledReleaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); | 443 recycledReleaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 448 m_drawingBuffer->beginDestruction(); | 444 m_drawingBuffer->beginDestruction(); |
| 449 } | 445 } |
| 450 | 446 |
| 451 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) | 447 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) |
| 452 { | 448 { |
| 453 cc::TextureMailbox textureMailbox; | 449 cc::TextureMailbox textureMailbox; |
| 454 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 450 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 455 bool useSharedMemory = false; | |
| 456 | 451 |
| 457 // Produce mailboxes. | 452 // Produce mailboxes. |
| 458 m_drawingBuffer->markContentsChanged(); | 453 m_drawingBuffer->markContentsChanged(); |
| 459 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); | 454 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); |
| 460 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 455 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 461 // PrepareTextureMailbox() does not wait for any sync point. | 456 // PrepareTextureMailbox() does not wait for any sync point. |
| 462 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); | 457 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); |
| 463 | 458 |
| 464 gpu::SyncToken waitSyncToken; | 459 gpu::SyncToken waitSyncToken; |
| 465 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); | 460 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); |
| 466 releaseCallback->Run(waitSyncToken, false /* lostResource */); | 461 releaseCallback->Run(waitSyncToken, false /* lostResource */); |
| 467 // m_drawingBuffer will wait for the sync point when recycling. | 462 // m_drawingBuffer will wait for the sync point when recycling. |
| 468 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); | 463 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken()); |
| 469 | 464 |
| 470 m_drawingBuffer->markContentsChanged(); | 465 m_drawingBuffer->markContentsChanged(); |
| 471 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 466 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 472 // m_drawingBuffer waits for the sync point when recycling in PrepareTexture
Mailbox(). | 467 // m_drawingBuffer waits for the sync point when recycling in PrepareTexture
Mailbox(). |
| 473 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); | 468 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); |
| 474 | 469 |
| 475 m_drawingBuffer->beginDestruction(); | 470 m_drawingBuffer->beginDestruction(); |
| 476 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); | 471 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); |
| 477 releaseCallback->Run(waitSyncToken, false /* lostResource */); | 472 releaseCallback->Run(waitSyncToken, false /* lostResource */); |
| 478 // m_drawingBuffer waits for the sync point because the destruction is in pr
ogress. | 473 // m_drawingBuffer waits for the sync point because the destruction is in pr
ogress. |
| 479 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); | 474 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); |
| 480 } | 475 } |
| 481 | 476 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 500 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); | 495 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); |
| 501 } | 496 } |
| 502 | 497 |
| 503 GLuint m_imageId0; | 498 GLuint m_imageId0; |
| 504 }; | 499 }; |
| 505 | 500 |
| 506 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) | 501 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) |
| 507 { | 502 { |
| 508 cc::TextureMailbox textureMailbox; | 503 cc::TextureMailbox textureMailbox; |
| 509 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 504 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 510 bool useSharedMemory = false; | |
| 511 | 505 |
| 512 IntSize initialSize(initialWidth, initialHeight); | 506 IntSize initialSize(initialWidth, initialHeight); |
| 513 IntSize alternateSize(initialWidth, alternateHeight); | 507 IntSize alternateSize(initialWidth, alternateHeight); |
| 514 | 508 |
| 515 GLuint m_imageId1 = m_gl->nextImageIdToBeCreated(); | 509 GLuint m_imageId1 = m_gl->nextImageIdToBeCreated(); |
| 516 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId1)).Times(1); | 510 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId1)).Times(1); |
| 517 // Produce one mailbox at size 100x100. | 511 // Produce one mailbox at size 100x100. |
| 518 m_drawingBuffer->markContentsChanged(); | 512 m_drawingBuffer->markContentsChanged(); |
| 519 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 513 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 520 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 514 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 521 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); | 515 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); |
| 522 testing::Mock::VerifyAndClearExpectations(m_gl); | 516 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 523 | 517 |
| 524 GLuint m_imageId2 = m_gl->nextImageIdToBeCreated(); | 518 GLuint m_imageId2 = m_gl->nextImageIdToBeCreated(); |
| 525 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId2)).Times(1); | 519 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId2)).Times(1); |
| 526 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId0)).Times(1); | 520 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId0)).Times(1); |
| 527 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId0)).Times(1); | 521 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId0)).Times(1); |
| 528 // Resize to 100x50. | 522 // Resize to 100x50. |
| 529 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); | 523 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); |
| 530 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 524 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 531 testing::Mock::VerifyAndClearExpectations(m_gl); | 525 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 532 | 526 |
| 533 GLuint m_imageId3 = m_gl->nextImageIdToBeCreated(); | 527 GLuint m_imageId3 = m_gl->nextImageIdToBeCreated(); |
| 534 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId3)).Times(1); | 528 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId3)).Times(1); |
| 535 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId1)).Times(1); | 529 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId1)).Times(1); |
| 536 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId1)).Times(1); | 530 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId1)).Times(1); |
| 537 // Produce a mailbox at this size. | 531 // Produce a mailbox at this size. |
| 538 m_drawingBuffer->markContentsChanged(); | 532 m_drawingBuffer->markContentsChanged(); |
| 539 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 533 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 540 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); | 534 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); |
| 541 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); | 535 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); |
| 542 testing::Mock::VerifyAndClearExpectations(m_gl); | 536 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 543 | 537 |
| 544 GLuint m_imageId4 = m_gl->nextImageIdToBeCreated(); | 538 GLuint m_imageId4 = m_gl->nextImageIdToBeCreated(); |
| 545 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId4)).Times(1); | 539 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId4)).Times(1); |
| 546 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId2)).Times(1); | 540 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId2)).Times(1); |
| 547 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId2)).Times(1); | 541 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId2)).Times(1); |
| 548 // Reset to initial size. | 542 // Reset to initial size. |
| 549 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); | 543 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); |
| 550 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 544 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 551 testing::Mock::VerifyAndClearExpectations(m_gl); | 545 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 552 | 546 |
| 553 GLuint m_imageId5 = m_gl->nextImageIdToBeCreated(); | 547 GLuint m_imageId5 = m_gl->nextImageIdToBeCreated(); |
| 554 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId5)).Times(1); | 548 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId5)).Times(1); |
| 555 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId3)).Times(1); | 549 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId3)).Times(1); |
| 556 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId3)).Times(1); | 550 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId3)).Times(1); |
| 557 // Prepare another mailbox and verify that it's the correct size. | 551 // Prepare another mailbox and verify that it's the correct size. |
| 558 m_drawingBuffer->markContentsChanged(); | 552 m_drawingBuffer->markContentsChanged(); |
| 559 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 553 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 560 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 554 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 561 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); | 555 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); |
| 562 testing::Mock::VerifyAndClearExpectations(m_gl); | 556 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 563 | 557 |
| 564 // Prepare one final mailbox and verify that it's the correct size. | 558 // Prepare one final mailbox and verify that it's the correct size. |
| 565 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 559 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 566 m_drawingBuffer->markContentsChanged(); | 560 m_drawingBuffer->markContentsChanged(); |
| 567 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 561 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 568 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); | 562 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); |
| 569 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); | 563 EXPECT_TRUE(textureMailbox.is_overlay_candidate()); |
| 570 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); | 564 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */); |
| 571 | 565 |
| 572 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId5)).Times(1); | 566 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId5)).Times(1); |
| 573 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId5)).Times(1); | 567 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId5)).Times(1); |
| 574 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId4)).Times(1); | 568 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId4)).Times(1); |
| 575 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId4)).Times(1); | 569 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId4)).Times(1); |
| 576 m_drawingBuffer->beginDestruction(); | 570 m_drawingBuffer->beginDestruction(); |
| 577 testing::Mock::VerifyAndClearExpectations(m_gl); | 571 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 578 } | 572 } |
| 579 | 573 |
| 580 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) | 574 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) |
| 581 { | 575 { |
| 582 cc::TextureMailbox textureMailbox1; | 576 cc::TextureMailbox textureMailbox1; |
| 583 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; | 577 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1; |
| 584 cc::TextureMailbox textureMailbox2; | 578 cc::TextureMailbox textureMailbox2; |
| 585 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; | 579 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2; |
| 586 cc::TextureMailbox textureMailbox3; | 580 cc::TextureMailbox textureMailbox3; |
| 587 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; | 581 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3; |
| 588 bool useSharedMemory = false; | |
| 589 | 582 |
| 590 // Request a mailbox. An image should already be created. Everything works | 583 // Request a mailbox. An image should already be created. Everything works |
| 591 // as expected. | 584 // as expected. |
| 592 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); | 585 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); |
| 593 IntSize initialSize(initialWidth, initialHeight); | 586 IntSize initialSize(initialWidth, initialHeight); |
| 594 m_drawingBuffer->markContentsChanged(); | 587 m_drawingBuffer->markContentsChanged(); |
| 595 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1, useSharedMemory)); | 588 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas
eCallback1)); |
| 596 EXPECT_TRUE(textureMailbox1.is_overlay_candidate()); | 589 EXPECT_TRUE(textureMailbox1.is_overlay_candidate()); |
| 597 testing::Mock::VerifyAndClearExpectations(m_gl); | 590 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 598 | 591 |
| 599 // Force image CHROMIUM creation failure. Request another mailbox. It should | 592 // Force image CHROMIUM creation failure. Request another mailbox. It should |
| 600 // still be provided, but this time with allowOverlay = false. | 593 // still be provided, but this time with allowOverlay = false. |
| 601 m_gl->setCreateImageChromiumFail(true); | 594 m_gl->setCreateImageChromiumFail(true); |
| 602 m_drawingBuffer->markContentsChanged(); | 595 m_drawingBuffer->markContentsChanged(); |
| 603 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2, useSharedMemory)); | 596 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas
eCallback2)); |
| 604 EXPECT_FALSE(textureMailbox2.is_overlay_candidate()); | 597 EXPECT_FALSE(textureMailbox2.is_overlay_candidate()); |
| 605 | 598 |
| 606 // Check that if image CHROMIUM starts working again, mailboxes are | 599 // Check that if image CHROMIUM starts working again, mailboxes are |
| 607 // correctly created with allowOverlay = true. | 600 // correctly created with allowOverlay = true. |
| 608 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); | 601 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); |
| 609 m_gl->setCreateImageChromiumFail(false); | 602 m_gl->setCreateImageChromiumFail(false); |
| 610 m_drawingBuffer->markContentsChanged(); | 603 m_drawingBuffer->markContentsChanged(); |
| 611 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3, useSharedMemory)); | 604 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas
eCallback3)); |
| 612 EXPECT_TRUE(textureMailbox3.is_overlay_candidate()); | 605 EXPECT_TRUE(textureMailbox3.is_overlay_candidate()); |
| 613 testing::Mock::VerifyAndClearExpectations(m_gl); | 606 testing::Mock::VerifyAndClearExpectations(m_gl); |
| 614 | 607 |
| 615 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); | 608 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 616 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); | 609 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 617 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */); | 610 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */); |
| 618 | 611 |
| 619 EXPECT_CALL(*m_gl, DestroyImageMock(_)).Times(3); | 612 EXPECT_CALL(*m_gl, DestroyImageMock(_)).Times(3); |
| 620 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(_)).Times(3); | 613 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(_)).Times(3); |
| 621 m_drawingBuffer->beginDestruction(); | 614 m_drawingBuffer->beginDestruction(); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 } | 753 } |
| 761 | 754 |
| 762 drawingBuffer->beginDestruction(); | 755 drawingBuffer->beginDestruction(); |
| 763 } | 756 } |
| 764 } | 757 } |
| 765 | 758 |
| 766 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) | 759 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) |
| 767 { | 760 { |
| 768 cc::TextureMailbox textureMailbox; | 761 cc::TextureMailbox textureMailbox; |
| 769 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 762 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 770 bool useSharedMemory = false; | |
| 771 | 763 |
| 772 // Produce mailboxes. | 764 // Produce mailboxes. |
| 773 m_drawingBuffer->markContentsChanged(); | 765 m_drawingBuffer->markContentsChanged(); |
| 774 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback, useSharedMemory)); | 766 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release
Callback)); |
| 775 | 767 |
| 776 gpu::SyncToken waitSyncToken; | 768 gpu::SyncToken waitSyncToken; |
| 777 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); | 769 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge
tData()); |
| 778 m_drawingBuffer->setIsHidden(true); | 770 m_drawingBuffer->setIsHidden(true); |
| 779 releaseCallback->Run(waitSyncToken, false /* lostResource */); | 771 releaseCallback->Run(waitSyncToken, false /* lostResource */); |
| 780 // m_drawingBuffer deletes mailbox immediately when hidden. | 772 // m_drawingBuffer deletes mailbox immediately when hidden. |
| 781 | 773 |
| 782 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); | 774 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); |
| 783 | 775 |
| 784 m_drawingBuffer->beginDestruction(); | 776 m_drawingBuffer->beginDestruction(); |
| 785 } | 777 } |
| 786 | 778 |
| 787 } // namespace blink | 779 } // namespace blink |
| OLD | NEW |