Add specialized content key class for resources.

Review URL: https://codereview.chromium.org/858123002
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index 31ae9b4..6b7d68c 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -120,8 +120,8 @@
     static void ComputeScratchKey(SimulatedProperty property, GrScratchKey* key) {
         static GrScratchKey::ResourceType t = GrScratchKey::GenerateResourceType();
         GrScratchKey::Builder builder(key, t, kScratchKeyFieldCnt);
-        for (size_t i = 0; i < kScratchKeyFieldCnt; ++i) {
-            builder[i] = i + static_cast<int>(property);
+        for (int i = 0; i < kScratchKeyFieldCnt; ++i) {
+            builder[i] = static_cast<uint32_t>(i + property);
         }
     }
 
@@ -130,7 +130,7 @@
     }
 
 private:
-    static const size_t kScratchKeyFieldCnt = 6;
+    static const int kScratchKeyFieldCnt = 6;
 
     TestResource(GrGpu* gpu, SimulatedProperty property, ScratchConstructor)
         : INHERITED(gpu, kCached_LifeCycle)
@@ -209,6 +209,13 @@
     REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes());
 }
 
+// Each integer passed as a template param creates a new domain.
+template <int> static void make_content_key(GrContentKey* key, int data) {
+    static GrContentKey::Domain d = GrContentKey::GenerateDomain();
+    GrContentKey::Builder builder(key, d, 1);
+    builder[0] = data;
+}
+
 static void test_budgeting(skiatest::Reporter* reporter) {
     SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
     REPORTER_ASSERT(reporter, SkToBool(context));
@@ -221,9 +228,8 @@
     SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes());
     SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgetedResourceBytes());
 
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
-    GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0);
+    GrContentKey contentKey;
+    make_content_key<0>(&contentKey, 0);
 
     // Create a scratch, a content, and a wrapped resource
     TestResource* scratch =
@@ -241,8 +247,8 @@
     unbudgeted->setSize(13);
 
     // Make sure we can't add a content key to the wrapped resource
-    keyData.fData8[0] = 1;
-    GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0);
+    GrContentKey contentKey2;
+    make_content_key<0>(&contentKey2, 1);
     REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2));
     REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentKey2));
 
@@ -315,9 +321,8 @@
     SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes());
     SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgetedResourceBytes());
 
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
-    GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0);
+    GrContentKey contentKey;
+    make_content_key<0>(&contentKey, 0);
 
     TestResource* scratch;
     TestResource* content;
@@ -576,10 +581,8 @@
     cache2->purgeAllUnlocked();
     SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes());
 
-    GrCacheID::Domain domain = GrCacheID::GenerateDomain();
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
-    GrResourceKey key(GrCacheID(domain, keyData), 0);
+    GrContentKey key;
+    make_content_key<0>(&key, 0);
     
     // Create two resources that we will attempt to register with the same content key.
     TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
@@ -627,16 +630,10 @@
         return;
     }
 
-    GrCacheID::Domain domain = GrCacheID::GenerateDomain();
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
-
-    keyData.fData64[0] = 1;
-    GrResourceKey key1(GrCacheID(domain, keyData), 0);
-    keyData.fData64[0] = 2;
-    GrResourceKey key2(GrCacheID(domain, keyData), 0);
-    keyData.fData64[0] = 3;
-    GrResourceKey key3(GrCacheID(domain, keyData), 0);
+    GrContentKey key1, key2, key3;
+    make_content_key<0>(&key1, 1);
+    make_content_key<0>(&key2, 2);
+    make_content_key<0>(&key3, 3);
     
     context->setResourceCacheLimits(5, 30000);
     GrResourceCache2* cache2 = context->getResourceCache2();
@@ -694,15 +691,9 @@
         return;
     }
 
-    GrCacheID::Domain domain = GrCacheID::GenerateDomain();
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
-
-    keyData.fData64[0] = 1;
-    GrResourceKey key1(GrCacheID(domain, keyData), 0);
-
-    keyData.fData64[0] = 2;
-    GrResourceKey key2(GrCacheID(domain, keyData), 0);
+    GrContentKey key1, key2;
+    make_content_key<0>(&key1, 1);
+    make_content_key<0>(&key2, 2);
 
     {
         context->setResourceCacheLimits(3, 30000);
@@ -745,17 +736,9 @@
         return;
     }
 
