diff options
Diffstat (limited to 'chromium/cc/resources/scoped_resource_unittest.cc')
-rw-r--r-- | chromium/cc/resources/scoped_resource_unittest.cc | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/chromium/cc/resources/scoped_resource_unittest.cc b/chromium/cc/resources/scoped_resource_unittest.cc new file mode 100644 index 00000000000..b08c1e21daf --- /dev/null +++ b/chromium/cc/resources/scoped_resource_unittest.cc @@ -0,0 +1,105 @@ +// 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 "cc/resources/scoped_resource.h" + +#include "cc/output/renderer.h" +#include "cc/test/fake_output_surface.h" +#include "cc/test/tiled_layer_test_common.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/khronos/GLES2/gl2.h" + +namespace cc { +namespace { + +TEST(ScopedResourceTest, NewScopedResource) { + scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); + scoped_ptr<ResourceProvider> resource_provider( + ResourceProvider::Create(context.get(), 0)); + scoped_ptr<ScopedResource> texture = + ScopedResource::create(resource_provider.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(gfx::Size(), texture->size()); + EXPECT_EQ(0u, texture->bytes()); +} + +TEST(ScopedResourceTest, CreateScopedResource) { + scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); + scoped_ptr<ResourceProvider> resource_provider( + ResourceProvider::Create(context.get(), 0)); + scoped_ptr<ScopedResource> texture = + ScopedResource::create(resource_provider.get()); + texture->Allocate( + gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); + + // The texture has an allocated byte-size now. + size_t expected_bytes = 30 * 30 * 4; + EXPECT_EQ(expected_bytes, texture->bytes()); + + EXPECT_LT(0u, texture->id()); + EXPECT_EQ(static_cast<unsigned>(GL_RGBA), texture->format()); + EXPECT_EQ(gfx::Size(30, 30), texture->size()); +} + +TEST(ScopedResourceTest, ScopedResourceIsDeleted) { + scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); + scoped_ptr<ResourceProvider> resource_provider( + ResourceProvider::Create(context.get(), 0)); + { + scoped_ptr<ScopedResource> texture = + ScopedResource::create(resource_provider.get()); + + EXPECT_EQ(0u, resource_provider->num_resources()); + texture->Allocate( + gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); + EXPECT_LT(0u, texture->id()); + EXPECT_EQ(1u, resource_provider->num_resources()); + } + + EXPECT_EQ(0u, resource_provider->num_resources()); + { + scoped_ptr<ScopedResource> texture = + ScopedResource::create(resource_provider.get()); + EXPECT_EQ(0u, resource_provider->num_resources()); + texture->Allocate( + gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); + EXPECT_LT(0u, texture->id()); + EXPECT_EQ(1u, resource_provider->num_resources()); + texture->Free(); + EXPECT_EQ(0u, resource_provider->num_resources()); + } +} + +TEST(ScopedResourceTest, LeakScopedResource) { + scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); + scoped_ptr<ResourceProvider> resource_provider( + ResourceProvider::Create(context.get(), 0)); + { + scoped_ptr<ScopedResource> texture = + ScopedResource::create(resource_provider.get()); + + EXPECT_EQ(0u, resource_provider->num_resources()); + texture->Allocate( + gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); + EXPECT_LT(0u, texture->id()); + EXPECT_EQ(1u, resource_provider->num_resources()); + + texture->Leak(); + EXPECT_EQ(0u, texture->id()); + EXPECT_EQ(1u, resource_provider->num_resources()); + + texture->Free(); + EXPECT_EQ(0u, texture->id()); + EXPECT_EQ(1u, resource_provider->num_resources()); + } + + EXPECT_EQ(1u, resource_provider->num_resources()); +} + +} // namespace +} // namespace cc |