Promote LoseForTesting to ForceLoss device so that user agents can use.
Bug: chromium:1356738 Change-Id: I348837ad4224124d9adba1ecf69a05b2060760c9 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/100566 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Loko Kung <lokokung@google.com> Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
be4c9f48aa
commit
3a53edcf18
|
@ -1159,7 +1159,11 @@
|
||||||
"tags": ["dawn"]
|
"tags": ["dawn"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "lose for testing",
|
"name": "force loss",
|
||||||
|
"args": [
|
||||||
|
{"name": "type", "type": "device lost reason"},
|
||||||
|
{"name": "message", "type": "char", "annotation": "const*", "length": "strlen"}
|
||||||
|
],
|
||||||
"tags": ["dawn"]
|
"tags": ["dawn"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -479,7 +479,9 @@ void DeviceBase::APIDestroy() {
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceBase::HandleError(InternalErrorType type, const char* message) {
|
void DeviceBase::HandleError(InternalErrorType type,
|
||||||
|
const char* message,
|
||||||
|
WGPUDeviceLostReason lost_reason) {
|
||||||
if (type == InternalErrorType::DeviceLost) {
|
if (type == InternalErrorType::DeviceLost) {
|
||||||
mState = State::Disconnected;
|
mState = State::Disconnected;
|
||||||
|
|
||||||
|
@ -519,7 +521,7 @@ void DeviceBase::HandleError(InternalErrorType type, const char* message) {
|
||||||
if (type == InternalErrorType::DeviceLost) {
|
if (type == InternalErrorType::DeviceLost) {
|
||||||
// The device was lost, call the application callback.
|
// The device was lost, call the application callback.
|
||||||
if (mDeviceLostCallback != nullptr) {
|
if (mDeviceLostCallback != nullptr) {
|
||||||
mDeviceLostCallback(WGPUDeviceLostReason_Undefined, message, mDeviceLostUserdata);
|
mDeviceLostCallback(lost_reason, message, mDeviceLostUserdata);
|
||||||
mDeviceLostCallback = nullptr;
|
mDeviceLostCallback = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -668,12 +670,11 @@ MaybeError DeviceBase::ValidateIsAlive() const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceBase::APILoseForTesting() {
|
void DeviceBase::APIForceLoss(wgpu::DeviceLostReason reason, const char* message) {
|
||||||
if (mState != State::Alive) {
|
if (mState != State::Alive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
HandleError(InternalErrorType::Internal, message, ToAPI(reason));
|
||||||
HandleError(InternalErrorType::Internal, "Device lost for testing");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceBase::State DeviceBase::GetState() const {
|
DeviceBase::State DeviceBase::GetState() const {
|
||||||
|
|
|
@ -65,7 +65,13 @@ class DeviceBase : public RefCountedWithExternalCount {
|
||||||
DeviceBase(AdapterBase* adapter, const DeviceDescriptor* descriptor);
|
DeviceBase(AdapterBase* adapter, const DeviceDescriptor* descriptor);
|
||||||
~DeviceBase() override;
|
~DeviceBase() override;
|
||||||
|
|
||||||
void HandleError(InternalErrorType type, const char* message);
|
// Handles the error, causing a device loss if applicable. Almost always when a device loss
|
||||||
|
// occurs because of an error, we want to call the device loss callback with an undefined
|
||||||
|
// reason, but the ForceLoss API allows for an injection of the reason, hence the default
|
||||||
|
// argument.
|
||||||
|
void HandleError(InternalErrorType type,
|
||||||
|
const char* message,
|
||||||
|
WGPUDeviceLostReason lost_reason = WGPUDeviceLostReason_Undefined);
|
||||||
|
|
||||||
bool ConsumedError(MaybeError maybeError) {
|
bool ConsumedError(MaybeError maybeError) {
|
||||||
if (DAWN_UNLIKELY(maybeError.IsError())) {
|
if (DAWN_UNLIKELY(maybeError.IsError())) {
|
||||||
|
@ -343,7 +349,7 @@ class DeviceBase : public RefCountedWithExternalCount {
|
||||||
void EmitDeprecationWarning(const char* warning);
|
void EmitDeprecationWarning(const char* warning);
|
||||||
void EmitLog(const char* message);
|
void EmitLog(const char* message);
|
||||||
void EmitLog(WGPULoggingType loggingType, const char* message);
|
void EmitLog(WGPULoggingType loggingType, const char* message);
|
||||||
void APILoseForTesting();
|
void APIForceLoss(wgpu::DeviceLostReason reason, const char* message);
|
||||||
QueueBase* GetQueue() const;
|
QueueBase* GetQueue() const;
|
||||||
|
|
||||||
// AddFutureSerial is used to update the mFutureSerial with the max serial needed to be
|
// AddFutureSerial is used to update the mFutureSerial with the max serial needed to be
|
||||||
|
|
|
@ -996,7 +996,7 @@ void DawnTestBase::LoseDeviceForTesting(wgpu::Device device) {
|
||||||
EXPECT_CALL(mDeviceLostCallback,
|
EXPECT_CALL(mDeviceLostCallback,
|
||||||
Call(WGPUDeviceLostReason_Undefined, testing::_, resolvedDevice.Get()))
|
Call(WGPUDeviceLostReason_Undefined, testing::_, resolvedDevice.Get()))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
resolvedDevice.LoseForTesting();
|
resolvedDevice.ForceLoss(wgpu::DeviceLostReason::Undefined, "Device lost for testing");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostringstream& DawnTestBase::AddBufferExpectation(const char* file,
|
std::ostringstream& DawnTestBase::AddBufferExpectation(const char* file,
|
||||||
|
|
|
@ -408,7 +408,7 @@ TEST_P(DeviceLostTest, LoseDeviceForTestingOnce) {
|
||||||
mDeviceLostCallback.MakeUserdata(device.Get()));
|
mDeviceLostCallback.MakeUserdata(device.Get()));
|
||||||
EXPECT_CALL(mDeviceLostCallback, Call(WGPUDeviceLostReason_Undefined, testing::_, device.Get()))
|
EXPECT_CALL(mDeviceLostCallback, Call(WGPUDeviceLostReason_Undefined, testing::_, device.Get()))
|
||||||
.Times(0);
|
.Times(0);
|
||||||
device.LoseForTesting();
|
device.ForceLoss(wgpu::DeviceLostReason::Undefined, "Device lost for testing");
|
||||||
FlushWire();
|
FlushWire();
|
||||||
testing::Mock::VerifyAndClearExpectations(&mDeviceLostCallback);
|
testing::Mock::VerifyAndClearExpectations(&mDeviceLostCallback);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue