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 3 // found in the LICENSE file. 4 5 #include "cc/resources/scoped_resource.h" 6 7 #include "cc/output/renderer.h" 8 #include "cc/test/fake_output_surface.h" 9 #include "cc/test/tiled_layer_test_common.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "third_party/khronos/GLES2/gl2.h" 12 13 namespace cc { 14 namespace { 15 16 TEST(ScopedResourceTest, NewScopedResource) { 17 scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); 18 scoped_ptr<ResourceProvider> resource_provider( 19 ResourceProvider::Create(context.get(), 0)); 20 scoped_ptr<ScopedResource> texture = 21 ScopedResource::create(resource_provider.get()); 22 23 // New scoped textures do not hold a texture yet. 24 EXPECT_EQ(0u, texture->id()); 25 26 // New scoped textures do not have a size yet. 27 EXPECT_EQ(gfx::Size(), texture->size()); 28 EXPECT_EQ(0u, texture->bytes()); 29 } 30 31 TEST(ScopedResourceTest, CreateScopedResource) { 32 scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); 33 scoped_ptr<ResourceProvider> resource_provider( 34 ResourceProvider::Create(context.get(), 0)); 35 scoped_ptr<ScopedResource> texture = 36 ScopedResource::create(resource_provider.get()); 37 texture->Allocate( 38 gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); 39 40 // The texture has an allocated byte-size now. 41 size_t expected_bytes = 30 * 30 * 4; 42 EXPECT_EQ(expected_bytes, texture->bytes()); 43 44 EXPECT_LT(0u, texture->id()); 45 EXPECT_EQ(static_cast<unsigned>(GL_RGBA), texture->format()); 46 EXPECT_EQ(gfx::Size(30, 30), texture->size()); 47 } 48 49 TEST(ScopedResourceTest, ScopedResourceIsDeleted) { 50 scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); 51 scoped_ptr<ResourceProvider> resource_provider( 52 ResourceProvider::Create(context.get(), 0)); 53 { 54 scoped_ptr<ScopedResource> texture = 55 ScopedResource::create(resource_provider.get()); 56 57 EXPECT_EQ(0u, resource_provider->num_resources()); 58 texture->Allocate( 59 gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); 60 EXPECT_LT(0u, texture->id()); 61 EXPECT_EQ(1u, resource_provider->num_resources()); 62 } 63 64 EXPECT_EQ(0u, resource_provider->num_resources()); 65 { 66 scoped_ptr<ScopedResource> texture = 67 ScopedResource::create(resource_provider.get()); 68 EXPECT_EQ(0u, resource_provider->num_resources()); 69 texture->Allocate( 70 gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); 71 EXPECT_LT(0u, texture->id()); 72 EXPECT_EQ(1u, resource_provider->num_resources()); 73 texture->Free(); 74 EXPECT_EQ(0u, resource_provider->num_resources()); 75 } 76 } 77 78 TEST(ScopedResourceTest, LeakScopedResource) { 79 scoped_ptr<OutputSurface> context(CreateFakeOutputSurface()); 80 scoped_ptr<ResourceProvider> resource_provider( 81 ResourceProvider::Create(context.get(), 0)); 82 { 83 scoped_ptr<ScopedResource> texture = 84 ScopedResource::create(resource_provider.get()); 85 86 EXPECT_EQ(0u, resource_provider->num_resources()); 87 texture->Allocate( 88 gfx::Size(30, 30), GL_RGBA, ResourceProvider::TextureUsageAny); 89 EXPECT_LT(0u, texture->id()); 90 EXPECT_EQ(1u, resource_provider->num_resources()); 91 92 texture->Leak(); 93 EXPECT_EQ(0u, texture->id()); 94 EXPECT_EQ(1u, resource_provider->num_resources()); 95 96 texture->Free(); 97 EXPECT_EQ(0u, texture->id()); 98 EXPECT_EQ(1u, resource_provider->num_resources()); 99 } 100 101 EXPECT_EQ(1u, resource_provider->num_resources()); 102 } 103 104 } // namespace 105 } // namespace cc 106