Add WGPU[Obj]AddRef and deprecated WGPU[Obj]Reference

Bug: dawn:2234
Change-Id: Id23b62be81afc879abb0caccb7f8b2339db2dc1c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/184280
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index bb27818..d37e34f 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -912,7 +912,9 @@
 
 def c_methods(params, typ):
     return typ.methods + [
+        # TODO(dawn:2234): Deprecated. Remove when no longer used.
         Method(Name('reference'), params['types']['void'], [], False, {}),
+        Method(Name('add ref'), params['types']['void'], [], False, {}),
         Method(Name('release'), params['types']['void'], [], False, {}),
     ]
 
diff --git a/generator/templates/api.h b/generator/templates/api.h
index 37282dd..b541b9c 100644
--- a/generator/templates/api.h
+++ b/generator/templates/api.h
@@ -73,6 +73,8 @@
 #include <stdint.h>
 #include <stddef.h>
 
+#define WGPU_BREAKING_REFERENCE_ADDREF
+
 {% for constant in by_category["constant"] %}
     #define {{API}}_{{constant.name.SNAKE_CASE()}} {{constant.value}}
 {% endfor %}
diff --git a/generator/templates/api_cpp.cpp b/generator/templates/api_cpp.cpp
deleted file mode 100644
index e69de29..0000000
--- a/generator/templates/api_cpp.cpp
+++ /dev/null
diff --git a/generator/templates/api_cpp.h b/generator/templates/api_cpp.h
index ca281fa..0608cec 100644
--- a/generator/templates/api_cpp.h
+++ b/generator/templates/api_cpp.h
@@ -156,7 +156,7 @@
       public:
         ObjectBase() = default;
         ObjectBase(CType handle): mHandle(handle) {
-            if (mHandle) Derived::{{c_prefix}}Reference(mHandle);
+            if (mHandle) Derived::{{c_prefix}}AddRef(mHandle);
         }
         ~ObjectBase() {
             if (mHandle) Derived::{{c_prefix}}Release(mHandle);
@@ -169,7 +169,7 @@
             if (&other != this) {
                 if (mHandle) Derived::{{c_prefix}}Release(mHandle);
                 mHandle = other.mHandle;
-                if (mHandle) Derived::{{c_prefix}}Reference(mHandle);
+                if (mHandle) Derived::{{c_prefix}}AddRef(mHandle);
             }
 
             return static_cast<Derived&>(*this);
@@ -278,7 +278,7 @@
 
           private:
             friend ObjectBase<{{CppType}}, {{CType}}>;
-            static inline void {{c_prefix}}Reference({{CType}} handle);
+            static inline void {{c_prefix}}AddRef({{CType}} handle);
             static inline void {{c_prefix}}Release({{CType}} handle);
         };
 
@@ -461,9 +461,9 @@
                 {% endif %}
             }
         {% endfor %}
