Fix fuzzer hang when waiting for fence signal after device loss
When the fuzzer passes the command DeviceLoseForTesting, the DawnWireServerFuzzer will hang forever when waiting for a fence signal because the device was lost. This commit sets a callback on device loss which gives an extra condition to break the hang. Bug: dawn:444 Change-Id: I0157358ed6da39cc6fcab7e1be8a3d5fde74266f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/23141 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Natasha Lee <natlee@microsoft.com> Commit-Queue: Brandon Jones <brandon1.jones@intel.com>
This commit is contained in:
parent
59cfe3ea03
commit
ac6bd4c98f
|
@ -50,6 +50,8 @@ namespace {
|
|||
std::string sInjectedErrorTestcaseOutDir;
|
||||
uint64_t sOutputFileNumber = 0;
|
||||
|
||||
bool sCommandsComplete = false;
|
||||
|
||||
WGPUSwapChain ErrorDeviceCreateSwapChain(WGPUDevice device,
|
||||
WGPUSurface surface,
|
||||
const WGPUSwapChainDescriptor*) {
|
||||
|
@ -59,6 +61,10 @@ namespace {
|
|||
return sOriginalDeviceCreateSwapChain(device, surface, &desc);
|
||||
}
|
||||
|
||||
void CommandsCompleteCallback(WGPUFenceCompletionStatus status, void* userdata) {
|
||||
sCommandsComplete = true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int DawnWireServerFuzzer::Initialize(int* argc, char*** argv) {
|
||||
|
@ -156,7 +162,8 @@ int DawnWireServerFuzzer::Run(const uint8_t* data,
|
|||
wgpu::Queue queue = device.GetDefaultQueue();
|
||||
wgpu::Fence fence = queue.CreateFence();
|
||||
queue.Signal(fence, 1u);
|
||||
while (fence.GetCompletedValue() != 1u) {
|
||||
fence.OnCompletion(1u, CommandsCompleteCallback, 0);
|
||||
while (!sCommandsComplete) {
|
||||
device.Tick();
|
||||
utils::USleep(100);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue