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

Side by Side Diff: cc/resource_provider_unittest.cc

Issue 11183006: cc: Remove wtf includes from resource provider (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « cc/resource_provider.cc ('k') | cc/scoped_texture_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "CCResourceProvider.h" 7 #include "CCResourceProvider.h"
8 8
9 #include "CCGraphicsContext.h" 9 #include "CCGraphicsContext.h"
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
11 #include "Extensions3DChromium.h" 11 #include "Extensions3DChromium.h"
12 #include "cc/test/compositor_fake_web_graphics_context_3d.h" 12 #include "cc/test/compositor_fake_web_graphics_context_3d.h"
13 #include "cc/test/fake_web_compositor_output_surface.h" 13 #include "cc/test/fake_web_compositor_output_surface.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include <public/WebGraphicsContext3D.h> 15 #include <public/WebGraphicsContext3D.h>
16 #include <wtf/HashMap.h> 16 #include <wtf/HashMap.h>
17 #include <wtf/OwnPtr.h> 17 #include <wtf/OwnPtr.h>
18 #include <wtf/Deque.h>
18 19
19 using namespace cc; 20 using namespace cc;
20 using namespace WebKit; 21 using namespace WebKit;
21 22
22 namespace { 23 namespace {
23 24
24 size_t textureSize(const IntSize& size, WGC3Denum format) 25 size_t textureSize(const IntSize& size, WGC3Denum format)
25 { 26 {
26 unsigned int componentsPerPixel = 4; 27 unsigned int componentsPerPixel = 4;
27 unsigned int bytesPerComponent = 1; 28 unsigned int bytesPerComponent = 1;
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 { 295 {
295 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources())); 296 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources()));
296 if (GetParam() == CCResourceProvider::GLTexture) 297 if (GetParam() == CCResourceProvider::GLTexture)
297 EXPECT_EQ(count, context()->textureCount()); 298 EXPECT_EQ(count, context()->textureCount());
298 } 299 }
299 300
300 protected: 301 protected:
301 DebugScopedSetImplThread implThread; 302 DebugScopedSetImplThread implThread;
302 OwnPtr<ContextSharedData> m_sharedData; 303 OwnPtr<ContextSharedData> m_sharedData;
303 scoped_ptr<CCGraphicsContext> m_context; 304 scoped_ptr<CCGraphicsContext> m_context;
304 OwnPtr<CCResourceProvider> m_resourceProvider; 305 scoped_ptr<CCResourceProvider> m_resourceProvider;
305 }; 306 };
306 307
307 TEST_P(CCResourceProviderTest, Basic) 308 TEST_P(CCResourceProviderTest, Basic)
308 { 309 {
309 IntSize size(1, 1); 310 IntSize size(1, 1);
310 WGC3Denum format = GraphicsContext3D::RGBA; 311 WGC3Denum format = GraphicsContext3D::RGBA;
311 int pool = 1; 312 int pool = 1;
312 size_t pixelSize = textureSize(size, format); 313 size_t pixelSize = textureSize(size, format);
313 ASSERT_EQ(4U, pixelSize); 314 ASSERT_EQ(4U, pixelSize);
314 315
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 m_resourceProvider->deleteResource(id); 410 m_resourceProvider->deleteResource(id);
410 } 411 }
411 412
412 TEST_P(CCResourceProviderTest, TransferResources) 413 TEST_P(CCResourceProviderTest, TransferResources)
413 { 414 {
414 // Resource transfer is only supported with GL textures for now. 415 // Resource transfer is only supported with GL textures for now.
415 if (GetParam() != CCResourceProvider::GLTexture) 416 if (GetParam() != CCResourceProvider::GLTexture)
416 return; 417 return;
417 418
418 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c reate(ResourceProviderContext::create(m_sharedData.get()))); 419 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c reate(ResourceProviderContext::create(m_sharedData.get())));
419 OwnPtr<CCResourceProvider> childResourceProvider(CCResourceProvider::create( childContext.get())); 420 scoped_ptr<CCResourceProvider> childResourceProvider(CCResourceProvider::cre ate(childContext.get()));
420 421
421 IntSize size(1, 1); 422 IntSize size(1, 1);
422 WGC3Denum format = GraphicsContext3D::RGBA; 423 WGC3Denum format = GraphicsContext3D::RGBA;
423 int pool = 1; 424 int pool = 1;
424 size_t pixelSize = textureSize(size, format); 425 size_t pixelSize = textureSize(size, format);
425 ASSERT_EQ(4U, pixelSize); 426 ASSERT_EQ(4U, pixelSize);
426 427
427 CCResourceProvider::ResourceId id1 = childResourceProvider->createResource(p ool, size, format, CCResourceProvider::TextureUsageAny); 428 CCResourceProvider::ResourceId id1 = childResourceProvider->createResource(p ool, size, format, CCResourceProvider::TextureUsageAny);
428 uint8_t data1[4] = {1, 2, 3, 4}; 429 uint8_t data1[4] = {1, 2, 3, 4};
429 IntRect rect(IntPoint(), size); 430 IntRect rect(IntPoint(), size);
430 childResourceProvider->upload(id1, data1, rect, rect, IntSize()); 431 childResourceProvider->upload(id1, data1, rect, rect, IntSize());
431 432
432 CCResourceProvider::ResourceId id2 = childResourceProvider->createResource(p ool, size, format, CCResourceProvider::TextureUsageAny); 433 CCResourceProvider::ResourceId id2 = childResourceProvider->createResource(p ool, size, format, CCResourceProvider::TextureUsageAny);
433 uint8_t data2[4] = {5, 5, 5, 5}; 434 uint8_t data2[4] = {5, 5, 5, 5};
434 childResourceProvider->upload(id2, data2, rect, rect, IntSize()); 435 childResourceProvider->upload(id2, data2, rect, rect, IntSize());
435 436
436 int childPool = 2; 437 int childPool = 2;
437 int childId = m_resourceProvider->createChild(childPool); 438 int childId = m_resourceProvider->createChild(childPool);
438 439
439 { 440 {
440 // Transfer some resources to the parent. 441 // Transfer some resources to the parent.
441 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 442 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
442 resourceIdsToTransfer.append(id1); 443 resourceIdsToTransfer.push_back(id1);
443 resourceIdsToTransfer.append(id2); 444 resourceIdsToTransfer.push_back(id2);
444 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer); 445 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer);
445 EXPECT_NE(0u, list.syncPoint); 446 EXPECT_NE(0u, list.syncPoint);
446 EXPECT_EQ(2u, list.resources.size()); 447 EXPECT_EQ(2u, list.resources.size());
447 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); 448 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1));
448 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); 449 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2));
449 m_resourceProvider->receiveFromChild(childId, list); 450 m_resourceProvider->receiveFromChild(childId, list);
450 } 451 }
451 452
452 EXPECT_EQ(2u, m_resourceProvider->numResources()); 453 EXPECT_EQ(2u, m_resourceProvider->numResources());
453 EXPECT_EQ(2u, m_resourceProvider->mailboxCount()); 454 EXPECT_EQ(2u, m_resourceProvider->mailboxCount());
454 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChild ToParentMap(childId); 455 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChild ToParentMap(childId);
455 CCResourceProvider::ResourceId mappedId1 = resourceMap[id1]; 456 CCResourceProvider::ResourceId mappedId1 = resourceMap[id1];
456 CCResourceProvider::ResourceId mappedId2 = resourceMap[id2]; 457 CCResourceProvider::ResourceId mappedId2 = resourceMap[id2];
457 EXPECT_NE(0u, mappedId1); 458 EXPECT_NE(0u, mappedId1);
458 EXPECT_NE(0u, mappedId2); 459 EXPECT_NE(0u, mappedId2);
459 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id1)); 460 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id1));
460 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id2)); 461 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id2));
461 462
462 uint8_t result[4] = {0}; 463 uint8_t result[4] = {0};
463 getResourcePixels(mappedId1, size, format, result); 464 getResourcePixels(mappedId1, size, format, result);
464 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); 465 EXPECT_EQ(0, memcmp(data1, result, pixelSize));
465 466
466 getResourcePixels(mappedId2, size, format, result); 467 getResourcePixels(mappedId2, size, format, result);
467 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); 468 EXPECT_EQ(0, memcmp(data2, result, pixelSize));
468 469
469 { 470 {
470 // Check that transfering again the same resource from the child to the 471 // Check that transfering again the same resource from the child to the
471 // parent is a noop. 472 // parent is a noop.
472 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 473 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
473 resourceIdsToTransfer.append(id1); 474 resourceIdsToTransfer.push_back(id1);
474 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer); 475 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer);
475 EXPECT_EQ(0u, list.syncPoint); 476 EXPECT_EQ(0u, list.syncPoint);
476 EXPECT_EQ(0u, list.resources.size()); 477 EXPECT_EQ(0u, list.resources.size());
477 } 478 }
478 479
479 { 480 {
480 // Transfer resources back from the parent to the child. 481 // Transfer resources back from the parent to the child.
481 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 482 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
482 resourceIdsToTransfer.append(mappedId1); 483 resourceIdsToTransfer.push_back(mappedId1);
483 resourceIdsToTransfer.append(mappedId2); 484 resourceIdsToTransfer.push_back(mappedId2);
484 CCResourceProvider::TransferableResourceList list = m_resourceProvider-> prepareSendToChild(childId, resourceIdsToTransfer); 485 CCResourceProvider::TransferableResourceList list = m_resourceProvider-> prepareSendToChild(childId, resourceIdsToTransfer);
485 EXPECT_NE(0u, list.syncPoint); 486 EXPECT_NE(0u, list.syncPoint);
486 EXPECT_EQ(2u, list.resources.size()); 487 EXPECT_EQ(2u, list.resources.size());
487 childResourceProvider->receiveFromParent(list); 488 childResourceProvider->receiveFromParent(list);
488 } 489 }
489 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); 490 EXPECT_EQ(0u, m_resourceProvider->mailboxCount());
490 EXPECT_EQ(2u, childResourceProvider->mailboxCount()); 491 EXPECT_EQ(2u, childResourceProvider->mailboxCount());
491 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1)); 492 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1));
492 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2)); 493 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2));
493 494
494 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex t*>(childContext->context3D()); 495 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex t*>(childContext->context3D());
495 { 496 {
496 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i d1); 497 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i d1);
497 ASSERT_NE(0U, lock.textureId()); 498 ASSERT_NE(0U, lock.textureId());
498 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI d()); 499 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI d());
499 childContext3D->getPixels(size, format, result); 500 childContext3D->getPixels(size, format, result);
500 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); 501 EXPECT_EQ(0, memcmp(data1, result, pixelSize));
501 } 502 }
502 { 503 {
503 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i d2); 504 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i d2);
504 ASSERT_NE(0U, lock.textureId()); 505 ASSERT_NE(0U, lock.textureId());
505 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI d()); 506 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI d());
506 childContext3D->getPixels(size, format, result); 507 childContext3D->getPixels(size, format, result);
507 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); 508 EXPECT_EQ(0, memcmp(data2, result, pixelSize));
508 } 509 }
509 510
510 { 511 {
511 // Transfer resources to the parent again. 512 // Transfer resources to the parent again.
512 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 513 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
513 resourceIdsToTransfer.append(id1); 514 resourceIdsToTransfer.push_back(id1);
514 resourceIdsToTransfer.append(id2); 515 resourceIdsToTransfer.push_back(id2);
515 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer); 516 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer);
516 EXPECT_NE(0u, list.syncPoint); 517 EXPECT_NE(0u, list.syncPoint);
517 EXPECT_EQ(2u, list.resources.size()); 518 EXPECT_EQ(2u, list.resources.size());
518 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); 519 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1));
519 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); 520 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2));
520 m_resourceProvider->receiveFromChild(childId, list); 521 m_resourceProvider->receiveFromChild(childId, list);
521 } 522 }
522 523
523 EXPECT_EQ(2u, m_resourceProvider->numResources()); 524 EXPECT_EQ(2u, m_resourceProvider->numResources());
524 m_resourceProvider->destroyChild(childId); 525 m_resourceProvider->destroyChild(childId);
525 EXPECT_EQ(0u, m_resourceProvider->numResources()); 526 EXPECT_EQ(0u, m_resourceProvider->numResources());
526 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); 527 EXPECT_EQ(0u, m_resourceProvider->mailboxCount());
527 } 528 }
528 529
529 TEST_P(CCResourceProviderTest, DeleteTransferredResources) 530 TEST_P(CCResourceProviderTest, DeleteTransferredResources)
530 { 531 {
531 // Resource transfer is only supported with GL textures for now. 532 // Resource transfer is only supported with GL textures for now.
532 if (GetParam() != CCResourceProvider::GLTexture) 533 if (GetParam() != CCResourceProvider::GLTexture)
533 return; 534 return;
534 535
535 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c reate(ResourceProviderContext::create(m_sharedData.get()))); 536 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c reate(ResourceProviderContext::create(m_sharedData.get())));
536 OwnPtr<CCResourceProvider> childResourceProvider(CCResourceProvider::create( childContext.get())); 537 scoped_ptr<CCResourceProvider> childResourceProvider(CCResourceProvider::cre ate(childContext.get()));
537 538
538 IntSize size(1, 1); 539 IntSize size(1, 1);
539 WGC3Denum format = GraphicsContext3D::RGBA; 540 WGC3Denum format = GraphicsContext3D::RGBA;
540 int pool = 1; 541 int pool = 1;
541 size_t pixelSize = textureSize(size, format); 542 size_t pixelSize = textureSize(size, format);
542 ASSERT_EQ(4U, pixelSize); 543 ASSERT_EQ(4U, pixelSize);
543 544
544 CCResourceProvider::ResourceId id = childResourceProvider->createResource(po ol, size, format, CCResourceProvider::TextureUsageAny); 545 CCResourceProvider::ResourceId id = childResourceProvider->createResource(po ol, size, format, CCResourceProvider::TextureUsageAny);
545 uint8_t data[4] = {1, 2, 3, 4}; 546 uint8_t data[4] = {1, 2, 3, 4};
546 IntRect rect(IntPoint(), size); 547 IntRect rect(IntPoint(), size);
547 childResourceProvider->upload(id, data, rect, rect, IntSize()); 548 childResourceProvider->upload(id, data, rect, rect, IntSize());
548 549
549 int childPool = 2; 550 int childPool = 2;
550 int childId = m_resourceProvider->createChild(childPool); 551 int childId = m_resourceProvider->createChild(childPool);
551 552
552 { 553 {
553 // Transfer some resource to the parent. 554 // Transfer some resource to the parent.
554 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 555 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
555 resourceIdsToTransfer.append(id); 556 resourceIdsToTransfer.push_back(id);
556 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer); 557 CCResourceProvider::TransferableResourceList list = childResourceProvide r->prepareSendToParent(resourceIdsToTransfer);
557 EXPECT_NE(0u, list.syncPoint); 558 EXPECT_NE(0u, list.syncPoint);
558 EXPECT_EQ(1u, list.resources.size()); 559 EXPECT_EQ(1u, list.resources.size());
559 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id)); 560 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id));
560 m_resourceProvider->receiveFromChild(childId, list); 561 m_resourceProvider->receiveFromChild(childId, list);
561 } 562 }
562 563
563 // Delete textures in the child, while they are transfered. 564 // Delete textures in the child, while they are transfered.
564 childResourceProvider->deleteResource(id); 565 childResourceProvider->deleteResource(id);
565 EXPECT_EQ(1u, childResourceProvider->numResources()); 566 EXPECT_EQ(1u, childResourceProvider->numResources());
566 567
567 { 568 {
568 // Transfer resources back from the parent to the child. 569 // Transfer resources back from the parent to the child.
569 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getC hildToParentMap(childId); 570 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getC hildToParentMap(childId);
570 CCResourceProvider::ResourceId mappedId = resourceMap[id]; 571 CCResourceProvider::ResourceId mappedId = resourceMap[id];
571 EXPECT_NE(0u, mappedId); 572 EXPECT_NE(0u, mappedId);
572 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; 573 CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
573 resourceIdsToTransfer.append(mappedId); 574 resourceIdsToTransfer.push_back(mappedId);
574 CCResourceProvider::TransferableResourceList list = m_resourceProvider-> prepareSendToChild(childId, resourceIdsToTransfer); 575 CCResourceProvider::TransferableResourceList list = m_resourceProvider-> prepareSendToChild(childId, resourceIdsToTransfer);
575 EXPECT_NE(0u, list.syncPoint); 576 EXPECT_NE(0u, list.syncPoint);
576 EXPECT_EQ(1u, list.resources.size()); 577 EXPECT_EQ(1u, list.resources.size());
577 childResourceProvider->receiveFromParent(list); 578 childResourceProvider->receiveFromParent(list);
578 } 579 }
579 EXPECT_EQ(0u, childResourceProvider->numResources()); 580 EXPECT_EQ(0u, childResourceProvider->numResources());
580 } 581 }
581 582
582 INSTANTIATE_TEST_CASE_P(CCResourceProviderTests, 583 INSTANTIATE_TEST_CASE_P(CCResourceProviderTests,
583 CCResourceProviderTest, 584 CCResourceProviderTest,
584 ::testing::Values(CCResourceProvider::GLTexture, 585 ::testing::Values(CCResourceProvider::GLTexture,
585 CCResourceProvider::Bitmap)); 586 CCResourceProvider::Bitmap));
586 587
587 } // namespace 588 } // namespace
OLDNEW
« no previous file with comments | « cc/resource_provider.cc ('k') | cc/scoped_texture_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698