Only check resource tracking on program shutdown, not context shutdown

BUG=skia:5496
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2128273002

Review-Url: https://codereview.chromium.org/2128273002
diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp
index e8fe619..85d6de8 100644
--- a/src/gpu/vk/GrVkBuffer.cpp
+++ b/src/gpu/vk/GrVkBuffer.cpp
@@ -153,7 +153,7 @@
         VK_CALL(gpu, UnmapMemory(gpu->device(), this->alloc().fMemory));
     } else {
         gpu->updateBuffer(this, fMapPtr, this->size());
-        delete (unsigned char*) fMapPtr;
+        delete [] (unsigned char*)fMapPtr;
     }
 
     fMapPtr = nullptr;
diff --git a/src/gpu/vk/GrVkResource.h b/src/gpu/vk/GrVkResource.h
index d42ec70..3999749 100644
--- a/src/gpu/vk/GrVkResource.h
+++ b/src/gpu/vk/GrVkResource.h
@@ -40,7 +40,26 @@
 #ifdef SK_TRACE_VK_RESOURCES
     static const uint32_t& GetKey(const GrVkResource& r) { return r.fKey; }
     static uint32_t Hash(const uint32_t& k) { return k; }
-    static SkTDynamicHash<GrVkResource, uint32_t> fTrace;
+
+    class Trace {
+    public:
+        ~Trace() {
+            if (fHash.count()) {
+                SkTDynamicHash<GrVkResource, uint32_t>::Iter iter(&fHash);
+                for (; !iter.done(); ++iter) {
+                    (*iter).dumpInfo();
+                }
+            }
+            SkASSERT(0 == fHash.count());
+        }
+        void add(GrVkResource* r) { fHash.add(r); }
+        void remove(const GrVkResource* r) { fHash.remove(GetKey(*r)); }
+
+    private:
+        SkTDynamicHash<GrVkResource, uint32_t> fHash;
+    };
+    static Trace  fTrace;
+
     static SkRandom fRandom;
 #endif
 
@@ -144,7 +163,7 @@
     void internal_dispose(const GrVkGpu* gpu) const {
         this->freeGPUData(gpu);
 #ifdef SK_TRACE_VK_RESOURCES
-        fTrace.remove(GetKey(*this));
+        fTrace.remove(this);
 #endif
         SkASSERT(0 == fRefCnt);
         fRefCnt = 1;
@@ -157,7 +176,7 @@
     void internal_dispose() const {
         this->abandonSubResources();
 #ifdef SK_TRACE_VK_RESOURCES
-        fTrace.remove(GetKey(*this));
+        fTrace.remove(this);
 #endif
         SkASSERT(0 == fRefCnt);
         fRefCnt = 1;
diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp
index c7a66ca..c83c6a4 100644
--- a/src/gpu/vk/GrVkResourceProvider.cpp
+++ b/src/gpu/vk/GrVkResourceProvider.cpp
@@ -15,7 +15,7 @@
 #include "GrVkUtil.h"
 
 #ifdef SK_TRACE_VK_RESOURCES
-SkTDynamicHash<GrVkResource, uint32_t> GrVkResource::fTrace;
+GrVkResource::Trace GrVkResource::fTrace;
 SkRandom GrVkResource::fRandom;
 #endif
 
@@ -314,16 +314,6 @@
         fUniformDescLayout = VK_NULL_HANDLE;
     }
     fUniformDescPool->unref(fGpu);
-
-#ifdef SK_TRACE_VK_RESOURCES
-    if (GrVkResource::fTrace.count()) {
-        SkTDynamicHash<GrVkResource, uint32_t>::Iter iter(&GrVkResource::fTrace);
-        for (; !iter.done(); ++iter) {
-            (*iter).dumpInfo();
-        }
-    }
-    SkASSERT(0 == GrVkResource::fTrace.count());
-#endif
 }
 
 void GrVkResourceProvider::abandonResources() {
@@ -368,16 +358,6 @@
 
     fUniformDescLayout = VK_NULL_HANDLE;
     fUniformDescPool->unrefAndAbandon();
-
-#ifdef SK_TRACE_VK_RESOURCES
-    if (GrVkResource::fTrace.count()) {
-        SkTDynamicHash<GrVkResource, uint32_t>::Iter iter(&GrVkResource::fTrace);
-        for (; !iter.done(); ++iter) {
-            (*iter).dumpInfo();
-        }
-    }
-    SkASSERT(0 == GrVkResource::fTrace.count());
-#endif
 }
 
 ////////////////////////////////////////////////////////////////////////////////