[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;
 }