[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