-        void {{CppType}}::{{c_prefix}}Reference({{CType}} handle) {
+        void {{CppType}}::{{c_prefix}}AddRef({{CType}} handle) {
             if (handle != nullptr) {
-                {{as_cMethod(type.name, Name("reference"))}}(handle);
+                {{as_cMethod(type.name, Name("add ref"))}}(handle);
             }
         }
         void {{CppType}}::{{c_prefix}}Release({{CType}} handle) {
diff --git a/generator/templates/dawn/wire/client/ApiProcs.cpp b/generator/templates/dawn/wire/client/ApiProcs.cpp
index e4d1dd7..a5d45aa 100644
--- a/generator/templates/dawn/wire/client/ApiProcs.cpp
+++ b/generator/templates/dawn/wire/client/ApiProcs.cpp
@@ -125,8 +125,13 @@
             obj->Release();
         }
 
+        void Client{{as_MethodSuffix(type.name, Name("add ref"))}}({{cType}} cObj) {
+            reinterpret_cast<{{Type}}*>(cObj)->AddRef();
+        }
+
+        //* TODO(dawn:2234): Deprecated. Remove once no longer user.
         void Client{{as_MethodSuffix(type.name, Name("reference"))}}({{cType}} cObj) {
-            reinterpret_cast<{{Type}}*>(cObj)->Reference();
+            Client{{as_MethodSuffix(type.name, Name("add ref"))}}(cObj);
         }
     {% endfor %}
 
diff --git a/generator/templates/mock_api.h b/generator/templates/mock_api.h
index 77769b0..7e9fc4a 100644
--- a/generator/templates/mock_api.h
+++ b/generator/templates/mock_api.h
@@ -70,8 +70,12 @@
 
         {%- for type in by_category["object"] %}
 
-            virtual void {{as_MethodSuffix(type.name, Name("reference"))}}({{as_cType(type.name)}} self) = 0;
+            virtual void {{as_MethodSuffix(type.name, Name("add ref"))}}({{as_cType(type.name)}} self) = 0;
             virtual void {{as_MethodSuffix(type.name, Name("release"))}}({{as_cType(type.name)}} self) = 0;
+            // TODO(dawn::2234): Deprecated. Remove once no longer used.
+            void {{as_MethodSuffix(type.name, Name("reference"))}}({{as_cType(type.name)}} self) {
+                {{as_MethodSuffix(type.name, Name("add ref"))}}(self);
+            }
             {% for method in type.methods if method.name.get() not in ManuallyMockedFunctions %}
                 {% set Suffix = as_CppMethodSuffix(type.name, method.name) %}
                 {% if not has_callback_arguments(method) and not has_callback_info(method) %}
@@ -174,7 +178,7 @@
 
         {%- for type in by_category["object"] %}
 
-            MOCK_METHOD(void, {{as_MethodSuffix(type.name, Name("reference"))}}, ({{as_cType(type.name)}} self), (override));
+            MOCK_METHOD(void, {{as_MethodSuffix(type.name, Name("add ref"))}}, ({{as_cType(type.name)}} self), (override));
             MOCK_METHOD(void, {{as_MethodSuffix(type.name, Name("release"))}}, ({{as_cType(type.name)}} self), (override));
             {% for method in type.methods if not has_callback_arguments(method) and not has_callback_info(method) %}
                 MOCK_METHOD({{as_cType(method.return_type.name)}},{{" "}}
diff --git a/src/dawn/common/CoreFoundationRef.h b/src/dawn/common/CoreFoundationRef.h
index 4a6c992..aac447e 100644
--- a/src/dawn/common/CoreFoundationRef.h
+++ b/src/dawn/common/CoreFoundationRef.h
@@ -37,7 +37,7 @@
 template <typename T>
 struct CoreFoundationRefTraits {
     static constexpr T kNullValue = nullptr;
-    static void Reference(T value) { CFRetain(value); }
+    static void AddRef(T value) { CFRetain(value); }
     static void Release(T value) { CFRelease(value); }
 };
 
diff --git a/src/dawn/common/IOKitRef.h b/src/dawn/common/IOKitRef.h
index e945566..898698b 100644
--- a/src/dawn/common/IOKitRef.h
+++ b/src/dawn/common/IOKitRef.h
@@ -37,7 +37,7 @@
 template <typename T>
 struct IOKitRefTraits {
     static constexpr T kNullValue = IO_OBJECT_NULL;
-    static void Reference(T value) { IOObjectRetain(value); }
+    static void AddRef(T value) { IOObjectRetain(value); }
     static void Release(T value) { IOObjectRelease(value); }
 };
 
diff --git a/src/dawn/common/NSRef.h b/src/dawn/common/NSRef.h
index 1aac82d..c3db729 100644
--- a/src/dawn/common/NSRef.h
+++ b/src/dawn/common/NSRef.h
@@ -82,7 +82,7 @@
 template <typename T>
 struct NSRefTraits {
     static constexpr T kNullValue = nullptr;
-    static void Reference(T value) { [value retain]; }
+    static void AddRef(T value) { [value retain]; }
     static void Release(T value) { [value release]; }
 };
 
diff --git a/src/dawn/common/Ref.h b/src/dawn/common/Ref.h
index 2cca488..90e905d 100644
--- a/src/dawn/common/Ref.h
+++ b/src/dawn/common/Ref.h
@@ -46,7 +46,7 @@
 template <typename T>
 struct RefCountedTraits {
     static constexpr T* kNullValue = nullptr;
-    static void Reference(T* value) { value->Reference(); }
+    static void AddRef(T* value) { value->AddRef(); }
     static void Release(T* value) { value->Release(); }
 };
 
diff --git a/src/dawn/common/RefBase.h b/src/dawn/common/RefBase.h
index bdf6ec8..57abaac 100644
--- a/src/dawn/common/RefBase.h
+++ b/src/dawn/common/RefBase.h
@@ -42,7 +42,7 @@
 //
 //   struct {
 //      static constexpr T kNullValue = ...;
-//      static void Reference(T value) { ... }
+//      static void AddRef(T value) { ... }
 //      static void Release(T value) { ... }
 //   };
 //
@@ -66,7 +66,7 @@
 
     // Constructors from a value T.
     // NOLINTNEXTLINE(runtime/explicit)
-    RefBase(T value) : mValue(value) { Reference(value); }
+    RefBase(T value) : mValue(value) { AddRef(value); }
 
     RefBase<T, Traits>& operator=(const T& value) {
         Set(value);
@@ -74,7 +74,7 @@
     }
 
     // Constructors from a RefBase<T>
-    RefBase(const RefBase<T, Traits>& other) : mValue(other.mValue) { Reference(other.mValue); }
+    RefBase(const RefBase<T, Traits>& other) : mValue(other.mValue) { AddRef(other.mValue); }
 
     RefBase<T, Traits>& operator=(const RefBase<T, Traits>& other) {
         Set(other.mValue);
@@ -96,7 +96,7 @@
     // operators defined with `other` == RefBase<T, Traits>.
     template <typename U, typename UTraits, typename = typename std::is_convertible<U, T>::type>
     RefBase(const RefBase<U, UTraits>& other) : mValue(other.mValue) {
-        Reference(other.mValue);
+        AddRef(other.mValue);
     }
 
     template <typename U, typename UTraits, typename = typename std::is_convertible<U, T>::type>
@@ -160,7 +160,7 @@
     }
 
   private:
-    // Friend is needed so that instances of RefBase<U> can call Reference and Release on
+    // Friend is needed so that instances of RefBase<U> can call AddRef and Release on
     // RefBase<T>.
     template <typename U, typename UTraits>
     friend class RefBase;
@@ -170,9 +170,9 @@
         other->Acquire(static_cast<U>(ref->Detach()));
     }
 
-    static void Reference(T value) {
+    static void AddRef(T value) {
         if (value != Traits::kNullValue) {
-            Traits::Reference(value);
+            Traits::AddRef(value);
         }
     }
     static void Release(T value) {
@@ -185,7 +185,7 @@
         if (mValue != value) {
             // Ensure that the new value is referenced before the old is released to prevent any
             // transitive frees that may affect the new value.
-            Reference(value);
+            AddRef(value);
             Release(mValue);
             mValue = value;
         }
diff --git a/src/dawn/common/RefCounted.cpp b/src/dawn/common/RefCounted.cpp
index 78a1b91..4c57023 100644
--- a/src/dawn/common/RefCounted.cpp
+++ b/src/dawn/common/RefCounted.cpp
@@ -136,7 +136,7 @@
     return mRefCount.GetPayload();
 }
 
-void RefCounted::Reference() {
+void RefCounted::AddRef() {
     bool result = mRefCount.Increment();
     // Never increase ref count from 0.
     DAWN_ASSERT(!result);
diff --git a/src/dawn/common/RefCounted.h b/src/dawn/common/RefCounted.h
index e3a11b1..0d06e04 100644
--- a/src/dawn/common/RefCounted.h
+++ b/src/dawn/common/RefCounted.h
@@ -71,12 +71,14 @@
     uint64_t GetRefCountForTesting() const;
     uint64_t GetRefCountPayload() const;
 
-    void Reference();
+    void AddRef();
     // Release() is called by internal code, so it's assumed that there is already a thread
     // synchronization in place for destruction.
     void Release();
 
-    void APIReference() { Reference(); }
+    // TODO(dawn:2234): Deprecated. Remove when no longer used.
+    void APIReference() { APIAddRef(); }
+    void APIAddRef() { AddRef(); }
     void APIRelease() { Release(); }
 
   protected:
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp
index 5ae7d47..6a03657 100644
--- a/src/dawn/native/Adapter.cpp
+++ b/src/dawn/native/Adapter.cpp
@@ -82,7 +82,7 @@
 InstanceBase* AdapterBase::APIGetInstance() const {
     InstanceBase* instance = mPhysicalDevice->GetInstance();
     DAWN_ASSERT(instance != nullptr);
-    instance->APIReference();
+    instance->APIAddRef();
     return instance;
 }
 
diff --git a/src/dawn/native/AsyncTask.cpp b/src/dawn/native/AsyncTask.cpp
index 45ac2e2..a9fb8ef 100644
--- a/src/dawn/native/AsyncTask.cpp
+++ b/src/dawn/native/AsyncTask.cpp
@@ -53,7 +53,7 @@
 
     // Ref the task since it is accessed inside the worker function.
     // The worker function will acquire and release the task upon completion.
-    waitableTask->Reference();
+    waitableTask->AddRef();
     waitableTask->waitableEvent =
         mWorkerTaskPool->PostWorkerTask(DoWaitableTask, waitableTask.Get());
 }
diff --git a/src/dawn/native/DawnNative.cpp b/src/dawn/native/DawnNative.cpp
index 9ac41fa..667ad23 100644
--- a/src/dawn/native/DawnNative.cpp
+++ b/src/dawn/native/DawnNative.cpp
@@ -63,7 +63,7 @@
 
 Adapter::Adapter(AdapterBase* impl) : mImpl(impl) {
     if (mImpl != nullptr) {
-        mImpl->Reference();
+        mImpl->AddRef();
     }
 }
 
@@ -83,7 +83,7 @@
         }
         mImpl = other.mImpl;
         if (mImpl) {
-            mImpl->Reference();
+            mImpl->AddRef();
         }
     }
     return *this;
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 9f7eda1..784ae05 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -1661,7 +1661,7 @@
 }
 
 AdapterBase* DeviceBase::APIGetAdapter() {
-    mAdapter->APIReference();
+    mAdapter->APIAddRef();
     return mAdapter.Get();
 }
 
