[graphite] Add resource tracking to CommandBuffer

Bug: skia:12466
Change-Id: I98acab4bbab2fdc1c359161956c3f0aa29ad7adc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/459884
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/experimental/graphite/src/CommandBuffer.cpp b/experimental/graphite/src/CommandBuffer.cpp
index df984ba..d80b199 100644
--- a/experimental/graphite/src/CommandBuffer.cpp
+++ b/experimental/graphite/src/CommandBuffer.cpp
@@ -7,8 +7,16 @@
 
 #include "experimental/graphite/src/CommandBuffer.h"
 
+#include "src/core/SkTraceEvent.h"
+
 namespace skgpu {
 
 CommandBuffer::CommandBuffer() {}
 
+void CommandBuffer::releaseResources() {
+    TRACE_EVENT0("skia.gpu", TRACE_FUNC);
+
+    fTrackedResources.reset();
+}
+
 } // namespace skgpu
diff --git a/experimental/graphite/src/CommandBuffer.h b/experimental/graphite/src/CommandBuffer.h
index 85d3bd0..572e947 100644
--- a/experimental/graphite/src/CommandBuffer.h
+++ b/experimental/graphite/src/CommandBuffer.h
@@ -9,22 +9,33 @@
 #define skgpu_CommandBuffer_DEFINED
 
 #include "include/core/SkRefCnt.h"
+#include "include/private/SkTArray.h"
 
 namespace skgpu {
 class Gpu;
 
 class CommandBuffer : public SkRefCnt {
 public:
-    ~CommandBuffer() override {}
+    ~CommandBuffer() override {
+        this->releaseResources();
+    }
 
     bool hasWork() { return fHasWork; }
 
 protected:
     CommandBuffer();
 
+    void trackResource(sk_sp<SkRefCnt> resource) {
+        fTrackedResources.push_back(std::move(resource));
+    }
+    void releaseResources();
+
     bool fHasWork = false;
 
 private:
+    static const int kInitialTrackedResourcesCount = 32;
+    SkSTArray<kInitialTrackedResourcesCount, sk_sp<SkRefCnt>> fTrackedResources;
+
 };
 
 } // namespace skgpu
diff --git a/experimental/graphite/src/mtl/MtlCommandBuffer.mm b/experimental/graphite/src/mtl/MtlCommandBuffer.mm
index d3c7bcb..0933886 100644
--- a/experimental/graphite/src/mtl/MtlCommandBuffer.mm
+++ b/experimental/graphite/src/mtl/MtlCommandBuffer.mm
@@ -51,5 +51,4 @@
     return ((*fCommandBuffer).status != MTLCommandBufferStatusError);
 }
 
-
 } // namespace skgpu::mtl