Add error context on Queue::API* methods

Fixed: dawn:1747
Change-Id: Icc8f4dbc6fcf69c117f880b5ef9d54cf256f7062
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131080
Reviewed-by: Brandon Jones <toji@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/Queue.cpp b/src/dawn/native/Queue.cpp
index 18039d0..5499899 100644
--- a/src/dawn/native/Queue.cpp
+++ b/src/dawn/native/Queue.cpp
@@ -20,6 +20,7 @@
 #include <vector>
 
 #include "dawn/common/Constants.h"
+#include "dawn/common/ityp_span.h"
 #include "dawn/native/Buffer.h"
 #include "dawn/native/CommandBuffer.h"
 #include "dawn/native/CommandEncoder.h"
@@ -286,7 +287,9 @@
                                uint64_t bufferOffset,
                                const void* data,
                                size_t size) {
-    DAWN_UNUSED(GetDevice()->ConsumedError(WriteBuffer(buffer, bufferOffset, data, size)));
+    DAWN_UNUSED(GetDevice()->ConsumedError(WriteBuffer(buffer, bufferOffset, data, size),
+                                           "calling %s.WriteBuffer(%s, %s, (%d bytes))", this,
+                                           buffer, bufferOffset, size));
 }
 
 MaybeError QueueBase::WriteBuffer(BufferBase* buffer,
@@ -328,7 +331,9 @@
                                 const TextureDataLayout* dataLayout,
                                 const Extent3D* writeSize) {
     DAWN_UNUSED(GetDevice()->ConsumedError(
-        WriteTextureInternal(destination, data, dataSize, *dataLayout, writeSize)));
+        WriteTextureInternal(destination, data, dataSize, *dataLayout, writeSize),
+        "calling %s.WriteTexture(%s, (%s bytes), %s, %s)", destination, dataSize, dataLayout,
+        writeSize));
 }
 
 MaybeError QueueBase::WriteTextureInternal(const ImageCopyTexture* destination,
@@ -547,7 +552,9 @@
 
     TRACE_EVENT0(device->GetPlatform(), General, "Queue::Submit");
     if (device->IsValidationEnabled()) {
-        if (device->ConsumedError(ValidateSubmit(commandCount, commands))) {
+        if (device->ConsumedError(
+                ValidateSubmit(commandCount, commands), "calling %s.Submit(%s)", this,
+                ityp::span<uint32_t, CommandBufferBase* const>(commands, commandCount))) {
             return;
         }
     }
diff --git a/src/dawn/native/webgpu_absl_format.h b/src/dawn/native/webgpu_absl_format.h
index fa1d566..1b3bdcb 100644
--- a/src/dawn/native/webgpu_absl_format.h
+++ b/src/dawn/native/webgpu_absl_format.h
@@ -19,6 +19,11 @@
 #include "dawn/native/dawn_platform.h"
 #include "dawn/native/webgpu_absl_format_autogen.h"
 
+namespace ityp {
+template <typename Index, typename Value>
+class span;
+}
+
 namespace dawn::native {
 
 //
@@ -135,6 +140,25 @@
     const absl::FormatConversionSpec& spec,
     absl::FormatSink* s);
 
+template <typename I, typename T>
+absl::FormatConvertResult<absl::FormatConversionCharSet::kString> AbslFormatConvert(
+    const ityp::span<I, T>& values,
+    const absl::FormatConversionSpec& spec,
+    absl::FormatSink* s) {
+    s->Append("[");
+    bool first = true;
+    for (const auto& v : values) {
+        if (!first) {
+            s->Append(absl::StrFormat(", %s", v));
+        } else {
+            s->Append(absl::StrFormat("%s", v));
+        }
+        first = false;
+    }
+    s->Append("]");
+    return {true};
+}
+
 }  // namespace dawn::native
 
 #endif  // SRC_DAWN_NATIVE_WEBGPU_ABSL_FORMAT_H_