diff --git a/src/dawn/native/ObjectBase.h b/src/dawn/native/ObjectBase.h
index a2bfbd2..3c98bdb 100644
--- a/src/dawn/native/ObjectBase.h
+++ b/src/dawn/native/ObjectBase.h
@@ -48,7 +48,7 @@
 template <typename T>
 struct APIRefCountedTraits {
     static constexpr T* kNullValue = nullptr;
-    static void Reference(T* value) { value->APIReference(); }
+    static void AddRef(T* value) { value->APIAddRef(); }
     static void Release(T* value) { value->APIRelease(); }
 };
 
diff --git a/src/dawn/native/RefCountedWithExternalCount.h b/src/dawn/native/RefCountedWithExternalCount.h
index 3bee3f7..64b4e5d 100644
--- a/src/dawn/native/RefCountedWithExternalCount.h
+++ b/src/dawn/native/RefCountedWithExternalCount.h
@@ -33,7 +33,7 @@
 namespace dawn::native {
 
 // RecCountedWithExternalCountBase is a version of RefCounted which tracks a separate
-// refcount for calls to APIReference/APIRelease (refs added/removed by the application).
+// refcount for calls to APIAddRef/APIRelease (refs added/removed by the application).
 // The external refcount starts at 0, and the total refcount starts at 1 - i.e. the first
 // ref isn't an external ref.
 // When the external refcount drops to zero, WillDropLastExternalRef is called. and it can be called
@@ -44,13 +44,15 @@
   public:
     static constexpr bool HasExternalRefCount = true;
 
-    using T::Reference;
+    using T::AddRef;
     using T::Release;
     using T::T;
 
-    void APIReference() {
+    // TODO(dawn:2234): Deprecated. Remove when no longer used.
+    void APIReference() { APIAddRef(); }
+    void APIAddRef() {
         IncrementExternalRefCount();
-        T::APIReference();
+        T::APIAddRef();
     }
 
     void APIRelease() {
diff --git a/src/dawn/samples/SampleUtils.cpp b/src/dawn/samples/SampleUtils.cpp
index 6acb553..2f89d7a 100644
--- a/src/dawn/samples/SampleUtils.cpp
+++ b/src/dawn/samples/SampleUtils.cpp
@@ -168,7 +168,7 @@
         if (preferredAdapter != adapters.end()) {
             backendAdapter = *preferredAdapter;
             WGPUAdapter cAdapter = preferredAdapter->Get();
-            dawn::native::GetProcs().adapterReference(cAdapter);
+            dawn::native::GetProcs().adapterAddRef(cAdapter);
             callback(WGPURequestAdapterStatus_Success, cAdapter, nullptr, userdata);
         } else {
             callback(WGPURequestAdapterStatus_Error, nullptr,
diff --git a/src/dawn/tests/DawnTest.cpp b/src/dawn/tests/DawnTest.cpp
index 6896f61..ef813e1 100644
--- a/src/dawn/tests/DawnTest.cpp
+++ b/src/dawn/tests/DawnTest.cpp
@@ -761,7 +761,7 @@
 
         WGPUAdapter cAdapter = it->Get();
         DAWN_ASSERT(cAdapter);
-        native::GetProcs().adapterReference(cAdapter);
+        native::GetProcs().adapterAddRef(cAdapter);
         callback(WGPURequestAdapterStatus_Success, cAdapter, nullptr, userdata);
     };
 
diff --git a/src/dawn/tests/unittests/ObjectBaseTests.cpp b/src/dawn/tests/unittests/ObjectBaseTests.cpp
index ccc2a18..b9dd753 100644
--- a/src/dawn/tests/unittests/ObjectBaseTests.cpp
+++ b/src/dawn/tests/unittests/ObjectBaseTests.cpp
@@ -35,7 +35,7 @@
     using ObjectBase::ObjectBase;
     using ObjectBase::operator=;
 
-    static void WGPUReference(int* handle) {
+    static void WGPUAddRef(int* handle) {
         ASSERT_LE(0, *handle);
         *handle += 1;
     }
diff --git a/src/dawn/tests/unittests/RefBaseTests.cpp b/src/dawn/tests/unittests/RefBaseTests.cpp
index f898275..cc0fa2c 100644
--- a/src/dawn/tests/unittests/RefBaseTests.cpp
+++ b/src/dawn/tests/unittests/RefBaseTests.cpp
@@ -37,7 +37,7 @@
 using Id = uint32_t;
 
 enum class Action {
-    kReference,
+    kAddRef,
     kRelease,
     kAssign,
     kMarker,
@@ -51,8 +51,8 @@
 
 std::ostream& operator<<(std::ostream& os, const Event& event) {
     switch (event.action) {
-        case Action::kReference:
-            os << "Reference " << event.thisId;
+        case Action::kAddRef:
+            os << "AddRef " << event.thisId;
             break;
         case Action::kRelease:
             os << "Release " << event.thisId;
@@ -80,7 +80,7 @@
 
     RefTracker(Id id, Events* events) : mId(id), mEvents(events) {}
 
-    void Reference() const { mEvents->emplace_back(Event{Action::kReference, mId}); }
+    void AddRef() const { mEvents->emplace_back(Event{Action::kAddRef, mId}); }
 
     void Release() const { mEvents->emplace_back(Event{Action::kRelease, mId}); }
 
@@ -105,7 +105,7 @@
 struct RefTrackerTraits {
     static constexpr RefTracker kNullValue{nullptr};
 
-    static void Reference(const RefTracker& handle) { handle.Reference(); }
+    static void AddRef(const RefTracker& handle) { handle.AddRef(); }
 
     static void Release(const RefTracker& handle) { handle.Release(); }
 };
@@ -152,9 +152,9 @@
         Ref ref(tracker);
         events.emplace_back(Event{Action::kMarker, 10});
     }
-    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kReference, 1},  // reference tracker
-                                             Event{Action::kMarker, 10},    //
-                                             Event{Action::kRelease, 1}     // destruct ref
+    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kAddRef, 1},   // reference tracker
+                                             Event{Action::kMarker, 10},  //
+                                             Event{Action::kRelease, 1}   // destruct ref
                                              ));
 }
 
@@ -168,9 +168,9 @@
         Ref refB(refA);
         events.emplace_back(Event{Action::kMarker, 10});
     }
-    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kReference, 1},  // reference tracker
-                                             Event{Action::kMarker, 10},    //
-                                             Event{Action::kRelease, 1}     // destruct ref
+    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kAddRef, 1},   // reference tracker
+                                             Event{Action::kMarker, 10},  //
+                                             Event{Action::kRelease, 1}   // destruct ref
                                              ));
 }
 
