From a3fe4a1b2d72ee539b70a3455c08e13937eca843 Mon Sep 17 00:00:00 2001 From: Fei Chen Date: Wed, 2 Jul 2025 14:47:44 +0800 Subject: [PATCH] release or cache buffer early in Release not OnRefresh --- .../core/providers/webgpu/buffer_manager.cc | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/onnxruntime/core/providers/webgpu/buffer_manager.cc b/onnxruntime/core/providers/webgpu/buffer_manager.cc index 1d8c689cbd909..985df3b332d4f 100644 --- a/onnxruntime/core/providers/webgpu/buffer_manager.cc +++ b/onnxruntime/core/providers/webgpu/buffer_manager.cc @@ -193,30 +193,21 @@ class BucketCacheManager : public IBufferCacheManager { } void ReleaseBuffer(WGPUBuffer buffer) override { - pending_buffers_.emplace_back(buffer); - } - - void OnRefresh() override { - // TODO: consider graph capture. currently not supported - - for (auto& buffer : pending_buffers_) { - auto buffer_size = static_cast(wgpuBufferGetSize(buffer)); + auto buffer_size = static_cast(wgpuBufferGetSize(buffer)); - auto it = buckets_.find(buffer_size); - if (it != buckets_.end() && it->second.size() < buckets_limit_[buffer_size]) { - it->second.emplace_back(buffer); - } else { - wgpuBufferRelease(buffer); - } + auto it = buckets_.find(buffer_size); + if (it != buckets_.end() && it->second.size() < buckets_limit_[buffer_size]) { + it->second.emplace_back(buffer); + } else { + wgpuBufferRelease(buffer); } + } - pending_buffers_.clear(); + void OnRefresh() override { + // no-op } ~BucketCacheManager() { - for (auto& buffer : pending_buffers_) { - wgpuBufferRelease(buffer); - } for (auto& pair : buckets_) { for (auto& buffer : pair.second) { wgpuBufferRelease(buffer); @@ -245,7 +236,6 @@ class BucketCacheManager : public IBufferCacheManager { } std::unordered_map buckets_limit_; std::unordered_map> buckets_; - std::vector pending_buffers_; std::vector buckets_keys_; };