| Index: cc/CCResourceProviderTest.cpp
|
| diff --git a/cc/CCResourceProviderTest.cpp b/cc/CCResourceProviderTest.cpp
|
| deleted file mode 100644
|
| index 637c3a47027122c42ff27ff502469ccda5698593..0000000000000000000000000000000000000000
|
| --- a/cc/CCResourceProviderTest.cpp
|
| +++ /dev/null
|
| @@ -1,535 +0,0 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "config.h"
|
| -
|
| -#include "CCResourceProvider.h"
|
| -
|
| -#include "CCGraphicsContext.h"
|
| -#include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
|
| -#include "CompositorFakeWebGraphicsContext3D.h"
|
| -#include "Extensions3DChromium.h"
|
| -#include "FakeWebCompositorOutputSurface.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include <public/WebGraphicsContext3D.h>
|
| -#include <wtf/HashMap.h>
|
| -#include <wtf/OwnArrayPtr.h>
|
| -#include <wtf/OwnPtr.h>
|
| -
|
| -using namespace cc;
|
| -using namespace WebKit;
|
| -
|
| -namespace {
|
| -
|
| -size_t textureSize(const IntSize& size, WGC3Denum format)
|
| -{
|
| - unsigned int componentsPerPixel = 4;
|
| - unsigned int bytesPerComponent = 1;
|
| - return size.width() * size.height() * componentsPerPixel * bytesPerComponent;
|
| -}
|
| -
|
| -struct Texture {
|
| - Texture(const IntSize& size, WGC3Denum format)
|
| - : size(size)
|
| - , format(format)
|
| - , data(adoptArrayPtr(new uint8_t[textureSize(size, format)]))
|
| - {
|
| - }
|
| -
|
| - IntSize size;
|
| - WGC3Denum format;
|
| - OwnArrayPtr<uint8_t> data;
|
| -};
|
| -
|
| -// Shared data between multiple ResourceProviderContext. This contains mailbox
|
| -// contents as well as information about sync points.
|
| -class ContextSharedData {
|
| -public:
|
| - static PassOwnPtr<ContextSharedData> create() { return adoptPtr(new ContextSharedData()); }
|
| -
|
| - unsigned insertSyncPoint() { return m_nextSyncPoint++; }
|
| -
|
| - void genMailbox(WGC3Dbyte* mailbox)
|
| - {
|
| - memset(mailbox, 0, sizeof(WGC3Dbyte[64]));
|
| - memcpy(mailbox, &m_nextMailBox, sizeof(m_nextMailBox));
|
| - ++m_nextMailBox;
|
| - }
|
| -
|
| - void produceTexture(const WGC3Dbyte* mailboxName, unsigned syncPoint, PassOwnPtr<Texture> texture)
|
| - {
|
| - unsigned mailbox = 0;
|
| - memcpy(&mailbox, mailboxName, sizeof(mailbox));
|
| - ASSERT(mailbox && mailbox < m_nextMailBox);
|
| - m_textures.set(mailbox, texture);
|
| - ASSERT(m_syncPointForMailbox.get(mailbox) < syncPoint);
|
| - m_syncPointForMailbox.set(mailbox, syncPoint);
|
| - }
|
| -
|
| - PassOwnPtr<Texture> consumeTexture(const WGC3Dbyte* mailboxName, unsigned syncPoint)
|
| - {
|
| - unsigned mailbox = 0;
|
| - memcpy(&mailbox, mailboxName, sizeof(mailbox));
|
| - ASSERT(mailbox && mailbox < m_nextMailBox);
|
| -
|
| - // If the latest sync point the context has waited on is before the sync
|
| - // point for when the mailbox was set, pretend we never saw that
|
| - // produceTexture.
|
| - if (m_syncPointForMailbox.get(mailbox) < syncPoint)
|
| - return nullptr;
|
| - return m_textures.take(mailbox);
|
| - }
|
| -
|
| -private:
|
| - ContextSharedData()
|
| - : m_nextSyncPoint(1)
|
| - , m_nextMailBox(1)
|
| - { }
|
| -
|
| - unsigned m_nextSyncPoint;
|
| - unsigned m_nextMailBox;
|
| - typedef HashMap<unsigned, OwnPtr<Texture> > TextureMap;
|
| - TextureMap m_textures;
|
| - HashMap<unsigned, unsigned> m_syncPointForMailbox;
|
| -};
|
| -
|
| -class ResourceProviderContext : public CompositorFakeWebGraphicsContext3D {
|
| -public:
|
| - static PassOwnPtr<ResourceProviderContext> create(ContextSharedData* sharedData) { return adoptPtr(new ResourceProviderContext(Attributes(), sharedData)); }
|
| -
|
| - virtual unsigned insertSyncPoint()
|
| - {
|
| - unsigned syncPoint = m_sharedData->insertSyncPoint();
|
| - // Commit the produceTextureCHROMIUM calls at this point, so that
|
| - // they're associated with the sync point.
|
| - for (PendingProduceTextureList::iterator it = m_pendingProduceTextures.begin(); it != m_pendingProduceTextures.end(); ++it)
|
| - m_sharedData->produceTexture((*it)->mailbox, syncPoint, (*it)->texture.release());
|
| - m_pendingProduceTextures.clear();
|
| - return syncPoint;
|
| - }
|
| -
|
| - virtual void waitSyncPoint(unsigned syncPoint)
|
| - {
|
| - m_lastWaitedSyncPoint = std::max(syncPoint, m_lastWaitedSyncPoint);
|
| - }
|
| -
|
| - virtual void bindTexture(WGC3Denum target, WebGLId texture)
|
| - {
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| - ASSERT(!texture || m_textures.find(texture) != m_textures.end());
|
| - m_currentTexture = texture;
|
| - }
|
| -
|
| - virtual WebGLId createTexture()
|
| - {
|
| - WebGLId id = CompositorFakeWebGraphicsContext3D::createTexture();
|
| - m_textures.add(id, nullptr);
|
| - return id;
|
| - }
|
| -
|
| - virtual void deleteTexture(WebGLId id)
|
| - {
|
| - TextureMap::iterator it = m_textures.find(id);
|
| - ASSERT(it != m_textures.end());
|
| - m_textures.remove(it);
|
| - if (m_currentTexture == id)
|
| - m_currentTexture = 0;
|
| - }
|
| -
|
| - virtual void texStorage2DEXT(WGC3Denum target, WGC3Dint levels, WGC3Duint internalformat,
|
| - WGC3Dint width, WGC3Dint height)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| - ASSERT(levels == 1);
|
| - WGC3Denum format = GraphicsContext3D::RGBA;
|
| - switch (internalformat) {
|
| - case Extensions3D::RGBA8_OES:
|
| - break;
|
| - case Extensions3DChromium::BGRA8_EXT:
|
| - format = Extensions3D::BGRA_EXT;
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| - allocateTexture(IntSize(width, height), format);
|
| - }
|
| -
|
| - virtual void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denum type, const void* pixels)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| - ASSERT(!level);
|
| - ASSERT(internalformat == format);
|
| - ASSERT(!border);
|
| - ASSERT(type == GraphicsContext3D::UNSIGNED_BYTE);
|
| - allocateTexture(IntSize(width, height), format);
|
| - if (pixels)
|
| - setPixels(0, 0, width, height, pixels);
|
| - }
|
| -
|
| - virtual void texSubImage2D(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, const void* pixels)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| - ASSERT(!level);
|
| - ASSERT(m_textures.get(m_currentTexture));
|
| - ASSERT(m_textures.get(m_currentTexture)->format == format);
|
| - ASSERT(type == GraphicsContext3D::UNSIGNED_BYTE);
|
| - ASSERT(pixels);
|
| - setPixels(xoffset, yoffset, width, height, pixels);
|
| - }
|
| -
|
| - virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox) { return m_sharedData->genMailbox(mailbox); }
|
| - virtual void produceTextureCHROMIUM(WGC3Denum target, const WGC3Dbyte* mailbox)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| -
|
| - // Delay movind the texture into the mailbox until the next
|
| - // insertSyncPoint, so that it is not visible to other contexts that
|
| - // haven't waited on that sync point.
|
| - OwnPtr<PendingProduceTexture> pending(adoptPtr(new PendingProduceTexture));
|
| - memcpy(pending->mailbox, mailbox, sizeof(pending->mailbox));
|
| - pending->texture = m_textures.take(m_currentTexture);
|
| - m_textures.set(m_currentTexture, nullptr);
|
| - m_pendingProduceTextures.append(pending.release());
|
| - }
|
| -
|
| - virtual void consumeTextureCHROMIUM(WGC3Denum target, const WGC3Dbyte* mailbox)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - ASSERT(target == GraphicsContext3D::TEXTURE_2D);
|
| - m_textures.set(m_currentTexture, m_sharedData->consumeTexture(mailbox, m_lastWaitedSyncPoint));
|
| - }
|
| -
|
| - void getPixels(const IntSize& size, WGC3Denum format, uint8_t* pixels)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - Texture* texture = m_textures.get(m_currentTexture);
|
| - ASSERT(texture);
|
| - ASSERT(texture->size == size);
|
| - ASSERT(texture->format == format);
|
| - memcpy(pixels, texture->data.get(), textureSize(size, format));
|
| - }
|
| -
|
| - int textureCount()
|
| - {
|
| - return m_textures.size();
|
| - }
|
| -
|
| -protected:
|
| - ResourceProviderContext(const Attributes& attrs, ContextSharedData* sharedData)
|
| - : CompositorFakeWebGraphicsContext3D(attrs)
|
| - , m_sharedData(sharedData)
|
| - , m_currentTexture(0)
|
| - , m_lastWaitedSyncPoint(0)
|
| - { }
|
| -
|
| -private:
|
| - void allocateTexture(const IntSize& size, WGC3Denum format)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - m_textures.set(m_currentTexture, adoptPtr(new Texture(size, format)));
|
| - }
|
| -
|
| - void setPixels(int xoffset, int yoffset, int width, int height, const void* pixels)
|
| - {
|
| - ASSERT(m_currentTexture);
|
| - Texture* texture = m_textures.get(m_currentTexture);
|
| - ASSERT(texture);
|
| - ASSERT(xoffset >= 0 && xoffset+width <= texture->size.width());
|
| - ASSERT(yoffset >= 0 && yoffset+height <= texture->size.height());
|
| - ASSERT(pixels);
|
| - size_t inPitch = textureSize(IntSize(width, 1), texture->format);
|
| - size_t outPitch = textureSize(IntSize(texture->size.width(), 1), texture->format);
|
| - uint8_t* dest = texture->data.get() + yoffset * outPitch + textureSize(IntSize(xoffset, 1), texture->format);
|
| - const uint8_t* src = static_cast<const uint8_t*>(pixels);
|
| - for (int i = 0; i < height; ++i) {
|
| - memcpy(dest, src, inPitch);
|
| - dest += outPitch;
|
| - src += inPitch;
|
| - }
|
| - }
|
| -
|
| - typedef HashMap<WebGLId, OwnPtr<Texture> > TextureMap;
|
| - struct PendingProduceTexture {
|
| - WGC3Dbyte mailbox[64];
|
| - OwnPtr<Texture> texture;
|
| - };
|
| - typedef Deque<OwnPtr<PendingProduceTexture> > PendingProduceTextureList;
|
| - ContextSharedData* m_sharedData;
|
| - WebGLId m_currentTexture;
|
| - TextureMap m_textures;
|
| - unsigned m_lastWaitedSyncPoint;
|
| - PendingProduceTextureList m_pendingProduceTextures;
|
| -};
|
| -
|
| -class CCResourceProviderTest : public testing::TestWithParam<CCResourceProvider::ResourceType> {
|
| -public:
|
| - CCResourceProviderTest()
|
| - : m_sharedData(ContextSharedData::create())
|
| - , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderContext::create(m_sharedData.get())))
|
| - , m_resourceProvider(CCResourceProvider::create(m_context.get()))
|
| - {
|
| - m_resourceProvider->setDefaultResourceType(GetParam());
|
| - }
|
| -
|
| - ResourceProviderContext* context() { return static_cast<ResourceProviderContext*>(m_context->context3D()); }
|
| -
|
| - void getResourcePixels(CCResourceProvider::ResourceId id, const IntSize& size, WGC3Denum format, uint8_t* pixels)
|
| - {
|
| - if (GetParam() == CCResourceProvider::GLTexture) {
|
| - CCResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(), id);
|
| - ASSERT_NE(0U, lockGL.textureId());
|
| - context()->bindTexture(GraphicsContext3D::TEXTURE_2D, lockGL.textureId());
|
| - context()->getPixels(size, format, pixels);
|
| - } else if (GetParam() == CCResourceProvider::Bitmap) {
|
| - CCResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProvider.get(), id);
|
| - memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.skBitmap()->getSize());
|
| - }
|
| - }
|
| -
|
| - void expectNumResources(int count)
|
| - {
|
| - EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources()));
|
| - if (GetParam() == CCResourceProvider::GLTexture)
|
| - EXPECT_EQ(count, context()->textureCount());
|
| - }
|
| -
|
| -protected:
|
| - DebugScopedSetImplThread implThread;
|
| - OwnPtr<ContextSharedData> m_sharedData;
|
| - scoped_ptr<CCGraphicsContext> m_context;
|
| - OwnPtr<CCResourceProvider> m_resourceProvider;
|
| -};
|
| -
|
| -TEST_P(CCResourceProviderTest, Basic)
|
| -{
|
| - IntSize size(1, 1);
|
| - WGC3Denum format = GraphicsContext3D::RGBA;
|
| - int pool = 1;
|
| - size_t pixelSize = textureSize(size, format);
|
| - ASSERT_EQ(4U, pixelSize);
|
| -
|
| - CCResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny);
|
| - expectNumResources(1);
|
| -
|
| - uint8_t data[4] = {1, 2, 3, 4};
|
| - IntRect rect(IntPoint(), size);
|
| - m_resourceProvider->upload(id, data, rect, rect, IntSize());
|
| -
|
| - uint8_t result[4] = {0};
|
| - getResourcePixels(id, size, format, result);
|
| - EXPECT_EQ(0, memcmp(data, result, pixelSize));
|
| -
|
| - m_resourceProvider->deleteResource(id);
|
| - expectNumResources(0);
|
| -}
|
| -
|
| -TEST_P(CCResourceProviderTest, DeleteOwnedResources)
|
| -{
|
| - IntSize size(1, 1);
|
| - WGC3Denum format = GraphicsContext3D::RGBA;
|
| - int pool = 1;
|
| -
|
| - const int count = 3;
|
| - for (int i = 0; i < count; ++i)
|
| - m_resourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny);
|
| - expectNumResources(3);
|
| -
|
| - m_resourceProvider->deleteOwnedResources(pool+1);
|
| - expectNumResources(3);
|
| -
|
| - m_resourceProvider->deleteOwnedResources(pool);
|
| - expectNumResources(0);
|
| -}
|
| -
|
| -TEST_P(CCResourceProviderTest, Upload)
|
| -{
|
| - IntSize size(2, 2);
|
| - WGC3Denum format = GraphicsContext3D::RGBA;
|
| - int pool = 1;
|
| - size_t pixelSize = textureSize(size, format);
|
| - ASSERT_EQ(16U, pixelSize);
|
| -
|
| - CCResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny);
|
| -
|
| - uint8_t image[16] = {0};
|
| - IntRect imageRect(IntPoint(), size);
|
| - m_resourceProvider->upload(id, image, imageRect, imageRect, IntSize());
|
| -
|
| - for (uint8_t i = 0 ; i < pixelSize; ++i)
|
| - image[i] = i;
|
| -
|
| - uint8_t result[16] = {0};
|
| - {
|
| - IntRect sourceRect(0, 0, 1, 1);
|
| - IntSize destOffset(0, 0);
|
| - m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset);
|
| -
|
| - uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 0, 0, 0};
|
| - getResourcePixels(id, size, format, result);
|
| - EXPECT_EQ(0, memcmp(expected, result, pixelSize));
|
| - }
|
| - {
|
| - IntRect sourceRect(0, 0, 1, 1);
|
| - IntSize destOffset(1, 1);
|
| - m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset);
|
| -
|
| - uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 1, 2, 3};
|
| - getResourcePixels(id, size, format, result);
|
| - EXPECT_EQ(0, memcmp(expected, result, pixelSize));
|
| - }
|
| - {
|
| - IntRect sourceRect(1, 0, 1, 1);
|
| - IntSize destOffset(0, 1);
|
| - m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset);
|
| -
|
| - uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
|
| - 4, 5, 6, 7, 0, 1, 2, 3};
|
| - getResourcePixels(id, size, format, result);
|
| - EXPECT_EQ(0, memcmp(expected, result, pixelSize));
|
| - }
|
| - {
|
| - IntRect offsetImageRect(IntPoint(100, 100), size);
|
| - IntRect sourceRect(100, 100, 1, 1);
|
| - IntSize destOffset(1, 0);
|
| - m_resourceProvider->upload(id, image, offsetImageRect, sourceRect, destOffset);
|
| -
|
| - uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3,
|
| - 4, 5, 6, 7, 0, 1, 2, 3};
|
| - getResourcePixels(id, size, format, result);
|
| - EXPECT_EQ(0, memcmp(expected, result, pixelSize));
|
| - }
|
| -
|
| -
|
| - m_resourceProvider->deleteResource(id);
|
| -}
|
| -
|
| -TEST_P(CCResourceProviderTest, TransferResources)
|
| -{
|
| - // Resource transfer is only supported with GL textures for now.
|
| - if (GetParam() != CCResourceProvider::GLTexture)
|
| - return;
|
| -
|
| - scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::create(ResourceProviderContext::create(m_sharedData.get())));
|
| - OwnPtr<CCResourceProvider> childResourceProvider(CCResourceProvider::create(childContext.get()));
|
| -
|
| - IntSize size(1, 1);
|
| - WGC3Denum format = GraphicsContext3D::RGBA;
|
| - int pool = 1;
|
| - size_t pixelSize = textureSize(size, format);
|
| - ASSERT_EQ(4U, pixelSize);
|
| -
|
| - CCResourceProvider::ResourceId id1 = childResourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny);
|
| - uint8_t data1[4] = {1, 2, 3, 4};
|
| - IntRect rect(IntPoint(), size);
|
| - childResourceProvider->upload(id1, data1, rect, rect, IntSize());
|
| -
|
| - CCResourceProvider::ResourceId id2 = childResourceProvider->createResource(pool, size, format, CCResourceProvider::TextureUsageAny);
|
| - uint8_t data2[4] = {5, 5, 5, 5};
|
| - childResourceProvider->upload(id2, data2, rect, rect, IntSize());
|
| -
|
| - int childPool = 2;
|
| - int childId = m_resourceProvider->createChild(childPool);
|
| -
|
| - {
|
| - // Transfer some resources to the parent.
|
| - CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
|
| - resourceIdsToTransfer.append(id1);
|
| - resourceIdsToTransfer.append(id2);
|
| - CCResourceProvider::TransferableResourceList list = childResourceProvider->prepareSendToParent(resourceIdsToTransfer);
|
| - EXPECT_NE(0u, list.syncPoint);
|
| - EXPECT_EQ(2u, list.resources.size());
|
| - EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1));
|
| - EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2));
|
| - m_resourceProvider->receiveFromChild(childId, list);
|
| - }
|
| -
|
| - EXPECT_EQ(2u, m_resourceProvider->numResources());
|
| - EXPECT_EQ(2u, m_resourceProvider->mailboxCount());
|
| - CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChildToParentMap(childId);
|
| - CCResourceProvider::ResourceId mappedId1 = resourceMap.get(id1);
|
| - CCResourceProvider::ResourceId mappedId2 = resourceMap.get(id2);
|
| - EXPECT_NE(0u, mappedId1);
|
| - EXPECT_NE(0u, mappedId2);
|
| - EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id1));
|
| - EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id2));
|
| -
|
| - uint8_t result[4] = {0};
|
| - getResourcePixels(mappedId1, size, format, result);
|
| - EXPECT_EQ(0, memcmp(data1, result, pixelSize));
|
| -
|
| - getResourcePixels(mappedId2, size, format, result);
|
| - EXPECT_EQ(0, memcmp(data2, result, pixelSize));
|
| -
|
| - {
|
| - // Check that transfering again the same resource from the child to the
|
| - // parent is a noop.
|
| - CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
|
| - resourceIdsToTransfer.append(id1);
|
| - CCResourceProvider::TransferableResourceList list = childResourceProvider->prepareSendToParent(resourceIdsToTransfer);
|
| - EXPECT_EQ(0u, list.syncPoint);
|
| - EXPECT_EQ(0u, list.resources.size());
|
| - }
|
| -
|
| - {
|
| - // Transfer resources back from the parent to the child.
|
| - CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
|
| - resourceIdsToTransfer.append(mappedId1);
|
| - resourceIdsToTransfer.append(mappedId2);
|
| - CCResourceProvider::TransferableResourceList list = m_resourceProvider->prepareSendToChild(childId, resourceIdsToTransfer);
|
| - EXPECT_NE(0u, list.syncPoint);
|
| - EXPECT_EQ(2u, list.resources.size());
|
| - childResourceProvider->receiveFromParent(list);
|
| - }
|
| - EXPECT_EQ(0u, m_resourceProvider->mailboxCount());
|
| - EXPECT_EQ(2u, childResourceProvider->mailboxCount());
|
| - EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1));
|
| - EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2));
|
| -
|
| - ResourceProviderContext* childContext3D = static_cast<ResourceProviderContext*>(childContext->context3D());
|
| - {
|
| - CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id1);
|
| - ASSERT_NE(0U, lock.textureId());
|
| - childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId());
|
| - childContext3D->getPixels(size, format, result);
|
| - EXPECT_EQ(0, memcmp(data1, result, pixelSize));
|
| - }
|
| - {
|
| - CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id2);
|
| - ASSERT_NE(0U, lock.textureId());
|
| - childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureId());
|
| - childContext3D->getPixels(size, format, result);
|
| - EXPECT_EQ(0, memcmp(data2, result, pixelSize));
|
| - }
|
| -
|
| - {
|
| - // Transfer resources to the parent again.
|
| - CCResourceProvider::ResourceIdArray resourceIdsToTransfer;
|
| - resourceIdsToTransfer.append(id1);
|
| - resourceIdsToTransfer.append(id2);
|
| - CCResourceProvider::TransferableResourceList list = childResourceProvider->prepareSendToParent(resourceIdsToTransfer);
|
| - EXPECT_NE(0u, list.syncPoint);
|
| - EXPECT_EQ(2u, list.resources.size());
|
| - EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1));
|
| - EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2));
|
| - m_resourceProvider->receiveFromChild(childId, list);
|
| - }
|
| -
|
| - EXPECT_EQ(2u, m_resourceProvider->numResources());
|
| - m_resourceProvider->destroyChild(childId);
|
| - EXPECT_EQ(0u, m_resourceProvider->numResources());
|
| - EXPECT_EQ(0u, m_resourceProvider->mailboxCount());
|
| -}
|
| -
|
| -INSTANTIATE_TEST_CASE_P(CCResourceProviderTests,
|
| - CCResourceProviderTest,
|
| - ::testing::Values(CCResourceProvider::GLTexture,
|
| - CCResourceProvider::Bitmap));
|
| -
|
| -} // namespace
|
|
|