@@ -193,14 +193,14 @@
         events.emplace_back(Event{Action::kMarker, 40});
     }
     EXPECT_THAT(events, testing::ElementsAre(Event{Action::kMarker, 10},    //
-                                             Event{Action::kReference, 1},  // reference tracker1
+                                             Event{Action::kAddRef, 1},     // reference tracker1
                                              Event{Action::kAssign, 0, 1},  // copy tracker1
                                              Event{Action::kMarker, 20},    //
-                                             Event{Action::kReference, 2},  // reference tracker2
+                                             Event{Action::kAddRef, 2},     // reference tracker2
                                              Event{Action::kRelease, 1},    // release tracker1
                                              Event{Action::kAssign, 1, 2},  // copy tracker2
                                              Event{Action::kMarker, 30},    //
-                                             Event{Action::kReference, 1},  // reference tracker1
+                                             Event{Action::kAddRef, 1},     // reference tracker1
                                              Event{Action::kRelease, 2},    // release tracker2
                                              Event{Action::kAssign, 2, 1},  // copy tracker1
                                              Event{Action::kMarker, 40},    //
@@ -273,7 +273,7 @@
         ref = tracker;
         ref = tracker;
     }
-    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kReference, 1},  //
+    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kAddRef, 1},  //
                                              Event{Action::kAssign, 0, 1}));
 }
 
