mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-01 10:53:33 +00:00
Reland "Replace the wire serializer with a no-op impl on disconnect"
This is a reland of e757c012befa5b2e7288da9ab5a27bbd4da0dd06 It changes a global noop serializer from a global static to a local function static that's constructed on first use. Original change's description: > Replace the wire serializer with a no-op impl on disconnect > > Now that the command serialization knows to no-op if > GetCmdSpace returns nullptr, when the wire is disconnected, > we can replace it with a no-op serializer that always returns > nullptr. > > Bug: chromium:951558 > Change-Id: I7363fd10f529119e515eda0e743e1a7839049b9b > Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/30000 > Reviewed-by: Corentin Wallez <cwallez@chromium.org> > Reviewed-by: Stephen White <senorblanco@chromium.org> > Commit-Queue: Austin Eng <enga@chromium.org> Bug: chromium:951558 Change-Id: I827cdbd212fa585b542fd4ea1eb9654eec6002c7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/30420 Reviewed-by: Stephen White <senorblanco@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
ae5f950444
commit
d676f44272
@ -19,6 +19,30 @@
|
|||||||
|
|
||||||
namespace dawn_wire { namespace client {
|
namespace dawn_wire { namespace client {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class NoopCommandSerializer final : public CommandSerializer {
|
||||||
|
public:
|
||||||
|
static NoopCommandSerializer* GetInstance() {
|
||||||
|
static NoopCommandSerializer gNoopCommandSerializer;
|
||||||
|
return &gNoopCommandSerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
~NoopCommandSerializer() = default;
|
||||||
|
|
||||||
|
size_t GetMaximumAllocationSize() const final {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void* GetCmdSpace(size_t size) final {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
bool Flush() final {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
Client::Client(CommandSerializer* serializer, MemoryTransferService* memoryTransferService)
|
Client::Client(CommandSerializer* serializer, MemoryTransferService* memoryTransferService)
|
||||||
: ClientBase(), mSerializer(serializer), mMemoryTransferService(memoryTransferService) {
|
: ClientBase(), mSerializer(serializer), mMemoryTransferService(memoryTransferService) {
|
||||||
if (mMemoryTransferService == nullptr) {
|
if (mMemoryTransferService == nullptr) {
|
||||||
@ -53,11 +77,7 @@ namespace dawn_wire { namespace client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::Disconnect() {
|
void Client::Disconnect() {
|
||||||
if (mDisconnected) {
|
mSerializer = ChunkedCommandSerializer(NoopCommandSerializer::GetInstance());
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mDisconnected = true;
|
|
||||||
if (mDevice != nullptr) {
|
if (mDevice != nullptr) {
|
||||||
mDevice->HandleDeviceLost("GPU connection lost");
|
mDevice->HandleDeviceLost("GPU connection lost");
|
||||||
}
|
}
|
||||||
|
@ -48,10 +48,6 @@ namespace dawn_wire { namespace client {
|
|||||||
|
|
||||||
template <typename Cmd>
|
template <typename Cmd>
|
||||||
void SerializeCommand(const Cmd& cmd) {
|
void SerializeCommand(const Cmd& cmd) {
|
||||||
// TODO(enga): Swap out the serializer with a no-op one on disconnect.
|
|
||||||
if (mDisconnected) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mSerializer.SerializeCommand(cmd, *this);
|
mSerializer.SerializeCommand(cmd, *this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,10 +55,6 @@ namespace dawn_wire { namespace client {
|
|||||||
void SerializeCommand(const Cmd& cmd,
|
void SerializeCommand(const Cmd& cmd,
|
||||||
size_t extraSize,
|
size_t extraSize,
|
||||||
ExtraSizeSerializeFn&& SerializeExtraSize) {
|
ExtraSizeSerializeFn&& SerializeExtraSize) {
|
||||||
// TODO(enga): Swap out the serializer with a no-op one on disconnect.
|
|
||||||
if (mDisconnected) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mSerializer.SerializeCommand(cmd, *this, extraSize, SerializeExtraSize);
|
mSerializer.SerializeCommand(cmd, *this, extraSize, SerializeExtraSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +68,6 @@ namespace dawn_wire { namespace client {
|
|||||||
WireDeserializeAllocator mAllocator;
|
WireDeserializeAllocator mAllocator;
|
||||||
MemoryTransferService* mMemoryTransferService = nullptr;
|
MemoryTransferService* mMemoryTransferService = nullptr;
|
||||||
std::unique_ptr<MemoryTransferService> mOwnedMemoryTransferService = nullptr;
|
std::unique_ptr<MemoryTransferService> mOwnedMemoryTransferService = nullptr;
|
||||||
bool mDisconnected = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MemoryTransferService> CreateInlineMemoryTransferService();
|
std::unique_ptr<MemoryTransferService> CreateInlineMemoryTransferService();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user