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 |