@@ -284,7 +284,7 @@
 
     events.clear();
     { ref = std::move(tracker); }
-    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kReference, 1},  //
+    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kAddRef, 1},  //
                                              Event{Action::kAssign, 0, 1}));
 }
 
@@ -303,14 +303,14 @@
         ref = tracker1;
         events.emplace_back(Event{Action::kMarker, 30});
     }
-    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kReference, 1},  // reference tracker1
+    EXPECT_THAT(events, testing::ElementsAre(Event{Action::kAddRef, 1},     // reference tracker1
                                              Event{Action::kAssign, 0, 1},  // copy tracker1
                                              Event{Action::kMarker, 10},    //
-                                             Event{Action::kReference, 2},  // reference tracker2
+                                             Event{Action::kAddRef, 2},     // reference tracker2
                                              Event{Action::kRelease, 1},    // release tracker1
                                              Event{Action::kAssign, 1, 2},  // copy tracker2
                                              Event{Action::kMarker, 20},    //
-                                             Event{Action::kReference, 1},  // reference tracker1
+                                             Event{Action::kAddRef, 1},     // reference tracker1
                                              Event{Action::kRelease, 2},    // release tracker2
                                              Event{Action::kAssign, 2, 1},  // copy tracker1
                                              Event{Action::kMarker, 30}));
@@ -320,7 +320,7 @@
 // depending on the order in which the compiler did implicit conversions.
 struct FakePtrRefTraits {
     static constexpr int* kNullValue{nullptr};
-    static void Reference(int*) {}
+    static void AddRef(int*) {}
     static void Release(int*) {}
 };
 TEST(RefBase, MissingExplicitOnOperatorBool) {
diff --git a/src/dawn/tests/unittests/RefCountedTests.cpp b/src/dawn/tests/unittests/RefCountedTests.cpp
index 4222243..655beaf 100644
--- a/src/dawn/tests/unittests/RefCountedTests.cpp
+++ b/src/dawn/tests/unittests/RefCountedTests.cpp
@@ -92,7 +92,7 @@
     bool deleted = false;
     auto* test = new RCTest(&deleted);
 
-    test->Reference();
+    test->AddRef();
     test->Release();
     EXPECT_FALSE(deleted);
 
@@ -100,14 +100,14 @@
     EXPECT_TRUE(deleted);
 }
 
