Add GrResourceCache2.

Currently it just replaces GrGpu as the owner of the linked list of resources.

Committed: https://skia.googlesource.com/skia/+/94ce9ac8624dbb45656b8f5c992fad9c9ff3ee5f

R=mtklein@google.com, robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/481443002
diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp
new file mode 100644
index 0000000..0b6944e
--- /dev/null
+++ b/src/gpu/GrResourceCache2.cpp
@@ -0,0 +1,47 @@
+
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#include "GrResourceCache2.h"
+#include "GrGpuResource.h"
+
+GrResourceCache2::~GrResourceCache2() {
+    this->releaseAll();
+}
+
+void GrResourceCache2::insertResource(GrGpuResource* resource) {
+    SkASSERT(NULL != resource);
+    SkASSERT(!resource->wasDestroyed());
+    fResources.addToHead(resource);
+    ++fCount;
+}
+
+void GrResourceCache2::removeResource(GrGpuResource* resource) {
+    fResources.remove(resource);
+    --fCount;
+}
+
+void GrResourceCache2::abandonAll() {
+    while (GrGpuResource* head = fResources.head()) {
+        SkASSERT(!head->wasDestroyed());
+        head->abandon();
+        // abandon should have already removed this from the list.
+        SkASSERT(head != fResources.head());
+    }
+    SkASSERT(!fCount);
+}
+
+void GrResourceCache2::releaseAll() {
+    while (GrGpuResource* head = fResources.head()) {
+        SkASSERT(!head->wasDestroyed());
+        head->release();
+        // release should have already removed this from the list.
+        SkASSERT(head != fResources.head());
+    }
+    SkASSERT(!fCount);
+}