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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp

Issue 2270533002: cc: Remove the software compositing bool from PrepareTextureMailbox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@softwarerendering
Patch Set: remove-prepare-mailbox-param: bad-merge Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp ('k') | ui/compositor/layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698