-// Test that Reference and Release atomically change the refcount.
-TEST(RefCounted, RaceOnReferenceRelease) {
+// Test that AddRef and Release atomically change the refcount.
+TEST(RefCounted, RaceOnAddRefRelease) {
     bool deleted = false;
     auto* test = new RCTest(&deleted);
 
     auto referenceManyTimes = [test] {
         for (uint32_t i = 0; i < 100000; ++i) {
-            test->Reference();
+            test->AddRef();
         }
     };
     std::thread t1(referenceManyTimes);
@@ -295,7 +295,7 @@
     RCTest* test = new RCTest(1ull);
     EXPECT_EQ(test->GetRefCountPayload(), 1u);
 
-    test->Reference();
+    test->AddRef();
     EXPECT_EQ(test->GetRefCountPayload(), 1u);
     test->Release();
     EXPECT_EQ(test->GetRefCountPayload(), 1u);
diff --git a/src/dawn/tests/unittests/wire/WireBasicTests.cpp b/src/dawn/tests/unittests/wire/WireBasicTests.cpp
index 3dd5388..f0d7326 100644
--- a/src/dawn/tests/unittests/wire/WireBasicTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireBasicTests.cpp
@@ -68,7 +68,7 @@
 TEST_F(WireBasicTests, RefCountKeptInClient) {
     WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
 
-    wgpuCommandEncoderReference(encoder);
+    wgpuCommandEncoderAddRef(encoder);
     wgpuCommandEncoderRelease(encoder);
 
     WGPUCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
diff --git a/src/dawn/tests/unittests/wire/WireDeviceLifetimeTests.cpp b/src/dawn/tests/unittests/wire/WireDeviceLifetimeTests.cpp
index cd14dd9..8b9c053 100644
--- a/src/dawn/tests/unittests/wire/WireDeviceLifetimeTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireDeviceLifetimeTests.cpp
@@ -118,7 +118,7 @@
     // Drop the device, but keep the server-side device alive.
     // This prevents the callbacks from being flushed yet.
     WGPUDevice oldDevice = lastBackendDevice;
-    nativeProcs.deviceReference(oldDevice);
+    nativeProcs.deviceAddRef(oldDevice);
     device = nullptr;
 
     // Request a new device. This overrides the wire's device-related data.
@@ -166,7 +166,7 @@
     // Drop the device, but keep the server-side device alive.
     // This prevents the callbacks from being flushed yet.
     WGPUDevice oldDevice = lastBackendDevice;
-    nativeProcs.deviceReference(oldDevice);
+    nativeProcs.deviceAddRef(oldDevice);
     device = nullptr;
 
     // Request a new device. This overrides the wire's device-related data.
@@ -203,7 +203,7 @@
     // Drop the device, but keep the server-side device alive.
     // This prevents the callbacks from being flushed yet.
     WGPUDevice oldDevice = lastBackendDevice;
-    nativeProcs.deviceReference(oldDevice);
+    nativeProcs.deviceAddRef(oldDevice);
     device = nullptr;
 
     // Destroy the device to enqueue calling the lost callback.
diff --git a/src/dawn/tests/unittests/wire/WireInjectInstanceTests.cpp b/src/dawn/tests/unittests/wire/WireInjectInstanceTests.cpp
index 1ae8dde..d5e0ede 100644
--- a/src/dawn/tests/unittests/wire/WireInjectInstanceTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireInjectInstanceTests.cpp
@@ -49,7 +49,7 @@
     auto reserved = GetWireClient()->ReserveInstance();
 
     WGPUInstance serverInstance = api.GetNewInstance();
-    EXPECT_CALL(api, InstanceReference(serverInstance));
+    EXPECT_CALL(api, InstanceAddRef(serverInstance));
     ASSERT_TRUE(GetWireServer()->InjectInstance(serverInstance, reserved.handle));
 
     WGPUSurfaceDescriptor surfaceDesc = {};
@@ -74,20 +74,20 @@
     auto reserved = GetWireClient()->ReserveInstance();
 
     WGPUInstance serverInstance = api.GetNewInstance();
-    EXPECT_CALL(api, InstanceReference(serverInstance));
+    EXPECT_CALL(api, InstanceAddRef(serverInstance));
     ASSERT_TRUE(GetWireServer()->InjectInstance(serverInstance, reserved.handle));
 
     // ID already in use, call fails.
     ASSERT_FALSE(GetWireServer()->InjectInstance(serverInstance, reserved.handle));
 }
 
-// Test that the server only borrows the instance and does a single reference-release
+// Test that the server only borrows the instance and does a single addref-release
 TEST_F(WireInjectInstanceTests, InjectedInstanceLifetime) {
     auto reserved = GetWireClient()->ReserveInstance();
 
     // Injecting the instance adds a reference
     WGPUInstance serverInstance = api.GetNewInstance();
-    EXPECT_CALL(api, InstanceReference(serverInstance));
+    EXPECT_CALL(api, InstanceAddRef(serverInstance));
     ASSERT_TRUE(GetWireServer()->InjectInstance(serverInstance, reserved.handle));
 
     // Releasing the instance removes a single reference.
diff --git a/src/dawn/tests/unittests/wire/WireInjectSwapChainTests.cpp b/src/dawn/tests/unittests/wire/WireInjectSwapChainTests.cpp
index 02d3e18..d55799d 100644
--- a/src/dawn/tests/unittests/wire/WireInjectSwapChainTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireInjectSwapChainTests.cpp
@@ -57,7 +57,7 @@
     auto reserved = GetWireClient()->ReserveSwapChain(device, &swapChainDesc);
 
     WGPUSwapChain apiSwapchain = api.GetNewSwapChain();
-    EXPECT_CALL(api, SwapChainReference(apiSwapchain));
+    EXPECT_CALL(api, SwapChainAddRef(apiSwapchain));
     ASSERT_TRUE(
         GetWireServer()->InjectSwapChain(apiSwapchain, reserved.handle, reserved.deviceHandle));
 
@@ -80,7 +80,7 @@
     auto reserved = GetWireClient()->ReserveSwapChain(device, &swapChainDesc);
 
     WGPUSwapChain apiSwapchain = api.GetNewSwapChain();
-    EXPECT_CALL(api, SwapChainReference(apiSwapchain));
+    EXPECT_CALL(api, SwapChainAddRef(apiSwapchain));
     ASSERT_TRUE(
         GetWireServer()->InjectSwapChain(apiSwapchain, reserved.handle, reserved.deviceHandle));
 
@@ -89,13 +89,13 @@
         GetWireServer()->InjectSwapChain(apiSwapchain, reserved.handle, reserved.deviceHandle));
 }
 
-// Test that the server only borrows the swapchain and does a single reference-release
+// Test that the server only borrows the swapchain and does a single addref-release
 TEST_F(WireInjectSwapChainTests, InjectedSwapChainLifetime) {
     auto reserved = GetWireClient()->ReserveSwapChain(device, &swapChainDesc);
 
     // Injecting the swapchain adds a reference
     WGPUSwapChain apiSwapchain = api.GetNewSwapChain();
-    EXPECT_CALL(api, SwapChainReference(apiSwapchain));
+    EXPECT_CALL(api, SwapChainAddRef(apiSwapchain));
     ASSERT_TRUE(
         GetWireServer()->InjectSwapChain(apiSwapchain, reserved.handle, reserved.deviceHandle));
 
@@ -140,7 +140,7 @@
     auto reserved = GetWireClient()->ReserveSwapChain(device, &swapChainDesc);
 
     WGPUSwapChain apiSwapchain = api.GetNewSwapChain();
-    EXPECT_CALL(api, SwapChainReference(apiSwapchain));
+    EXPECT_CALL(api, SwapChainAddRef(apiSwapchain));
     ASSERT_TRUE(
         GetWireServer()->InjectSwapChain(apiSwapchain, reserved.handle, reserved.deviceHandle));
 
diff --git a/src/dawn/tests/unittests/wire/WireInjectTextureTests.cpp b/src/dawn/tests/unittests/wire/WireInjectTextureTests.cpp
index cc5a143..02f0b3f 100644
--- a/src/dawn/tests/unittests/wire/WireInjectTextureTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireInjectTextureTests.cpp
@@ -52,7 +52,7 @@
     auto reserved = GetWireClient()->ReserveTexture(device, &placeholderDesc);
 
     WGPUTexture apiTexture = api.GetNewTexture();
-    EXPECT_CALL(api, TextureReference(apiTexture));
+    EXPECT_CALL(api, TextureAddRef(apiTexture));
     ASSERT_TRUE(GetWireServer()->InjectTexture(apiTexture, reserved.handle, reserved.deviceHandle));
 
     wgpuTextureCreateView(reserved.texture, nullptr);
@@ -75,7 +75,7 @@
     auto reserved = GetWireClient()->ReserveTexture(device, &placeholderDesc);
 
     WGPUTexture apiTexture = api.GetNewTexture();
-    EXPECT_CALL(api, TextureReference(apiTexture));
+    EXPECT_CALL(api, TextureAddRef(apiTexture));
     ASSERT_TRUE(GetWireServer()->InjectTexture(apiTexture, reserved.handle, reserved.deviceHandle));
 
     // ID already in use, call fails.
@@ -93,7 +93,7 @@
         reserved = GetWireClient()->ReserveTexture(device, &placeholderDesc);
 
         apiTexture = api.GetNewTexture();
-        EXPECT_CALL(api, TextureReference(apiTexture));
+        EXPECT_CALL(api, TextureAddRef(apiTexture));
         ASSERT_TRUE(
             GetWireServer()->InjectTexture(apiTexture, reserved.handle, reserved.deviceHandle));
 
@@ -116,18 +116,18 @@
     }
 
     // Valid to inject with the same ID and greater generation.
-    EXPECT_CALL(api, TextureReference(apiTexture));
+    EXPECT_CALL(api, TextureAddRef(apiTexture));
     reserved.handle.generation += 2;
     ASSERT_TRUE(GetWireServer()->InjectTexture(apiTexture, reserved.handle, reserved.deviceHandle));
 }
 
