[dawn][native] Eagerly transition from Alive when destroying Device.
- Wire fuzz test found that if we start an async pipeline call, then
immediately drop the wire server the following occurs:
- Wire server dropped, so drop device
- Dropping device results in Device::Destroy
- Device::Destroy calls AsyncTaskManager::WaitAllPendingTasks
- This resolves the async pipeline creation with a success
- The success in the native side results in calling the server
callback
- The server callback (created via ForwardToServerHelper::Callback)
sees that the server was already dropped so it just returns
- The pipeline that was "successfully" created and returned via
the callback is never acquired and hence leaked.
- To fix this, we eagerly mark the device to be in destruction before
calling into AsyncTaskManager::WaitAllPendingTasks. This results
in the pipeline creation event seeing the device is lost in it's
Complete function, thereby cleaning up the pipeline so that the
wire server doesn't need to change.
Bug: 476162309
Change-Id: I6d8485de9a131e6d529e5f9f0425ee14652012bc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/287816
Auto-Submit: Loko Kung <lokokung@google.com>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h version that Dawn implements.webgpu.h.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.