Report more detailed error information for the failures of mapAsync This patch adds two new buffer map async status "destroyed before callback" and "unmapped before callback" to replace the status "unknown" so that the developers can get more details when meeting such errors in the call of buffer mapAsync. Note that this patch still preserves "unknown" as it is still being used in Chromium. BUG=dawn:533 TEST=dawn_unittests Change-Id: I12deefb49311ea6adea72c24e4e40797dd7eb4a1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/28883 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn_native/Buffer.cpp b/src/dawn_native/Buffer.cpp index 1a2fbc2..aa9af0a 100644 --- a/src/dawn_native/Buffer.cpp +++ b/src/dawn_native/Buffer.cpp
@@ -138,7 +138,7 @@ BufferBase::~BufferBase() { if (mState == BufferState::Mapped) { ASSERT(!IsError()); - CallMapCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown); + CallMapCallback(mMapSerial, WGPUBufferMapAsyncStatus_DestroyedBeforeCallback); } } @@ -302,13 +302,13 @@ ASSERT(!IsError()); if (mState == BufferState::Mapped) { - Unmap(); + UnmapInternal(WGPUBufferMapAsyncStatus_DestroyedBeforeCallback); } else if (mState == BufferState::MappedAtCreation) { if (mStagingBuffer != nullptr) { mStagingBuffer.reset(); } else if (mSize != 0) { ASSERT(IsCPUWritableAtCreation()); - Unmap(); + UnmapInternal(WGPUBufferMapAsyncStatus_DestroyedBeforeCallback); } } @@ -330,6 +330,10 @@ } void BufferBase::Unmap() { + UnmapInternal(WGPUBufferMapAsyncStatus_UnmappedBeforeCallback); + } + + void BufferBase::UnmapInternal(WGPUBufferMapAsyncStatus callbackStatus) { if (IsError()) { // It is an error to call Unmap() on an ErrorBuffer, but we still need to reclaim the // fake mapped staging data. @@ -346,7 +350,7 @@ // completed before the Unmap. // Callbacks are not fired if there is no callback registered, so this is correct for // mappedAtCreation = true. - CallMapCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown); + CallMapCallback(mMapSerial, callbackStatus); UnmapImpl(); mMapCallback = nullptr;