-    GrCacheID::Domain domain = GrCacheID::GenerateDomain();
-
-    GrCacheID::Key key1Data;
-    key1Data.fData64[0] = 0;
-    key1Data.fData64[1] = 0;
-    GrResourceKey key1(GrCacheID(domain, key1Data), 0);
-
-    GrCacheID::Key key2Data;
-    key2Data.fData64[0] = 1;
-    key2Data.fData64[1] = 0;
-    GrResourceKey key2(GrCacheID(domain, key2Data), 0);
+    GrContentKey key1, key2;
+    make_content_key<0>(&key1, 1);
+    make_content_key<0>(&key2, 2);
 
     // Test changing resources sizes (both increase & decrease).
     {
@@ -832,25 +815,21 @@
     cache2->purgeAllUnlocked();
     SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes());
 
-    GrCacheID::Domain domain0 = GrCacheID::GenerateDomain();
-    GrCacheID::Domain domain1 = GrCacheID::GenerateDomain();
-
-    GrCacheID::Key keyData;
-    memset(&keyData, 0, sizeof(keyData));
 
     for (int i = 0; i < kResourceCnt; ++i) {
-        TestResource* resource;
-        keyData.fData32[0] = i;
+        GrContentKey key1, key2;
+        make_content_key<1>(&key1, i);
+        make_content_key<2>(&key2, i);
 
-        GrResourceKey key0(GrCacheID(domain0, keyData), 0);
+        TestResource* resource;
+
         resource = SkNEW_ARGS(TestResource, (context->getGpu()));
-        resource->cacheAccess().setContentKey(key0);
+        resource->cacheAccess().setContentKey(key1);
         resource->setSize(1);
         resource->unref();
 
-        GrResourceKey key1(GrCacheID(domain1, keyData), 0);
         resource = SkNEW_ARGS(TestResource, (context->getGpu()));
-        resource->cacheAccess().setContentKey(key1);
+        resource->cacheAccess().setContentKey(key2);
         resource->setSize(1);
         resource->unref();
     }
@@ -861,11 +840,12 @@
     REPORTER_ASSERT(reporter, cache2->getResourceBytes() == 2 * kResourceCnt);
     REPORTER_ASSERT(reporter, cache2->getResourceCount() == 2 * kResourceCnt);
     for (int i = 0; i < kResourceCnt; ++i) {
-        keyData.fData32[0] = i;
-        GrResourceKey key0(GrCacheID(domain0, keyData), 0);
-        REPORTER_ASSERT(reporter, cache2->hasContentKey(key0));
-        GrResourceKey key1(GrCacheID(domain0, keyData), 0);
+        GrContentKey key1, key2;
+        make_content_key<1>(&key1, i);
+        make_content_key<2>(&key2, i);
+
         REPORTER_ASSERT(reporter, cache2->hasContentKey(key1));
+        REPORTER_ASSERT(reporter, cache2->hasContentKey(key2));
     }
 
     cache2->purgeAllUnlocked();
@@ -876,11 +856,12 @@
     REPORTER_ASSERT(reporter, cache2->getResourceCount() == 0);
 
     for (int i = 0; i < kResourceCnt; ++i) {
-        keyData.fData32[0] = i;
-        GrResourceKey key0(GrCacheID(domain0, keyData), 0);
-        REPORTER_ASSERT(reporter, !cache2->hasContentKey(key0));
-        GrResourceKey key1(GrCacheID(domain0, keyData), 0);
+        GrContentKey key1, key2;
+        make_content_key<1>(&key1, i);
+        make_content_key<2>(&key2, i);
+
         REPORTER_ASSERT(reporter, !cache2->hasContentKey(key1));
+        REPORTER_ASSERT(reporter, !cache2->hasContentKey(key2));
     }
 }