Cache DawnException and use it for buffer map failures Bug: b/452516879, b/344805524 Change-Id: I1f1b84ca130e962fcf7f706582c0b9051fd2c9e5 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/337035 Reviewed-by: Nikita Gupta <nikigupta@google.com> Reviewed-by: Mridul Goyal <mridulgoyal@google.com> Commit-Queue: Tarun Saini <sainitarun@google.com>
diff --git a/generator/templates/art/JNIClasses.cpp b/generator/templates/art/JNIClasses.cpp index b78bad3..9c45a63 100644 --- a/generator/templates/art/JNIClasses.cpp +++ b/generator/templates/art/JNIClasses.cpp
@@ -43,6 +43,7 @@ gpuCallbackRunnable = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/GPURequestCallbackRunnable"))); gpuCallbackErrorTypeRunnable = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/GPURequestCallbackErrorTypeRunnable"))); gpuCallbackVoidRunnable = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/GPURequestCallbackVoidRunnable"))); + dawnException = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/DawnException"))); stringClass = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("java/lang/String"))); gpuHardwareBufferExternalTexture = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/GPUHardwareBufferExternalTexture"))); gpuHardwareBufferTexture = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("androidx/webgpu/GPUHardwareBufferTexture")));
diff --git a/generator/templates/art/JNIClasses.h b/generator/templates/art/JNIClasses.h index ebf6721..22fa67f 100644 --- a/generator/templates/art/JNIClasses.h +++ b/generator/templates/art/JNIClasses.h
@@ -45,6 +45,7 @@ jclass gpuCallbackRunnable; jclass gpuCallbackErrorTypeRunnable; jclass gpuCallbackVoidRunnable; + jclass dawnException; jclass stringClass; jclass gpuHardwareBufferExternalTexture; jclass gpuHardwareBufferTexture;
diff --git a/generator/templates/art/methods.cpp b/generator/templates/art/methods.cpp index bad5f08..2831ad1 100644 --- a/generator/templates/art/methods.cpp +++ b/generator/templates/art/methods.cpp
@@ -45,8 +45,8 @@ jobject toByteBuffer(JNIEnv *env, const void* address, jlong size) { if (!address) { - //* TODO(b/344805524): custom exception for Dawn. - env->ThrowNew(env->FindClass("java/lang/Error"), "Invalid byte buffer."); + JNIClasses* classes = JNIClasses::getInstance(env); + env->ThrowNew(classes->dawnException, "Invalid byte buffer."); return nullptr; } jclass byteBufferClass = env->FindClass("java/nio/ByteBuffer");
diff --git a/tools/android/webgpu/src/androidTest/java/androidx/webgpu/BufferTest.kt b/tools/android/webgpu/src/androidTest/java/androidx/webgpu/BufferTest.kt index 91c6d8e..9308d0c 100644 --- a/tools/android/webgpu/src/androidTest/java/androidx/webgpu/BufferTest.kt +++ b/tools/android/webgpu/src/androidTest/java/androidx/webgpu/BufferTest.kt
@@ -97,8 +97,7 @@ fun bufferMapFailureTest() { runBlocking { val unused = webGpu.execute { - //TODO(b/452516879): Catch a more specific exception type. - assertThrows(Error::class.java) { + assertThrows(DawnException::class.java) { device.createBuffer( GPUBufferDescriptor( usage = BufferUsage.Vertex, @@ -252,9 +251,8 @@ assertEquals(BufferMapState.Unmapped, buffer.mapState) - //TODO(b/452516879): Catch a more specific exception type. // Should not be able to get the mapped range after unmapping. - assertThrows(Error::class.java) { + assertThrows(DawnException::class.java) { buffer.getMappedRange(0, bufferSize) } }