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 |