Chromium Code Reviews| Index: tests/ResourceCacheTest.cpp |
| diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp |
| index 7262b43a0ff767ef0db36ecca6f1f23bbf5bffa0..27dd3b35514da4aba1c76dd6c72ec989a464e031 100644 |
| --- a/tests/ResourceCacheTest.cpp |
| +++ b/tests/ResourceCacheTest.cpp |
| @@ -57,11 +57,14 @@ static void test_cache(skiatest::Reporter* reporter, |
| } |
| class TestResource : public GrCacheable { |
| + static const size_t kDefaultSize = 100; |
| + |
| public: |
| SK_DECLARE_INST_COUNT(TestResource); |
| - TestResource() |
| + TestResource(size_t size = kDefaultSize) |
| : fCache(NULL) |
| - , fToDelete(NULL) { |
| + , fToDelete(NULL) |
| + , fSize(size) { |
| ++fAlive; |
| } |
| @@ -74,7 +77,12 @@ public: |
| } |
| } |
| - size_t gpuMemorySize() const SK_OVERRIDE { return 100; } |
| + void setSize(size_t size) { |
| + fSize = size; |
| + this->didChangeGpuMemorySize(); |
| + } |
| + |
| + size_t gpuMemorySize() const SK_OVERRIDE { return fSize; } |
| bool isValidOnGpu() const SK_OVERRIDE { return true; } |
| @@ -88,6 +96,7 @@ public: |
| private: |
| GrResourceCache* fCache; |
| TestResource* fToDelete; |
| + size_t fSize; |
| static int fAlive; |
| typedef GrCacheable INHERITED; |
| @@ -174,6 +183,96 @@ static void test_cache_delete_on_destruction(skiatest::Reporter* reporter, |
| } |
| } |
| +static void test_resource_size_changed(skiatest::Reporter* reporter, |
| + GrContext* context) { |
| + GrCacheID::Domain domain = GrCacheID::GenerateDomain(); |
| + GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); |
| + |
| + GrCacheID::Key key1Data; |
| + key1Data.fData64[0] = 0; |
| + key1Data.fData64[1] = 0; |
| + GrResourceKey key1(GrCacheID(domain, key1Data), t, 0); |
| + |
| + GrCacheID::Key key2Data; |
| + key2Data.fData64[0] = 1; |
| + key2Data.fData64[1] = 0; |
| + GrResourceKey key2(GrCacheID(domain, key2Data), t, 0); |
| + |
| + // Test changing resources sizes (both increase & decrease). |
| + { |
| + GrResourceCache cache(2, 300); |
| + |
| + TestResource* a = new TestResource(); |
|
robertphillips
2014/04/30 19:06:54
Does this actually change the resource size with t
Chris Dalton
2014/04/30 19:08:32
Good point. I can upload one more patchset.
|
| + a->setSize(100); // Test didChangeGpuMemorySize() when not in the cache. |
| + cache.addResource(key1, a); |
| + a->unref(); |
| + |
| + TestResource* b = new TestResource(); |
| + b->setSize(100); |
| + cache.addResource(key2, b); |
| + b->unref(); |
| + |
| + REPORTER_ASSERT(reporter, 200 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + |
| + static_cast<TestResource*>(cache.find(key2))->setSize(200); |
| + static_cast<TestResource*>(cache.find(key1))->setSize(50); |
| + |
| + REPORTER_ASSERT(reporter, 250 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + } |
| + // Test increasing a resources size beyond the cache budget. |
| + { |
| + GrResourceCache cache(2, 300); |
| + |
| + TestResource* a = new TestResource(100); |
| + cache.addResource(key1, a); |
| + a->unref(); |
| + |
| + TestResource* b = new TestResource(100); |
| + cache.addResource(key2, b); |
| + b->unref(); |
| + |
| + REPORTER_ASSERT(reporter, 200 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + |
| + static_cast<TestResource*>(cache.find(key2))->setSize(201); |
| + REPORTER_ASSERT(reporter, NULL == cache.find(key1)); |
| + |
| + REPORTER_ASSERT(reporter, 201 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 1 == cache.getCachedResourceCount()); |
| + } |
| + // Test changing the size of an exclusively-held resource. |
| + { |
| + GrResourceCache cache(2, 300); |
| + |
| + TestResource* a = new TestResource(100); |
| + cache.addResource(key1, a); |
| + cache.makeExclusive(a->getCacheEntry()); |
| + |
| + TestResource* b = new TestResource(100); |
| + cache.addResource(key2, b); |
| + b->unref(); |
| + |
| + REPORTER_ASSERT(reporter, 200 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + REPORTER_ASSERT(reporter, NULL == cache.find(key1)); |
| + |
| + a->setSize(200); |
| + |
| + REPORTER_ASSERT(reporter, 300 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + // Internal resource cache validation will test the detached size (debug mode only). |
| + |
| + cache.makeNonExclusive(a->getCacheEntry()); |
| + |
| + REPORTER_ASSERT(reporter, 300 == cache.getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + REPORTER_ASSERT(reporter, NULL != cache.find(key1)); |
| + // Internal resource cache validation will test the detached size (debug mode only). |
| + } |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| DEF_GPUTEST(ResourceCache, reporter, factory) { |
| for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
| @@ -199,6 +298,7 @@ DEF_GPUTEST(ResourceCache, reporter, factory) { |
| test_cache(reporter, context, &canvas); |
| test_purge_invalidated(reporter, context); |
| test_cache_delete_on_destruction(reporter, context); |
| + test_resource_size_changed(reporter, context); |
| } |
| } |