| Index: bench/GrResourceCacheBench.cpp
|
| diff --git a/bench/GrResourceCacheBench.cpp b/bench/GrResourceCacheBench.cpp
|
| index 30d4cd410c1b9ebcf0eb5cccbd5a2d8502dc65af..91c77fb589c4c4617ad0814026fd53d4cf4591bb 100644
|
| --- a/bench/GrResourceCacheBench.cpp
|
| +++ b/bench/GrResourceCacheBench.cpp
|
| @@ -6,13 +6,15 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| +#include "Benchmark.h"
|
| +
|
| #if SK_SUPPORT_GPU
|
|
|
| -#include "Benchmark.h"
|
| #include "GrGpuResource.h"
|
| #include "GrContext.h"
|
| #include "GrGpu.h"
|
| #include "GrResourceCache.h"
|
| +#include "GrResourceCache2.h"
|
| #include "GrStencilBuffer.h"
|
| #include "GrTexture.h"
|
| #include "GrTexturePriv.h"
|
| @@ -117,18 +119,18 @@ static void populate_cache(GrResourceCache* cache, GrGpu* gpu, int resourceCount
|
| }
|
| }
|
|
|
| -static void check_cache_contents_or_die(GrResourceCache* cache, int k) {
|
| +static void check_cache_contents_or_die(GrResourceCache2* cache, int k) {
|
| // Benchmark find calls that succeed.
|
| {
|
| GrSurfaceDesc desc;
|
| get_texture_desc(k, &desc);
|
| GrResourceKey key = TextureResource::ComputeKey(desc);
|
| - GrGpuResource* item = cache->find(key);
|
| - if (NULL == item) {
|
| + SkAutoTUnref<GrGpuResource> item(cache->findAndRefContentResource(key));
|
| + if (!item) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| }
|
| - if (static_cast<TextureResource*>(item)->fID != k) {
|
| + if (static_cast<TextureResource*>(item.get())->fID != k) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| }
|
| @@ -137,12 +139,12 @@ static void check_cache_contents_or_die(GrResourceCache* cache, int k) {
|
| int w, h, s;
|
| get_stencil(k, &w, &h, &s);
|
| GrResourceKey key = StencilResource::ComputeKey(w, h, s);
|
| - GrGpuResource* item = cache->find(key);
|
| - if (NULL == item) {
|
| + SkAutoTUnref<GrGpuResource> item(cache->findAndRefContentResource(key));
|
| + if (!item) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| }
|
| - if (static_cast<TextureResource*>(item)->fID != k) {
|
| + if (static_cast<TextureResource*>(item.get())->fID != k) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| }
|
| @@ -154,7 +156,7 @@ static void check_cache_contents_or_die(GrResourceCache* cache, int k) {
|
| get_texture_desc(k, &desc);
|
| desc.fHeight |= 1;
|
| GrResourceKey key = TextureResource::ComputeKey(desc);
|
| - GrGpuResource* item = cache->find(key);
|
| + SkAutoTUnref<GrGpuResource> item(cache->findAndRefContentResource(key));
|
| if (item) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| @@ -165,7 +167,7 @@ static void check_cache_contents_or_die(GrResourceCache* cache, int k) {
|
| get_stencil(k, &w, &h, &s);
|
| h |= 1;
|
| GrResourceKey key = StencilResource::ComputeKey(w, h, s);
|
| - GrGpuResource* item = cache->find(key);
|
| + SkAutoTUnref<GrGpuResource> item(cache->findAndRefContentResource(key));
|
| if (item) {
|
| SkFAIL("cache add does not work as expected");
|
| return;
|
| @@ -176,12 +178,11 @@ static void check_cache_contents_or_die(GrResourceCache* cache, int k) {
|
| class GrResourceCacheBenchAdd : public Benchmark {
|
| enum {
|
| RESOURCE_COUNT = CACHE_SIZE_COUNT / 2,
|
| - DUPLICATE_COUNT = CACHE_SIZE_COUNT / 4,
|
| };
|
|
|
| public:
|
| virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
|
| - return backend == kGPU_Backend;
|
| + return backend == kNonRendering_Backend;
|
| }
|
|
|
| protected:
|
| @@ -190,18 +191,32 @@ protected:
|
| }
|
|
|
| virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
|
| - GrGpu* gpu = canvas->getGrContext()->getGpu();
|
| + SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
|
| + if (NULL == context) {
|
| + return;
|
| + }
|
| + // Set the cache budget to be very large so no purging occurs.
|
| + context->setResourceCacheLimits(2 * RESOURCE_COUNT, 1 << 30);
|
| +
|
| + GrResourceCache* cache = context->getResourceCache();
|
| + GrResourceCache2* cache2 = context->getResourceCache2();
|
| +
|
| + // Make sure the cache is empty.
|
| + cache->purgeAllUnlocked();
|
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes());
|
| +
|
| + GrGpu* gpu = context->getGpu();
|
|
|
| for (int i = 0; i < loops; ++i) {
|
| - GrResourceCache cache(gpu->caps(), CACHE_SIZE_COUNT, CACHE_SIZE_BYTES);
|
| - populate_cache(&cache, gpu, DUPLICATE_COUNT);
|
| - populate_cache(&cache, gpu, RESOURCE_COUNT);
|
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes());
|
| +
|
| + populate_cache(cache, gpu, RESOURCE_COUNT);
|
|
|
| // Check that cache works.
|
| for (int k = 0; k < RESOURCE_COUNT; k += 33) {
|
| - check_cache_contents_or_die(&cache, k);
|
| + check_cache_contents_or_die(cache2, k);
|
| }
|
| - cache.purgeAllUnlocked();
|
| + cache->purgeAllUnlocked();
|
| }
|
| }
|
|
|
| @@ -211,13 +226,12 @@ private:
|
|
|
| class GrResourceCacheBenchFind : public Benchmark {
|
| enum {
|
| - RESOURCE_COUNT = (CACHE_SIZE_COUNT / 2) - 100,
|
| - DUPLICATE_COUNT = 100
|
| + RESOURCE_COUNT = CACHE_SIZE_COUNT / 2,
|
| };
|
|
|
| public:
|
| virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
|
| - return backend == kGPU_Backend;
|
| + return backend == kNonRendering_Backend;
|
| }
|
|
|
| protected:
|
| @@ -226,14 +240,27 @@ protected:
|
| }
|
|
|
| virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
|
| - GrGpu* gpu = canvas->getGrContext()->getGpu();
|
| - GrResourceCache cache(gpu->caps(), CACHE_SIZE_COUNT, CACHE_SIZE_BYTES);
|
| - populate_cache(&cache, gpu, DUPLICATE_COUNT);
|
| - populate_cache(&cache, gpu, RESOURCE_COUNT);
|
| + SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
|
| + if (NULL == context) {
|
| + return;
|
| + }
|
| + // Set the cache budget to be very large so no purging occurs.
|
| + context->setResourceCacheLimits(2 * RESOURCE_COUNT, 1 << 30);
|
| +
|
| + GrResourceCache* cache = context->getResourceCache();
|
| + GrResourceCache2* cache2 = context->getResourceCache2();
|
| +
|
| + // Make sure the cache is empty.
|
| + cache->purgeAllUnlocked();
|
| + SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResourceBytes());
|
| +
|
| + GrGpu* gpu = context->getGpu();
|
| +
|
| + populate_cache(cache, gpu, RESOURCE_COUNT);
|
|
|
| for (int i = 0; i < loops; ++i) {
|
| for (int k = 0; k < RESOURCE_COUNT; ++k) {
|
| - check_cache_contents_or_die(&cache, k);
|
| + check_cache_contents_or_die(cache2, k);
|
| }
|
| }
|
| }
|
|
|