Chromium Code Reviews| Index: tests/ResourceCacheTest.cpp |
| diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp |
| index 4e6e281a40f125ef577634092678e5fe09db1806..9f63028d75eb68297d879c3c1c897ef30ad4ae7e 100644 |
| --- a/tests/ResourceCacheTest.cpp |
| +++ b/tests/ResourceCacheTest.cpp |
| @@ -11,6 +11,7 @@ |
| #include "GrContextFactory.h" |
| #include "GrGpu.h" |
| #include "GrResourceCache.h" |
| +#include "GrResourceCache2.h" |
| #include "SkCanvas.h" |
| #include "SkSurface.h" |
| #include "Test.h" |
| @@ -19,9 +20,7 @@ static const int gWidth = 640; |
| static const int gHeight = 480; |
| //////////////////////////////////////////////////////////////////////////////// |
| -static void test_cache(skiatest::Reporter* reporter, |
| - GrContext* context, |
| - SkCanvas* canvas) { |
| +static void test_cache(skiatest::Reporter* reporter, GrContext* context, SkCanvas* canvas) { |
| const SkIRect size = SkIRect::MakeWH(gWidth, gHeight); |
| SkBitmap src; |
| @@ -92,7 +91,7 @@ public: |
| size_t gpuMemorySize() const SK_OVERRIDE { return fSize; } |
|
robertphillips
2014/11/05 18:12:00
Should this be numAlive and fNumAlive ?
bsalomon
2014/11/05 19:44:59
Done.
|
| - static int alive() { return fAlive; } |
| + static int Alive() { return fAlive; } |
| void setDeleteWhenDestroyed(GrResourceCache* cache, TestResource* resource) { |
| fCache = cache; |
| @@ -116,31 +115,34 @@ static void test_purge_invalidated(skiatest::Reporter* reporter, GrContext* cont |
| keyData.fData64[1] = 18; |
| GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); |
| GrResourceKey key(GrCacheID(domain, keyData), t, 0); |
| - |
| - GrResourceCache cache(context->getGpu()->caps(), 5, 30000); |
| + |
| + context->setResourceCacheLimits(5, 30000); |
| + GrResourceCache* cache = context->getResourceCache(); |
| + cache->purgeAllUnlocked(); |
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes()); |
| // Add two resources with the same key that delete each other from the cache when destroyed. |
| TestResource* a = new TestResource(context->getGpu()); |
| TestResource* b = new TestResource(context->getGpu()); |
| - cache.addResource(key, a); |
| - cache.addResource(key, b); |
| + cache->addResource(key, a); |
| + cache->addResource(key, b); |
| // Circle back. |
| - a->setDeleteWhenDestroyed(&cache, b); |
| - b->setDeleteWhenDestroyed(&cache, a); |
| + a->setDeleteWhenDestroyed(cache, b); |
| + b->setDeleteWhenDestroyed(cache, a); |
| a->unref(); |
| b->unref(); |
| // Add a third independent resource also with the same key. |
| GrGpuResource* r = new TestResource(context->getGpu()); |
| - cache.addResource(key, r); |
| + cache->addResource(key, r); |
| r->unref(); |
| // Invalidate all three, all three should be purged and destroyed. |
| - REPORTER_ASSERT(reporter, 3 == TestResource::alive()); |
| + REPORTER_ASSERT(reporter, 3 == TestResource::Alive()); |
| const GrResourceInvalidatedMessage msg = { key }; |
| SkMessageBus<GrResourceInvalidatedMessage>::Post(msg); |
| - cache.purgeAsNeeded(); |
| - REPORTER_ASSERT(reporter, 0 == TestResource::alive()); |
| + cache->purgeAsNeeded(); |
| + REPORTER_ASSERT(reporter, 0 == TestResource::Alive()); |
| } |
| static void test_cache_delete_on_destruction(skiatest::Reporter* reporter, |
| @@ -154,38 +156,44 @@ static void test_cache_delete_on_destruction(skiatest::Reporter* reporter, |
| GrResourceKey key(GrCacheID(domain, keyData), t, 0); |
| { |
| - { |
| - GrResourceCache cache(context->getGpu()->caps(), 3, 30000); |
| - TestResource* a = new TestResource(context->getGpu()); |
| - TestResource* b = new TestResource(context->getGpu()); |
| - cache.addResource(key, a); |
| - cache.addResource(key, b); |
| - |
| - a->setDeleteWhenDestroyed(&cache, b); |
| - b->setDeleteWhenDestroyed(&cache, a); |
| - |
| - a->unref(); |
| - b->unref(); |
| - REPORTER_ASSERT(reporter, 2 == TestResource::alive()); |
| - } |
| - REPORTER_ASSERT(reporter, 0 == TestResource::alive()); |
| + context->setResourceCacheLimits(3, 30000); |
| + GrResourceCache* cache = context->getResourceCache(); |
| + cache->purgeAllUnlocked(); |
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes()); |
| + |
| + TestResource* a = new TestResource(context->getGpu()); |
| + TestResource* b = new TestResource(context->getGpu()); |
| + cache->addResource(key, a); |
| + cache->addResource(key, b); |
| + |
| + a->setDeleteWhenDestroyed(cache, b); |
| + b->setDeleteWhenDestroyed(cache, a); |
| + |
| + a->unref(); |
| + b->unref(); |
| + REPORTER_ASSERT(reporter, 2 == TestResource::Alive()); |
| + cache->purgeAllUnlocked(); |
| + REPORTER_ASSERT(reporter, 0 == TestResource::Alive()); |
| } |
| { |
| - GrResourceCache cache(context->getGpu()->caps(), 3, 30000); |
| + context->setResourceCacheLimits(3, 30000); |
| + GrResourceCache* cache = context->getResourceCache(); |
| + cache->purgeAllUnlocked(); |
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes()); |
| TestResource* a = new TestResource(context->getGpu()); |
| TestResource* b = new TestResource(context->getGpu()); |
| - cache.addResource(key, a); |
| - cache.addResource(key, b); |
| + cache->addResource(key, a); |
| + cache->addResource(key, b); |
| - a->setDeleteWhenDestroyed(&cache, b); |
| - b->setDeleteWhenDestroyed(&cache, a); |
| + a->setDeleteWhenDestroyed(cache, b); |
| + b->setDeleteWhenDestroyed(cache, a); |
| a->unref(); |
| b->unref(); |
| - cache.deleteResource(a->getCacheEntry()); |
| + cache->deleteResource(a->getCacheEntry()); |
| - REPORTER_ASSERT(reporter, 0 == TestResource::alive()); |
| + REPORTER_ASSERT(reporter, 0 == TestResource::Alive()); |
| } |
| } |
| @@ -206,48 +214,54 @@ static void test_resource_size_changed(skiatest::Reporter* reporter, |
| // Test changing resources sizes (both increase & decrease). |
| { |
| - GrResourceCache cache(context->getGpu()->caps(), 2, 300); |
| + context->setResourceCacheLimits(3, 30000); |
| + GrResourceCache* cache = context->getResourceCache(); |
| + cache->purgeAllUnlocked(); |
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes()); |
| TestResource* a = new TestResource(context->getGpu()); |
| a->setSize(100); // Test didChangeGpuMemorySize() when not in the cache. |
| - cache.addResource(key1, a); |
| + cache->addResource(key1, a); |
| a->unref(); |
| TestResource* b = new TestResource(context->getGpu()); |
| b->setSize(100); |
| - cache.addResource(key2, b); |
| + cache->addResource(key2, b); |
| b->unref(); |
| - REPORTER_ASSERT(reporter, 200 == cache.getCachedResourceBytes()); |
| - REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + 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); |
| + 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()); |
| + REPORTER_ASSERT(reporter, 250 == cache->getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount()); |
| } |
| // Test increasing a resources size beyond the cache budget. |
| { |
| - GrResourceCache cache(context->getGpu()->caps(), 2, 300); |
| + context->setResourceCacheLimits(2, 300); |
| + GrResourceCache* cache = context->getResourceCache(); |
| + cache->purgeAllUnlocked(); |
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes()); |
| TestResource* a = new TestResource(context->getGpu(), 100); |
| - cache.addResource(key1, a); |
| + cache->addResource(key1, a); |
| a->unref(); |
| TestResource* b = new TestResource(context->getGpu(), 100); |
| - cache.addResource(key2, b); |
| + cache->addResource(key2, b); |
| b->unref(); |
| - REPORTER_ASSERT(reporter, 200 == cache.getCachedResourceBytes()); |
| - REPORTER_ASSERT(reporter, 2 == cache.getCachedResourceCount()); |
| + 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)); |
| + static_cast<TestResource*>(cache->find(key2))->setSize(201); |
| + REPORTER_ASSERT(reporter, !cache->hasKey(key1)); |
| - REPORTER_ASSERT(reporter, 201 == cache.getCachedResourceBytes()); |
| - REPORTER_ASSERT(reporter, 1 == cache.getCachedResourceCount()); |
| + REPORTER_ASSERT(reporter, 201 == cache->getCachedResourceBytes()); |
| + REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount()); |
| } |
| } |
| @@ -259,10 +273,6 @@ DEF_GPUTEST(ResourceCache, reporter, factory) { |
| continue; |
| } |
| GrContext* context = factory->get(glType); |
| - if (NULL == context) { |
| - continue; |
| - } |
| - |
| GrSurfaceDesc desc; |
| desc.fConfig = kSkia8888_GrPixelConfig; |
| desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| @@ -270,12 +280,19 @@ DEF_GPUTEST(ResourceCache, reporter, factory) { |
| desc.fHeight = gHeight; |
| SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); |
| SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info)); |
| - |
| test_cache(reporter, context, surface->getCanvas()); |
| - test_purge_invalidated(reporter, context); |
| - test_cache_delete_on_destruction(reporter, context); |
| - test_resource_size_changed(reporter, context); |
| } |
| + |
| + // The below tests use a mock context. |
| + SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
| + REPORTER_ASSERT(reporter, SkToBool(context)); |
| + if (NULL == context) { |
| + return; |
| + } |
| + |
| + test_purge_invalidated(reporter, context); |
| + test_cache_delete_on_destruction(reporter, context); |
| + test_resource_size_changed(reporter, context); |
| } |
| #endif |