| Index: tests/ResourceCacheTest.cpp
|
| diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
|
| index 4e6e281a40f125ef577634092678e5fe09db1806..2827cbfd6dc0627e6a953a4eb9bec47ea4d71770 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;
|
| @@ -71,12 +70,12 @@ public:
|
| , fCache(NULL)
|
| , fToDelete(NULL)
|
| , fSize(size) {
|
| - ++fAlive;
|
| + ++fNumAlive;
|
| this->registerWithCache();
|
| }
|
|
|
| ~TestResource() {
|
| - --fAlive;
|
| + --fNumAlive;
|
| if (fToDelete) {
|
| // Breaks our little 2-element cycle below.
|
| fToDelete->setDeleteWhenDestroyed(NULL, NULL);
|
| @@ -92,7 +91,7 @@ public:
|
|
|
| size_t gpuMemorySize() const SK_OVERRIDE { return fSize; }
|
|
|
| - static int alive() { return fAlive; }
|
| + static int NumAlive() { return fNumAlive; }
|
|
|
| void setDeleteWhenDestroyed(GrResourceCache* cache, TestResource* resource) {
|
| fCache = cache;
|
| @@ -103,11 +102,11 @@ private:
|
| GrResourceCache* fCache;
|
| TestResource* fToDelete;
|
| size_t fSize;
|
| - static int fAlive;
|
| + static int fNumAlive;
|
|
|
| typedef GrGpuResource INHERITED;
|
| };
|
| -int TestResource::fAlive = 0;
|
| +int TestResource::fNumAlive = 0;
|
|
|
| static void test_purge_invalidated(skiatest::Reporter* reporter, GrContext* context) {
|
| GrCacheID::Domain domain = GrCacheID::GenerateDomain();
|
| @@ -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::NumAlive());
|
| const GrResourceInvalidatedMessage msg = { key };
|
| SkMessageBus<GrResourceInvalidatedMessage>::Post(msg);
|
| - cache.purgeAsNeeded();
|
| - REPORTER_ASSERT(reporter, 0 == TestResource::alive());
|
| + cache->purgeAsNeeded();
|
| + REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
|
| }
|
|
|
| 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::NumAlive());
|
| + cache->purgeAllUnlocked();
|
| + REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
|
| }
|
| {
|
| - 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::NumAlive());
|
| }
|
| }
|
|
|
| @@ -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());
|
| }
|
| }
|
|
|
| @@ -262,7 +276,6 @@ DEF_GPUTEST(ResourceCache, reporter, factory) {
|
| if (NULL == context) {
|
| continue;
|
| }
|
| -
|
| GrSurfaceDesc desc;
|
| desc.fConfig = kSkia8888_GrPixelConfig;
|
| desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| @@ -270,12 +283,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
|
|
|