dawn_wire: Move manual class members from ServerBase to Server

Bug: dawn:88
Change-Id: Ic216006aa52cace7aa7451b957e72119783e6d7a
Reviewed-on: https://dawn-review.googlesource.com/c/4100
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
Austin Eng
2019-01-30 17:37:28 +00:00
committed by Commit Bot service account
parent 2427666df1
commit 8749506bae
7 changed files with 67 additions and 47 deletions

View File

@@ -17,9 +17,9 @@
namespace dawn_wire { namespace server {
Server::Server(dawnDevice device, const dawnProcTable& procs, CommandSerializer* serializer)
: ServerBase(device, procs, serializer) {
: mSerializer(serializer), mProcs(procs) {
// The client-server knowledge is bootstrapped with device 1.
auto* deviceData = mKnownDevice.Allocate(1);
auto* deviceData = DeviceObjects().Allocate(1);
deviceData->handle = device;
deviceData->valid = true;
@@ -28,6 +28,11 @@ namespace dawn_wire { namespace server {
}
Server::~Server() {
DestroyAllObjects(mProcs);
}
void* Server::GetCmdSpace(size_t size) {
return mSerializer->GetCmdSpace(size);
}
}} // namespace dawn_wire::server

View File

@@ -19,6 +19,22 @@
namespace dawn_wire { namespace server {
class Server;
struct MapUserdata {
Server* server;
ObjectHandle buffer;
uint32_t requestSerial;
uint32_t size;
bool isWrite;
};
struct FenceCompletionUserdata {
Server* server;
ObjectHandle fence;
uint64_t value;
};
class Server : public ServerBase, public CommandHandler {
public:
Server(dawnDevice device, const dawnProcTable& procs, CommandSerializer* serializer);
@@ -27,6 +43,8 @@ namespace dawn_wire { namespace server {
const char* HandleCommands(const char* commands, size_t size);
private:
void* GetCmdSpace(size_t size);
// Forwarding callbacks
static void ForwardDeviceErrorToServer(const char* message, dawnCallbackUserdata userdata);
static void ForwardBufferMapReadAsync(dawnBufferMapAsyncStatus status,
@@ -56,6 +74,10 @@ namespace dawn_wire { namespace server {
bool HandleDestroyObject(const char** commands, size_t* size);
#include "dawn_wire/server/ServerPrototypes_autogen.inl"
CommandSerializer* mSerializer = nullptr;
WireDeserializeAllocator mAllocator;
dawnProcTable mProcs;
};
}} // namespace dawn_wire::server

View File

@@ -20,7 +20,7 @@
namespace dawn_wire { namespace server {
bool Server::PreHandleBufferUnmap(const BufferUnmapCmd& cmd) {
auto* selfData = mKnownBuffer.Get(cmd.selfId);
auto* selfData = BufferObjects().Get(cmd.selfId);
ASSERT(selfData != nullptr);
selfData->mappedData = nullptr;
@@ -49,7 +49,7 @@ namespace dawn_wire { namespace server {
return false;
}
auto* buffer = mKnownBuffer.Get(bufferId);
auto* buffer = BufferObjects().Get(bufferId);
if (buffer == nullptr) {
return false;
}
@@ -100,7 +100,7 @@ namespace dawn_wire { namespace server {
return false;
}
auto* buffer = mKnownBuffer.Get(bufferId);
auto* buffer = BufferObjects().Get(bufferId);
if (buffer == nullptr || !buffer->valid || buffer->mappedData == nullptr ||
buffer->mappedDataSize != dataLength) {
return false;
@@ -133,7 +133,7 @@ namespace dawn_wire { namespace server {
std::unique_ptr<MapUserdata> data(userdata);
// Skip sending the callback if the buffer has already been destroyed.
auto* bufferData = mKnownBuffer.Get(data->buffer.id);
auto* bufferData = BufferObjects().Get(data->buffer.id);
if (bufferData == nullptr || bufferData->serial != data->buffer.serial) {
return;
}
@@ -160,7 +160,7 @@ namespace dawn_wire { namespace server {
std::unique_ptr<MapUserdata> data(userdata);
// Skip sending the callback if the buffer has already been destroyed.
auto* bufferData = mKnownBuffer.Get(data->buffer.id);
auto* bufferData = BufferObjects().Get(data->buffer.id);
if (bufferData == nullptr || bufferData->serial != data->buffer.serial) {
return;
}

View File

@@ -21,9 +21,9 @@ namespace dawn_wire { namespace server {
if (cmd.fence == nullptr) {
return false;
}
ObjectId fenceId = mFenceIdTable.Get(cmd.fence);
ObjectId fenceId = FenceObjectIdTable().Get(cmd.fence);
ASSERT(fenceId != 0);
auto* fence = mKnownFence.Get(fenceId);
auto* fence = FenceObjects().Get(fenceId);
ASSERT(fence != nullptr);
auto* data = new FenceCompletionUserdata;