dawn::wire::client: Write ObjectBase constructor params in a struct.

This will allow easily adding new parameters to ObjectBase in the future
(like an object generation).

Bug: dawn:1451
Change-Id: I4fc81384987cdd9c33e672d15fcd960dbf0367a0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/93144
Reviewed-by: Loko Kung <lokokung@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/wire/client/Adapter.cpp b/src/dawn/wire/client/Adapter.cpp
index 3e9cbd2..3f55044 100644
--- a/src/dawn/wire/client/Adapter.cpp
+++ b/src/dawn/wire/client/Adapter.cpp
@@ -19,8 +19,6 @@
 
 namespace dawn::wire::client {
 
-Adapter::Adapter(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
-
 Adapter::~Adapter() {
     mRequestDeviceRequests.CloseAll([](RequestDeviceData* request) {
         request->callback(WGPURequestDeviceStatus_Unknown, nullptr,
diff --git a/src/dawn/wire/client/Adapter.h b/src/dawn/wire/client/Adapter.h
index 024da0b..de9d167 100644
--- a/src/dawn/wire/client/Adapter.h
+++ b/src/dawn/wire/client/Adapter.h
@@ -27,7 +27,7 @@
 
 class Adapter final : public ObjectBase {
   public:
-    Adapter(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~Adapter();
 
     void CancelCallbacksForDisconnect() override;
diff --git a/src/dawn/wire/client/Buffer.cpp b/src/dawn/wire/client/Buffer.cpp
index eb9fa61..0321031 100644
--- a/src/dawn/wire/client/Buffer.cpp
+++ b/src/dawn/wire/client/Buffer.cpp
@@ -140,8 +140,6 @@
     return ToAPI(allocation->object.get());
 }
 
-Buffer::Buffer(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
-
 Buffer::~Buffer() {
     ClearAllCallbacks(WGPUBufferMapAsyncStatus_DestroyedBeforeCallback);
     FreeMappedData();
diff --git a/src/dawn/wire/client/Buffer.h b/src/dawn/wire/client/Buffer.h
index 2644a4f..caeaa6f 100644
--- a/src/dawn/wire/client/Buffer.h
+++ b/src/dawn/wire/client/Buffer.h
@@ -31,7 +31,7 @@
     static WGPUBuffer Create(Device* device, const WGPUBufferDescriptor* descriptor);
     static WGPUBuffer CreateError(Device* device, const WGPUBufferDescriptor* descriptor);
 
-    Buffer(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~Buffer();
 
     bool OnMapAsyncCallback(uint64_t requestSerial,
diff --git a/src/dawn/wire/client/Device.cpp b/src/dawn/wire/client/Device.cpp
index 4b86888..10292de 100644
--- a/src/dawn/wire/client/Device.cpp
+++ b/src/dawn/wire/client/Device.cpp
@@ -24,8 +24,8 @@
 
 namespace dawn::wire::client {
 
-Device::Device(Client* clientIn, uint32_t initialRefcount, uint32_t initialId)
-    : ObjectBase(clientIn, initialRefcount, initialId), mIsAlive(std::make_shared<bool>()) {
+Device::Device(const ObjectBaseParams& params)
+    : ObjectBase(params), mIsAlive(std::make_shared<bool>()) {
 #if defined(DAWN_ENABLE_ASSERTS)
     mErrorCallback = [](WGPUErrorType, char const*, void*) {
         static bool calledOnce = false;
diff --git a/src/dawn/wire/client/Device.h b/src/dawn/wire/client/Device.h
index f932607..14599ba 100644
--- a/src/dawn/wire/client/Device.h
+++ b/src/dawn/wire/client/Device.h
@@ -32,7 +32,7 @@
 
 class Device final : public ObjectBase {
   public:
-    Device(Client* client, uint32_t refcount, uint32_t id);
+    explicit Device(const ObjectBaseParams& params);
     ~Device();
 
     void SetUncapturedErrorCallback(WGPUErrorCallback errorCallback, void* errorUserdata);
diff --git a/src/dawn/wire/client/Instance.cpp b/src/dawn/wire/client/Instance.cpp
index 8e441d9..b3a996f 100644
--- a/src/dawn/wire/client/Instance.cpp
+++ b/src/dawn/wire/client/Instance.cpp
@@ -18,8 +18,6 @@
 
 namespace dawn::wire::client {
 
-Instance::Instance(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
-
 Instance::~Instance() {
     mRequestAdapterRequests.CloseAll([](RequestAdapterData* request) {
         request->callback(WGPURequestAdapterStatus_Unknown, nullptr,
diff --git a/src/dawn/wire/client/Instance.h b/src/dawn/wire/client/Instance.h
index 625bd96..5b876a2 100644
--- a/src/dawn/wire/client/Instance.h
+++ b/src/dawn/wire/client/Instance.h
@@ -26,7 +26,7 @@
 
 class Instance final : public ObjectBase {
   public:
-    Instance(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~Instance();
 
     void CancelCallbacksForDisconnect() override;
diff --git a/src/dawn/wire/client/ObjectAllocator.h b/src/dawn/wire/client/ObjectAllocator.h
index 60b8fa8..f8d22e6 100644
--- a/src/dawn/wire/client/ObjectAllocator.h
+++ b/src/dawn/wire/client/ObjectAllocator.h
@@ -44,7 +44,8 @@
     template <typename Client>
     ObjectAndSerial* New(Client* client) {
         uint32_t id = GetNewId();
-        auto object = std::make_unique<T>(client, 1, id);
+        ObjectBaseParams params = {client, id};
+        auto object = std::make_unique<T>(params);
         client->TrackObject(object.get());
 
         if (id >= mObjects.size()) {
diff --git a/src/dawn/wire/client/ObjectBase.cpp b/src/dawn/wire/client/ObjectBase.cpp
index 1d581ef..f0f8f68 100644
--- a/src/dawn/wire/client/ObjectBase.cpp
+++ b/src/dawn/wire/client/ObjectBase.cpp
@@ -16,8 +16,8 @@
 
 namespace dawn::wire::client {
 
-ObjectBase::ObjectBase(Client* client, uint32_t refcount, uint32_t id)
-    : client(client), refcount(refcount), id(id) {}
+ObjectBase::ObjectBase(const ObjectBaseParams& params)
+    : client(params.client), refcount(1), id(params.id) {}
 
 ObjectBase::~ObjectBase() {
     RemoveFromList();
diff --git a/src/dawn/wire/client/ObjectBase.h b/src/dawn/wire/client/ObjectBase.h
index 417c7c7..26a6acb 100644
--- a/src/dawn/wire/client/ObjectBase.h
+++ b/src/dawn/wire/client/ObjectBase.h
@@ -24,13 +24,18 @@
 
 class Client;
 
+struct ObjectBaseParams {
+    Client* client;
+    uint32_t id;
+};
+
 // All objects on the client side have:
 //  - A pointer to the Client to get where to serialize commands
-//  - The external reference count
+//  - The external reference count, starting at 1.
 //  - An ID that is used to refer to this object when talking with the server side
 //  - A next/prev pointer. They are part of a linked list of objects of the same type.
 struct ObjectBase : public LinkNode<ObjectBase> {
-    ObjectBase(Client* client, uint32_t refcount, uint32_t id);
+    explicit ObjectBase(const ObjectBaseParams& params);
     ~ObjectBase();
 
     virtual void CancelCallbacksForDisconnect() {}
diff --git a/src/dawn/wire/client/QuerySet.cpp b/src/dawn/wire/client/QuerySet.cpp
index c9b1a2d..0dfd7e8 100644
--- a/src/dawn/wire/client/QuerySet.cpp
+++ b/src/dawn/wire/client/QuerySet.cpp
@@ -40,7 +40,6 @@
     return ToAPI(querySet);
 }
 
-QuerySet::QuerySet(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
 QuerySet::~QuerySet() = default;
 
 WGPUQueryType QuerySet::GetType() const {
diff --git a/src/dawn/wire/client/QuerySet.h b/src/dawn/wire/client/QuerySet.h
index 4afb9dc..ee152e5 100644
--- a/src/dawn/wire/client/QuerySet.h
+++ b/src/dawn/wire/client/QuerySet.h
@@ -27,7 +27,7 @@
   public:
     static WGPUQuerySet Create(Device* device, const WGPUQuerySetDescriptor* descriptor);
 
-    QuerySet(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~QuerySet();
 
     // Note that these values can be arbitrary since they aren't validated in the wire client.
diff --git a/src/dawn/wire/client/Queue.cpp b/src/dawn/wire/client/Queue.cpp
index 618f99c..79f5632 100644
--- a/src/dawn/wire/client/Queue.cpp
+++ b/src/dawn/wire/client/Queue.cpp
@@ -19,8 +19,6 @@
 
 namespace dawn::wire::client {
 
-Queue::Queue(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
-
 Queue::~Queue() {
     ClearAllCallbacks(WGPUQueueWorkDoneStatus_Unknown);
 }
diff --git a/src/dawn/wire/client/Queue.h b/src/dawn/wire/client/Queue.h
index 35e583e..6b59d96 100644
--- a/src/dawn/wire/client/Queue.h
+++ b/src/dawn/wire/client/Queue.h
@@ -25,7 +25,7 @@
 
 class Queue final : public ObjectBase {
   public:
-    Queue(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~Queue();
 
     bool OnWorkDoneCallback(uint64_t requestSerial, WGPUQueueWorkDoneStatus status);
diff --git a/src/dawn/wire/client/ShaderModule.cpp b/src/dawn/wire/client/ShaderModule.cpp
index 63bc534..e7cbb4e 100644
--- a/src/dawn/wire/client/ShaderModule.cpp
+++ b/src/dawn/wire/client/ShaderModule.cpp
@@ -18,8 +18,6 @@
 
 namespace dawn::wire::client {
 
-ShaderModule::ShaderModule(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
-
 ShaderModule::~ShaderModule() {
     ClearAllCallbacks(WGPUCompilationInfoRequestStatus_Unknown);
 }
diff --git a/src/dawn/wire/client/ShaderModule.h b/src/dawn/wire/client/ShaderModule.h
index 5ae920d..d8869ba 100644
--- a/src/dawn/wire/client/ShaderModule.h
+++ b/src/dawn/wire/client/ShaderModule.h
@@ -24,7 +24,7 @@
 
 class ShaderModule final : public ObjectBase {
   public:
-    ShaderModule(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~ShaderModule();
 
     void GetCompilationInfo(WGPUCompilationInfoCallback callback, void* userdata);
diff --git a/src/dawn/wire/client/Texture.cpp b/src/dawn/wire/client/Texture.cpp
index f4c0b97..a5842b4 100644
--- a/src/dawn/wire/client/Texture.cpp
+++ b/src/dawn/wire/client/Texture.cpp
@@ -44,7 +44,6 @@
     return ToAPI(texture);
 }
 
-Texture::Texture(Client* c, uint32_t r, uint32_t i) : ObjectBase(c, r, i) {}
 Texture::~Texture() = default;
 
 uint32_t Texture::GetWidth() const {
diff --git a/src/dawn/wire/client/Texture.h b/src/dawn/wire/client/Texture.h
index 0bce2ea..db7d705 100644
--- a/src/dawn/wire/client/Texture.h
+++ b/src/dawn/wire/client/Texture.h
@@ -27,7 +27,7 @@
   public:
     static WGPUTexture Create(Device* device, const WGPUTextureDescriptor* descriptor);
 
-    Texture(Client* client, uint32_t refcount, uint32_t id);
+    using ObjectBase::ObjectBase;
     ~Texture();
 
     // Note that these values can be arbitrary since they aren't validated in the wire client.