-// Test that the server only borrows the texture and does a single reference-release
+// Test that the server only borrows the texture and does a single addref-release
 TEST_F(WireInjectTextureTests, InjectedTextureLifetime) {
     auto reserved = GetWireClient()->ReserveTexture(device, &placeholderDesc);
 
     // Injecting the texture adds a reference
     WGPUTexture apiTexture = api.GetNewTexture();
-    EXPECT_CALL(api, TextureReference(apiTexture));
+    EXPECT_CALL(api, TextureAddRef(apiTexture));
     ASSERT_TRUE(GetWireServer()->InjectTexture(apiTexture, reserved.handle, reserved.deviceHandle));
 
     // Releasing the texture removes a single reference.
diff --git a/src/dawn/tests/unittests/wire/WireInstanceTests.cpp b/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
index 52155fd..4d1b4d1 100644
--- a/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
@@ -59,7 +59,7 @@
     wgpu::Instance instance = wgpu::Instance::Acquire(reserved.instance);
 
     WGPUInstance apiInstance = api.GetNewInstance();
-    EXPECT_CALL(api, InstanceReference(apiInstance));
+    EXPECT_CALL(api, InstanceAddRef(apiInstance));
     EXPECT_TRUE(GetWireServer()->InjectInstance(apiInstance, reserved.handle));
 
     instance = nullptr;
diff --git a/src/dawn/tests/unittests/wire/WireTest.cpp b/src/dawn/tests/unittests/wire/WireTest.cpp
index 0dc22de..327ec0f 100644
--- a/src/dawn/tests/unittests/wire/WireTest.cpp
+++ b/src/dawn/tests/unittests/wire/WireTest.cpp
@@ -85,7 +85,7 @@
     auto reservedInstance = GetWireClient()->ReserveInstance();
     instance = reservedInstance.instance;
     apiInstance = api.GetNewInstance();
-    EXPECT_CALL(api, InstanceReference(apiInstance));
+    EXPECT_CALL(api, InstanceAddRef(apiInstance));
     EXPECT_TRUE(GetWireServer()->InjectInstance(apiInstance, reservedInstance.handle));
 
     // Create the adapter for testing.
diff --git a/src/dawn/wire/client/Buffer.cpp b/src/dawn/wire/client/Buffer.cpp
index 88a4202..6c166a4 100644
--- a/src/dawn/wire/client/Buffer.cpp
+++ b/src/dawn/wire/client/Buffer.cpp
@@ -63,7 +63,7 @@
           mUserdata(callbackInfo.userdata),
           mBuffer(buffer) {
         DAWN_ASSERT(buffer != nullptr);
-        mBuffer->Reference();
+        mBuffer->AddRef();
     }
 
     ~MapAsyncEvent() override { mBuffer.ExtractAsDangling()->Release(); }
diff --git a/src/dawn/wire/client/Device.cpp b/src/dawn/wire/client/Device.cpp
index 0cfe6c8..47b909c 100644
--- a/src/dawn/wire/client/Device.cpp
+++ b/src/dawn/wire/client/Device.cpp
@@ -176,7 +176,7 @@
     DeviceLostEvent(const WGPUDeviceLostCallbackInfo& callbackInfo, Device* device)
         : TrackedEvent(callbackInfo.mode), mDevice(device) {
         DAWN_ASSERT(device != nullptr);
-        mDevice->Reference();
+        mDevice->AddRef();
     }
 
     ~DeviceLostEvent() override { mDevice.ExtractAsDangling()->Release(); }
@@ -448,7 +448,7 @@
         client->SerializeCommand(cmd);
     }
 
