// 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 "CCScopedTexture.h" #include "CCRenderer.h" #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread #include "CCTiledLayerTestCommon.h" #include "FakeCCGraphicsContext.h" #include "GraphicsContext3D.h" #include using namespace cc; using namespace WebKit; using namespace WebKitTests; namespace { TEST(CCScopedTextureTest, NewScopedTexture) { OwnPtr context(createFakeCCGraphicsContext()); DebugScopedSetImplThread implThread; OwnPtr resourceProvider(CCResourceProvider::create(context.get(), UnthrottledUploader)); OwnPtr texture = CCScopedTexture::create(resourceProvider.get()); // New scoped textures do not hold a texture yet. EXPECT_EQ(0u, texture->id()); // New scoped textures do not have a size yet. EXPECT_EQ(IntSize(), texture->size()); EXPECT_EQ(0u, texture->bytes()); } TEST(CCScopedTextureTest, CreateScopedTexture) { OwnPtr context(createFakeCCGraphicsContext()); DebugScopedSetImplThread implThread; OwnPtr resourceProvider(CCResourceProvider::create(context.get(), UnthrottledUploader)); OwnPtr texture = CCScopedTexture::create(resourceProvider.get()); texture->allocate(CCRenderer::ImplPool, IntSize(30, 30), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); // The texture has an allocated byte-size now. size_t expectedBytes = 30 * 30 * 4; EXPECT_EQ(expectedBytes, texture->bytes()); EXPECT_LT(0u, texture->id()); EXPECT_EQ(GraphicsContext3D::RGBA, texture->format()); EXPECT_EQ(IntSize(30, 30), texture->size()); } TEST(CCScopedTextureTest, ScopedTextureIsDeleted) { OwnPtr context(createFakeCCGraphicsContext()); DebugScopedSetImplThread implThread; OwnPtr resourceProvider(CCResourceProvider::create(context.get(), UnthrottledUploader)); { OwnPtr texture = CCScopedTexture::create(resourceProvider.get()); EXPECT_EQ(0u, resourceProvider->numResources()); texture->allocate(CCRenderer::ImplPool, IntSize(30, 30), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); EXPECT_LT(0u, texture->id()); EXPECT_EQ(1u, resourceProvider->numResources()); } EXPECT_EQ(0u, resourceProvider->numResources()); { OwnPtr texture = CCScopedTexture::create(resourceProvider.get()); EXPECT_EQ(0u, resourceProvider->numResources()); texture->allocate(CCRenderer::ImplPool, IntSize(30, 30), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); EXPECT_LT(0u, texture->id()); EXPECT_EQ(1u, resourceProvider->numResources()); texture->free(); EXPECT_EQ(0u, resourceProvider->numResources()); } } TEST(CCScopedTextureTest, LeakScopedTexture) { OwnPtr context(createFakeCCGraphicsContext()); DebugScopedSetImplThread implThread; OwnPtr resourceProvider(CCResourceProvider::create(context.get(), UnthrottledUploader)); { OwnPtr texture = CCScopedTexture::create(resourceProvider.get()); EXPECT_EQ(0u, resourceProvider->numResources()); texture->allocate(CCRenderer::ImplPool, IntSize(30, 30), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); EXPECT_LT(0u, texture->id()); EXPECT_EQ(1u, resourceProvider->numResources()); texture->leak(); EXPECT_EQ(0u, texture->id()); EXPECT_EQ(1u, resourceProvider->numResources()); texture->free(); EXPECT_EQ(0u, texture->id()); EXPECT_EQ(1u, resourceProvider->numResources()); } EXPECT_EQ(1u, resourceProvider->numResources()); } }