| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resource_provider.h" | 5 #include "cc/resource_provider.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "cc/graphics_context.h" | 8 #include "cc/graphics_context.h" |
| 9 #include "cc/scoped_ptr_deque.h" | 9 #include "cc/scoped_ptr_deque.h" |
| 10 #include "cc/scoped_ptr_hash_map.h" | 10 #include "cc/scoped_ptr_hash_map.h" |
| 11 #include "cc/test/compositor_fake_web_graphics_context_3d.h" | 11 #include "cc/test/compositor_fake_web_graphics_context_3d.h" |
| 12 #include "cc/test/fake_web_compositor_output_surface.h" | 12 #include "cc/test/fake_output_surface.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "third_party/khronos/GLES2/gl2.h" | 14 #include "third_party/khronos/GLES2/gl2.h" |
| 15 #include "third_party/khronos/GLES2/gl2ext.h" | 15 #include "third_party/khronos/GLES2/gl2ext.h" |
| 16 #include "ui/gfx/rect.h" | 16 #include "ui/gfx/rect.h" |
| 17 #include <public/WebGraphicsContext3D.h> | 17 #include <public/WebGraphicsContext3D.h> |
| 18 | 18 |
| 19 using namespace WebKit; | 19 using namespace WebKit; |
| 20 | 20 |
| 21 namespace cc { | 21 namespace cc { |
| 22 namespace { | 22 namespace { |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 WebGLId m_currentTexture; | 262 WebGLId m_currentTexture; |
| 263 TextureMap m_textures; | 263 TextureMap m_textures; |
| 264 unsigned m_lastWaitedSyncPoint; | 264 unsigned m_lastWaitedSyncPoint; |
| 265 PendingProduceTextureList m_pendingProduceTextures; | 265 PendingProduceTextureList m_pendingProduceTextures; |
| 266 }; | 266 }; |
| 267 | 267 |
| 268 class ResourceProviderTest : public testing::TestWithParam<ResourceProvider::Res
ourceType> { | 268 class ResourceProviderTest : public testing::TestWithParam<ResourceProvider::Res
ourceType> { |
| 269 public: | 269 public: |
| 270 ResourceProviderTest() | 270 ResourceProviderTest() |
| 271 : m_sharedData(ContextSharedData::create()) | 271 : m_sharedData(ContextSharedData::create()) |
| 272 , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderConte
xt::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<Web
Kit::WebGraphicsContext3D>())) | 272 , m_context(FakeOutputSurface::Create(ResourceProviderContext::create(m_
sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<WebKit::WebGraph
icsContext3D>())) |
| 273 , m_resourceProvider(ResourceProvider::create(m_context.get())) | 273 , m_resourceProvider(ResourceProvider::create(m_context.get())) |
| 274 { | 274 { |
| 275 m_resourceProvider->setDefaultResourceType(GetParam()); | 275 m_resourceProvider->setDefaultResourceType(GetParam()); |
| 276 } | 276 } |
| 277 | 277 |
| 278 ResourceProviderContext* context() { return static_cast<ResourceProviderCont
ext*>(m_context->context3D()); } | 278 ResourceProviderContext* context() { return static_cast<ResourceProviderCont
ext*>(m_context->Context3D()); } |
| 279 | 279 |
| 280 void getResourcePixels(ResourceProvider::ResourceId id, const gfx::Size& siz
e, WGC3Denum format, uint8_t* pixels) | 280 void getResourcePixels(ResourceProvider::ResourceId id, const gfx::Size& siz
e, WGC3Denum format, uint8_t* pixels) |
| 281 { | 281 { |
| 282 if (GetParam() == ResourceProvider::GLTexture) { | 282 if (GetParam() == ResourceProvider::GLTexture) { |
| 283 ResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(),
id); | 283 ResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(),
id); |
| 284 ASSERT_NE(0U, lockGL.textureId()); | 284 ASSERT_NE(0U, lockGL.textureId()); |
| 285 context()->bindTexture(GL_TEXTURE_2D, lockGL.textureId()); | 285 context()->bindTexture(GL_TEXTURE_2D, lockGL.textureId()); |
| 286 context()->getPixels(size, format, pixels); | 286 context()->getPixels(size, format, pixels); |
| 287 } else if (GetParam() == ResourceProvider::Bitmap) { | 287 } else if (GetParam() == ResourceProvider::Bitmap) { |
| 288 ResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProv
ider.get(), id); | 288 ResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProv
ider.get(), id); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 | 407 |
| 408 m_resourceProvider->deleteResource(id); | 408 m_resourceProvider->deleteResource(id); |
| 409 } | 409 } |
| 410 | 410 |
| 411 TEST_P(ResourceProviderTest, TransferResources) | 411 TEST_P(ResourceProviderTest, TransferResources) |
| 412 { | 412 { |
| 413 // Resource transfer is only supported with GL textures for now. | 413 // Resource transfer is only supported with GL textures for now. |
| 414 if (GetParam() != ResourceProvider::GLTexture) | 414 if (GetParam() != ResourceProvider::GLTexture) |
| 415 return; | 415 return; |
| 416 | 416 |
| 417 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre
ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi
csContext3D>())); | 417 scoped_ptr<GraphicsContext> childContext(FakeOutputSurface::Create(ResourceP
roviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>(
))); |
| 418 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); | 418 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); |
| 419 | 419 |
| 420 gfx::Size size(1, 1); | 420 gfx::Size size(1, 1); |
| 421 WGC3Denum format = GL_RGBA; | 421 WGC3Denum format = GL_RGBA; |
| 422 int pool = 1; | 422 int pool = 1; |
| 423 size_t pixelSize = textureSize(size, format); | 423 size_t pixelSize = textureSize(size, format); |
| 424 ASSERT_EQ(4U, pixelSize); | 424 ASSERT_EQ(4U, pixelSize); |
| 425 | 425 |
| 426 ResourceProvider::ResourceId id1 = childResourceProvider->createResource(poo
l, size, format, ResourceProvider::TextureUsageAny); | 426 ResourceProvider::ResourceId id1 = childResourceProvider->createResource(poo
l, size, format, ResourceProvider::TextureUsageAny); |
| 427 uint8_t data1[4] = {1, 2, 3, 4}; | 427 uint8_t data1[4] = {1, 2, 3, 4}; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 resourceIdsToTransfer.push_back(mappedId2); | 483 resourceIdsToTransfer.push_back(mappedId2); |
| 484 TransferableResourceList list; | 484 TransferableResourceList list; |
| 485 m_resourceProvider->prepareSendToChild(childId, resourceIdsToTransfer, &
list); | 485 m_resourceProvider->prepareSendToChild(childId, resourceIdsToTransfer, &
list); |
| 486 EXPECT_NE(0u, list.sync_point); | 486 EXPECT_NE(0u, list.sync_point); |
| 487 EXPECT_EQ(2u, list.resources.size()); | 487 EXPECT_EQ(2u, list.resources.size()); |
| 488 childResourceProvider->receiveFromParent(list); | 488 childResourceProvider->receiveFromParent(list); |
| 489 } | 489 } |
| 490 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1)); | 490 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1)); |
| 491 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2)); | 491 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2)); |
| 492 | 492 |
| 493 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex
t*>(childContext->context3D()); | 493 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex
t*>(childContext->Context3D()); |
| 494 { | 494 { |
| 495 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id1
); | 495 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id1
); |
| 496 ASSERT_NE(0U, lock.textureId()); | 496 ASSERT_NE(0U, lock.textureId()); |
| 497 childContext3D->bindTexture(GL_TEXTURE_2D, lock.textureId()); | 497 childContext3D->bindTexture(GL_TEXTURE_2D, lock.textureId()); |
| 498 childContext3D->getPixels(size, format, result); | 498 childContext3D->getPixels(size, format, result); |
| 499 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); | 499 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); |
| 500 } | 500 } |
| 501 { | 501 { |
| 502 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id2
); | 502 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id2
); |
| 503 ASSERT_NE(0U, lock.textureId()); | 503 ASSERT_NE(0U, lock.textureId()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 524 m_resourceProvider->destroyChild(childId); | 524 m_resourceProvider->destroyChild(childId); |
| 525 EXPECT_EQ(0u, m_resourceProvider->numResources()); | 525 EXPECT_EQ(0u, m_resourceProvider->numResources()); |
| 526 } | 526 } |
| 527 | 527 |
| 528 TEST_P(ResourceProviderTest, DeleteTransferredResources) | 528 TEST_P(ResourceProviderTest, DeleteTransferredResources) |
| 529 { | 529 { |
| 530 // Resource transfer is only supported with GL textures for now. | 530 // Resource transfer is only supported with GL textures for now. |
| 531 if (GetParam() != ResourceProvider::GLTexture) | 531 if (GetParam() != ResourceProvider::GLTexture) |
| 532 return; | 532 return; |
| 533 | 533 |
| 534 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre
ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi
csContext3D>())); | 534 scoped_ptr<GraphicsContext> childContext(FakeOutputSurface::Create(ResourceP
roviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>(
))); |
| 535 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); | 535 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); |
| 536 | 536 |
| 537 gfx::Size size(1, 1); | 537 gfx::Size size(1, 1); |
| 538 WGC3Denum format = GL_RGBA; | 538 WGC3Denum format = GL_RGBA; |
| 539 int pool = 1; | 539 int pool = 1; |
| 540 size_t pixelSize = textureSize(size, format); | 540 size_t pixelSize = textureSize(size, format); |
| 541 ASSERT_EQ(4U, pixelSize); | 541 ASSERT_EQ(4U, pixelSize); |
| 542 | 542 |
| 543 ResourceProvider::ResourceId id = childResourceProvider->createResource(pool
, size, format, ResourceProvider::TextureUsageAny); | 543 ResourceProvider::ResourceId id = childResourceProvider->createResource(pool
, size, format, ResourceProvider::TextureUsageAny); |
| 544 uint8_t data[4] = {1, 2, 3, 4}; | 544 uint8_t data[4] = {1, 2, 3, 4}; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 EXPECT_EQ(0u, childResourceProvider->numResources()); | 580 EXPECT_EQ(0u, childResourceProvider->numResources()); |
| 581 } | 581 } |
| 582 | 582 |
| 583 INSTANTIATE_TEST_CASE_P(ResourceProviderTests, | 583 INSTANTIATE_TEST_CASE_P(ResourceProviderTests, |
| 584 ResourceProviderTest, | 584 ResourceProviderTest, |
| 585 ::testing::Values(ResourceProvider::GLTexture, | 585 ::testing::Values(ResourceProvider::GLTexture, |
| 586 ResourceProvider::Bitmap)); | 586 ResourceProvider::Bitmap)); |
| 587 | 587 |
| 588 } // namespace | 588 } // namespace |
| 589 } // namespace cc | 589 } // namespace cc |
| OLD | NEW |