-    mQueue->Reference();
+    mQueue->AddRef();
     return ToAPI(mQueue);
 }
 
diff --git a/src/dawn/wire/client/ObjectBase.cpp b/src/dawn/wire/client/ObjectBase.cpp
index df76a08..14a9f27 100644
--- a/src/dawn/wire/client/ObjectBase.cpp
+++ b/src/dawn/wire/client/ObjectBase.cpp
@@ -55,7 +55,7 @@
     return mClient;
 }
 
-void ObjectBase::Reference() {
+void ObjectBase::AddRef() {
     mRefcount++;
 }
 
diff --git a/src/dawn/wire/client/ObjectBase.h b/src/dawn/wire/client/ObjectBase.h
index 16d4fbf6..58649d2 100644
--- a/src/dawn/wire/client/ObjectBase.h
+++ b/src/dawn/wire/client/ObjectBase.h
@@ -63,7 +63,7 @@
     ObjectGeneration GetWireGeneration() const;
     Client* GetClient() const;
 
-    void Reference();
+    void AddRef();
     uint32_t Release();
 
   protected:
diff --git a/src/dawn/wire/client/ShaderModule.cpp b/src/dawn/wire/client/ShaderModule.cpp
index 09a7ea7..cc84965 100644
--- a/src/dawn/wire/client/ShaderModule.cpp
+++ b/src/dawn/wire/client/ShaderModule.cpp
@@ -44,7 +44,7 @@
           mUserdata(callbackInfo.userdata),
           mShader(shader) {
         DAWN_ASSERT(mShader != nullptr);
-        mShader->Reference();
+        mShader->AddRef();
     }
 
     ~CompilationInfoEvent() override { mShader.ExtractAsDangling()->Release(); }
diff --git a/src/dawn/wire/server/Server.cpp b/src/dawn/wire/server/Server.cpp
index bac95a1..f7c0a26 100644
--- a/src/dawn/wire/server/Server.cpp
+++ b/src/dawn/wire/server/Server.cpp
@@ -80,7 +80,7 @@
 
     // The texture is externally owned so it shouldn't be destroyed when we receive a destroy
     // message from the client. Add a reference to counterbalance the eventual release.
-    mProcs.textureReference(texture);
+    mProcs.textureAddRef(texture);
 
     return WireResult::Success;
 }
@@ -104,7 +104,7 @@
 
     // The texture is externally owned so it shouldn't be destroyed when we receive a destroy
     // message from the client. Add a reference to counterbalance the eventual release.
-    mProcs.swapChainReference(swapchain);
+    mProcs.swapChainAddRef(swapchain);
 
     return WireResult::Success;
 }
@@ -120,7 +120,7 @@
 
     // The instance is externally owned so it shouldn't be destroyed when we receive a destroy
     // message from the client. Add a reference to counterbalance the eventual release.
-    mProcs.instanceReference(instance);
+    mProcs.instanceAddRef(instance);
 
     return WireResult::Success;
 }