[WGPUFuture][native] Don't track already-complete events.
Bug: dawn:1987
Change-Id: I58b63b36aa35dde37b37d16fff89a5c874306918
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/175941
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/dawn/native/EventManager.cpp b/src/dawn/native/EventManager.cpp
index 6a0e419..2137c05 100644
--- a/src/dawn/native/EventManager.cpp
+++ b/src/dawn/native/EventManager.cpp
@@ -338,13 +338,16 @@
mEvents.reset();
}
-FutureID EventManager::TrackEvent(Ref<TrackedEvent>&& future) {
+FutureID EventManager::TrackEvent(Ref<TrackedEvent>&& event) {
FutureID futureID = mNextFutureID++;
if (!mEvents.has_value()) {
return futureID;
}
- mEvents->Use([&](auto events) { events->emplace(futureID, std::move(future)); });
+ // Don't track the event if it was already completed.
+ if (!event->mCompleted.load(std::memory_order_relaxed)) {
+ mEvents->Use([&](auto events) { events->emplace(futureID, std::move(event)); });
+ }
return futureID;
}