Index: tests/ResourceCacheTest.cpp |
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp |
index dd480d8b344865bbc411e723d8b411452cd97e4f..e51b3e0997e3e4cfcd5793e9b63a993bfbba0911 100644 |
--- a/tests/ResourceCacheTest.cpp |
+++ b/tests/ResourceCacheTest.cpp |
@@ -63,18 +63,13 @@ |
class TestResource : public GrGpuResource { |
static const size_t kDefaultSize = 100; |
- enum ScratchConstructor { kScratchConstructor }; |
+ |
public: |
SK_DECLARE_INST_COUNT(TestResource); |
- /** Property that distinctly categorizes the resource. |
- * For example, textures have width, height, ... */ |
- enum SimulatedProperty { kProperty1_SimulatedProperty, kProperty2_SimulatedProperty }; |
- |
TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) |
: INHERITED(gpu, lifeCycle) |
, fToDelete(NULL) |
- , fSize(size) |
- , fProperty(kProperty1_SimulatedProperty) { |
+ , fSize(size) { |
++fNumAlive; |
this->registerWithCache(); |
} |
@@ -82,8 +77,7 @@ |
TestResource(GrGpu* gpu, GrGpuResource::LifeCycle lifeCycle) |
: INHERITED(gpu, lifeCycle) |
, fToDelete(NULL) |
- , fSize(kDefaultSize) |
- , fProperty(kProperty1_SimulatedProperty) { |
+ , fSize(kDefaultSize) { |
++fNumAlive; |
this->registerWithCache(); |
} |
@@ -91,14 +85,18 @@ |
TestResource(GrGpu* gpu) |
: INHERITED(gpu, kCached_LifeCycle) |
, fToDelete(NULL) |
- , fSize(kDefaultSize) |
- , fProperty(kProperty1_SimulatedProperty) { |
+ , fSize(kDefaultSize) { |
++fNumAlive; |
this->registerWithCache(); |
} |
- static TestResource* CreateScratchTestResource(GrGpu* gpu, SimulatedProperty property) { |
- return SkNEW_ARGS(TestResource, (gpu, property, kScratchConstructor)); |
+ TestResource(GrGpu* gpu, const GrScratchKey& scratchKey) |
+ : INHERITED(gpu, kCached_LifeCycle) |
+ , fToDelete(NULL) |
+ , fSize(kDefaultSize) { |
+ this->setScratchKey(scratchKey); |
+ ++fNumAlive; |
+ this->registerWithCache(); |
} |
~TestResource() { |
@@ -117,34 +115,13 @@ |
SkRefCnt_SafeAssign(fToDelete, resource); |
} |
- static void ComputeScratchKey(SimulatedProperty property, GrScratchKey* key) { |
- static GrScratchKey::ResourceType t = GrScratchKey::GenerateResourceType(); |
- static const size_t kTestAmount = 6; |
- GrScratchKey::Builder builder(key, t, kTestAmount); |
- for (size_t i = 0; i < kTestAmount; ++i) { |
- builder[i] = i + static_cast<int>(property); |
- } |
- } |
- |
private: |
- TestResource(GrGpu* gpu, SimulatedProperty property, ScratchConstructor) |
- : INHERITED(gpu, kCached_LifeCycle) |
- , fToDelete(NULL) |
- , fSize(kDefaultSize) |
- , fProperty(property) { |
- GrScratchKey scratchKey; |
- ComputeScratchKey(fProperty, &scratchKey); |
- this->setScratchKey(scratchKey); |
- ++fNumAlive; |
- this->registerWithCache(); |
- } |
- |
size_t onGpuMemorySize() const SK_OVERRIDE { return fSize; } |
TestResource* fToDelete; |
size_t fSize; |
static int fNumAlive; |
- SimulatedProperty fProperty; |
+ |
typedef GrGpuResource INHERITED; |
}; |
int TestResource::fNumAlive = 0; |
@@ -204,6 +181,11 @@ |
REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
} |
+static void make_scratch_key(GrScratchKey* key) { |
+ static GrScratchKey::ResourceType t = GrScratchKey::GenerateResourceType(); |
+ GrScratchKey::Builder builder(key, t, 0); |
+} |
+ |
static void test_budgeting(skiatest::Reporter* reporter) { |
SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
REPORTER_ASSERT(reporter, SkToBool(context)); |
@@ -215,15 +197,16 @@ |
cache2->purgeAllUnlocked(); |
SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()); |
SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgetedResourceBytes()); |
+ |
+ GrScratchKey scratchKey; |
+ make_scratch_key(&scratchKey); |
GrCacheID::Key keyData; |
memset(&keyData, 0, sizeof(keyData)); |
GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0); |
// Create a scratch, a content, and a wrapped resource |
- TestResource* scratch = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
+ TestResource* scratch = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
scratch->setSize(10); |
TestResource* content = SkNEW_ARGS(TestResource, (context->getGpu())); |
content->setSize(11); |
@@ -310,6 +293,9 @@ |
SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()); |
SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgetedResourceBytes()); |
+ GrScratchKey scratchKey; |
+ make_scratch_key(&scratchKey); |
+ |
GrCacheID::Key keyData; |
memset(&keyData, 0, sizeof(keyData)); |
GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0); |
@@ -320,8 +306,7 @@ |
TestResource* unbudgeted; |
// A large uncached or wrapped resource shouldn't evict anything. |
- scratch = TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
+ scratch = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
scratch->setSize(10); |
scratch->unref(); |
REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); |
@@ -383,23 +368,14 @@ |
cache2->purgeAllUnlocked(); |
SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()); |
+ GrScratchKey scratchKey; |
+ make_scratch_key(&scratchKey); |
+ |
// Create two resources that have the same scratch key. |
- TestResource* a = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
- TestResource* b = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
+ TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
+ TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
a->setSize(11); |
b->setSize(12); |
- GrScratchKey scratchKey1; |
- TestResource::ComputeScratchKey(TestResource::kProperty1_SimulatedProperty, &scratchKey1); |
- // Check for negative case consistency. (leaks upon test failure.) |
- REPORTER_ASSERT(reporter, NULL == cache2->findAndRefScratchResource(scratchKey1)); |
- |
- GrScratchKey scratchKey; |
- TestResource::ComputeScratchKey(TestResource::kProperty2_SimulatedProperty, &scratchKey); |
- |
// Scratch resources are registered with GrResourceCache2 just by existing. There are 2. |
REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey(scratchKey));) |
@@ -436,25 +412,16 @@ |
cache2->purgeAllUnlocked(); |
SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()); |
+ GrScratchKey scratchKey; |
+ make_scratch_key(&scratchKey); |
+ |
// Create two resources that have the same scratch key. |
- TestResource* a = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
- TestResource* b = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
+ TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
+ TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
a->unref(); |
b->unref(); |
- |
- GrScratchKey scratchKey; |
- // Ensure that scratch key lookup is correct for negative case. |
- TestResource::ComputeScratchKey(TestResource::kProperty1_SimulatedProperty, &scratchKey); |
- // (following leaks upon test failure). |
- REPORTER_ASSERT(reporter, cache2->findAndRefScratchResource(scratchKey) == NULL); |
- |
// Scratch resources are registered with GrResourceCache2 just by existing. There are 2. |
- TestResource::ComputeScratchKey(TestResource::kProperty2_SimulatedProperty, &scratchKey); |
REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey(scratchKey));) |
REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
@@ -491,73 +458,6 @@ |
REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); |
SkDEBUGCODE(REPORTER_ASSERT(reporter, 0 == cache2->countScratchEntriesForKey(scratchKey));) |
REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
-} |
- |
-static void test_scratch_key_consistency(skiatest::Reporter* reporter) { |
- SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
- REPORTER_ASSERT(reporter, SkToBool(context)); |
- if (NULL == context) { |
- return; |
- } |
- context->setResourceCacheLimits(5, 30000); |
- GrResourceCache2* cache2 = context->getResourceCache2(); |
- cache2->purgeAllUnlocked(); |
- SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()); |
- |
- // Create two resources that have the same scratch key. |
- TestResource* a = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
- TestResource* b = |
- TestResource::CreateScratchTestResource(context->getGpu(), |
- TestResource::kProperty2_SimulatedProperty); |
- a->unref(); |
- b->unref(); |
- |
- GrScratchKey scratchKey; |
- // Ensure that scratch key comparison and assignment is consistent. |
- GrScratchKey scratchKey1; |
- TestResource::ComputeScratchKey(TestResource::kProperty1_SimulatedProperty, &scratchKey1); |
- GrScratchKey scratchKey2; |
- TestResource::ComputeScratchKey(TestResource::kProperty2_SimulatedProperty, &scratchKey2); |
- REPORTER_ASSERT(reporter, scratchKey1.size() <= sizeof(scratchKey1)); |
- REPORTER_ASSERT(reporter, scratchKey1 != scratchKey2); |
- REPORTER_ASSERT(reporter, scratchKey2 != scratchKey1); |
- scratchKey = scratchKey1; |
- REPORTER_ASSERT(reporter, scratchKey.size() <= sizeof(scratchKey)); |
- REPORTER_ASSERT(reporter, scratchKey1 == scratchKey); |
- REPORTER_ASSERT(reporter, scratchKey == scratchKey1); |
- REPORTER_ASSERT(reporter, scratchKey2 != scratchKey); |
- REPORTER_ASSERT(reporter, scratchKey != scratchKey2); |
- scratchKey = scratchKey2; |
- REPORTER_ASSERT(reporter, scratchKey.size() <= sizeof(scratchKey)); |
- REPORTER_ASSERT(reporter, scratchKey1 != scratchKey); |
- REPORTER_ASSERT(reporter, scratchKey != scratchKey1); |
- REPORTER_ASSERT(reporter, scratchKey2 == scratchKey); |
- REPORTER_ASSERT(reporter, scratchKey == scratchKey2); |
- |
- // Ensure that scratch key lookup is correct for negative case. |
- TestResource::ComputeScratchKey(TestResource::kProperty1_SimulatedProperty, &scratchKey); |
- // (following leaks upon test failure). |
- REPORTER_ASSERT(reporter, cache2->findAndRefScratchResource(scratchKey) == NULL); |
- |
- // Find the first resource with a scratch key and a copy of a scratch key. |
- TestResource::ComputeScratchKey(TestResource::kProperty2_SimulatedProperty, &scratchKey); |
- GrGpuResource* find = cache2->findAndRefScratchResource(scratchKey); |
- REPORTER_ASSERT(reporter, find != NULL); |
- find->unref(); |
- |
- scratchKey2 = scratchKey; |
- find = cache2->findAndRefScratchResource(scratchKey2); |
- REPORTER_ASSERT(reporter, find != NULL); |
- REPORTER_ASSERT(reporter, find == a || find == b); |
- |
- GrGpuResource* find2 = cache2->findAndRefScratchResource(scratchKey2); |
- REPORTER_ASSERT(reporter, find2 != NULL); |
- REPORTER_ASSERT(reporter, find2 == a || find2 == b); |
- REPORTER_ASSERT(reporter, find2 != find); |
- find2->unref(); |
- find->unref(); |
} |
static void test_duplicate_content_key(skiatest::Reporter* reporter) { |
@@ -909,7 +809,6 @@ |
test_duplicate_content_key(reporter); |
test_duplicate_scratch_key(reporter); |
test_remove_scratch_key(reporter); |
- test_scratch_key_consistency(reporter); |
test_purge_invalidated(reporter); |
test_cache_chained_purge(reporter); |
test_resource_size_changed(reporter); |