Moves Ref to its own file to break dependency cycles for WeakRefs.
Bug: dawn:1769
Change-Id: I9517e44b35b6cecacd90badf47c2e6d634f7902b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/139101
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index 762312d..d94a9d21 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -254,6 +254,7 @@
"PlacementAllocated.h",
"Platform.h",
"Preprocessor.h",
+ "Ref.h",
"RefBase.h",
"RefCounted.cpp",
"RefCounted.h",
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index 302be93..3b1f0ce 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -61,6 +61,7 @@
"PlacementAllocated.h"
"Platform.h"
"Preprocessor.h"
+ "Ref.h"
"RefBase.h"
"RefCounted.cpp"
"RefCounted.h"
diff --git a/src/dawn/common/ContentLessObjectCache.h b/src/dawn/common/ContentLessObjectCache.h
index e67c05a..bcfef2d 100644
--- a/src/dawn/common/ContentLessObjectCache.h
+++ b/src/dawn/common/ContentLessObjectCache.h
@@ -21,6 +21,7 @@
#include <unordered_set>
#include <utility>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
namespace dawn {
diff --git a/src/dawn/common/Mutex.h b/src/dawn/common/Mutex.h
index d728013..065e03e 100644
--- a/src/dawn/common/Mutex.h
+++ b/src/dawn/common/Mutex.h
@@ -22,6 +22,7 @@
#include "dawn/common/Assert.h"
#include "dawn/common/NonCopyable.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
namespace dawn {
diff --git a/src/dawn/common/Ref.h b/src/dawn/common/Ref.h
new file mode 100644
index 0000000..3daa67e
--- /dev/null
+++ b/src/dawn/common/Ref.h
@@ -0,0 +1,40 @@
+// Copyright 2023 The Dawn Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_DAWN_COMMON_REF_H_
+#define SRC_DAWN_COMMON_REF_H_
+
+#include "dawn/common/RefBase.h"
+
+namespace dawn {
+namespace detail {
+
+template <typename T>
+struct RefCountedTraits {
+ static constexpr T* kNullValue = nullptr;
+ static void Reference(T* value) { value->Reference(); }
+ static void Release(T* value) { value->Release(); }
+};
+
+} // namespace detail
+
+template <typename T>
+class Ref : public RefBase<T*, detail::RefCountedTraits<T>> {
+ public:
+ using RefBase<T*, detail::RefCountedTraits<T>>::RefBase;
+};
+
+} // namespace dawn
+
+#endif // SRC_DAWN_COMMON_REF_H_
diff --git a/src/dawn/common/RefCounted.h b/src/dawn/common/RefCounted.h
index e6cdb90..fd3dcdd 100644
--- a/src/dawn/common/RefCounted.h
+++ b/src/dawn/common/RefCounted.h
@@ -19,8 +19,6 @@
#include <cstdint>
#include <type_traits>
-#include "dawn/common/RefBase.h"
-
namespace dawn {
class RefCount {
@@ -44,9 +42,19 @@
std::atomic<uint64_t> mRefCount;
};
+// Forward declaration for Ref needed until TryGetRef can be removed with WeakRefs.
+// TODO(dawn:1769) Remove once WeakRef implementation is complete with cache.
template <typename T>
class Ref;
+// TODO(dawn:1769) Move to Ref.h once TryGetRef can be removed.
+template <typename T>
+Ref<T> AcquireRef(T* pointee) {
+ Ref<T> ref;
+ ref.Acquire(pointee);
+ return ref;
+}
+
class RefCounted {
public:
explicit RefCounted(uint64_t payload = 0);
@@ -61,6 +69,7 @@
// Tries to return a valid Ref to `object` if it's internal refcount is not already 0. If the
// internal refcount has already reached 0, returns nullptr instead.
+ // TODO(dawn:1769) Remove this once ContentLessObjectCache is converted to use WeakRefs.
template <typename T, typename = typename std::is_convertible<T, RefCounted>>
friend Ref<T> TryGetRef(T* object) {
// Since this is called on the RefCounted class directly, and can race with destruction, we
@@ -90,26 +99,6 @@
RefCount mRefCount;
};
-template <typename T>
-struct RefCountedTraits {
- static constexpr T* kNullValue = nullptr;
- static void Reference(T* value) { value->Reference(); }
- static void Release(T* value) { value->Release(); }
-};
-
-template <typename T>
-class Ref : public RefBase<T*, RefCountedTraits<T>> {
- public:
- using RefBase<T*, RefCountedTraits<T>>::RefBase;
-};
-
-template <typename T>
-Ref<T> AcquireRef(T* pointee) {
- Ref<T> ref;
- ref.Acquire(pointee);
- return ref;
-}
-
} // namespace dawn
#endif // SRC_DAWN_COMMON_REFCOUNTED_H_
diff --git a/src/dawn/native/Adapter.h b/src/dawn/native/Adapter.h
index 081576e..11d7786 100644
--- a/src/dawn/native/Adapter.h
+++ b/src/dawn/native/Adapter.h
@@ -17,6 +17,7 @@
#include <vector>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/native/DawnNative.h"
#include "dawn/native/PhysicalDevice.h"
diff --git a/src/dawn/native/AsyncTask.h b/src/dawn/native/AsyncTask.h
index 78fc8af..7123128 100644
--- a/src/dawn/native/AsyncTask.h
+++ b/src/dawn/native/AsyncTask.h
@@ -20,6 +20,7 @@
#include <mutex>
#include <unordered_map>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
namespace dawn::platform {
diff --git a/src/dawn/native/Commands.h b/src/dawn/native/Commands.h
index 8e388f2..087f106 100644
--- a/src/dawn/native/Commands.h
+++ b/src/dawn/native/Commands.h
@@ -21,6 +21,7 @@
#include <vector>
#include "dawn/common/Constants.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/AttachmentState.h"
#include "dawn/native/BindingInfo.h"
diff --git a/src/dawn/native/CreatePipelineAsyncTask.h b/src/dawn/native/CreatePipelineAsyncTask.h
index 49df820..daa1e7b 100644
--- a/src/dawn/native/CreatePipelineAsyncTask.h
+++ b/src/dawn/native/CreatePipelineAsyncTask.h
@@ -18,7 +18,7 @@
#include <memory>
#include <string>
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/CallbackTaskManager.h"
#include "dawn/native/Error.h"
#include "dawn/webgpu.h"
diff --git a/src/dawn/native/DynamicUploader.h b/src/dawn/native/DynamicUploader.h
index 0b07bdc..e49ae0c 100644
--- a/src/dawn/native/DynamicUploader.h
+++ b/src/dawn/native/DynamicUploader.h
@@ -18,7 +18,7 @@
#include <memory>
#include <vector>
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/Error.h"
#include "dawn/native/Forward.h"
#include "dawn/native/IntegerTypes.h"
diff --git a/src/dawn/native/IndirectDrawMetadata.cpp b/src/dawn/native/IndirectDrawMetadata.cpp
index 466b677..c950d07 100644
--- a/src/dawn/native/IndirectDrawMetadata.cpp
+++ b/src/dawn/native/IndirectDrawMetadata.cpp
@@ -18,7 +18,6 @@
#include <utility>
#include "dawn/common/Constants.h"
-#include "dawn/common/RefCounted.h"
#include "dawn/native/IndirectDrawValidationEncoder.h"
#include "dawn/native/Limits.h"
#include "dawn/native/RenderBundle.h"
diff --git a/src/dawn/native/IndirectDrawMetadata.h b/src/dawn/native/IndirectDrawMetadata.h
index 87c03ba..76f9f4f 100644
--- a/src/dawn/native/IndirectDrawMetadata.h
+++ b/src/dawn/native/IndirectDrawMetadata.h
@@ -22,7 +22,7 @@
#include <vector>
#include "dawn/common/NonCopyable.h"
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/Buffer.h"
#include "dawn/native/CommandBufferStateTracker.h"
#include "dawn/native/Commands.h"
diff --git a/src/dawn/native/Instance.h b/src/dawn/native/Instance.h
index 3541426..6863d01 100644
--- a/src/dawn/native/Instance.h
+++ b/src/dawn/native/Instance.h
@@ -24,7 +24,7 @@
#include <unordered_set>
#include <vector>
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/ityp_array.h"
#include "dawn/common/ityp_bitset.h"
#include "dawn/native/Adapter.h"
diff --git a/src/dawn/native/ObjectBase.h b/src/dawn/native/ObjectBase.h
index 830be94..d6ff9be 100644
--- a/src/dawn/native/ObjectBase.h
+++ b/src/dawn/native/ObjectBase.h
@@ -19,6 +19,7 @@
#include <string>
#include "dawn/common/LinkedList.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/native/Forward.h"
diff --git a/src/dawn/native/PhysicalDevice.h b/src/dawn/native/PhysicalDevice.h
index 753c4c6..31e235b 100644
--- a/src/dawn/native/PhysicalDevice.h
+++ b/src/dawn/native/PhysicalDevice.h
@@ -21,6 +21,7 @@
#include "dawn/native/DawnNative.h"
#include "dawn/common/GPUInfo.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/common/ityp_span.h"
#include "dawn/native/Error.h"
diff --git a/src/dawn/native/ScratchBuffer.h b/src/dawn/native/ScratchBuffer.h
index 4cfd1b9..4c944a6 100644
--- a/src/dawn/native/ScratchBuffer.h
+++ b/src/dawn/native/ScratchBuffer.h
@@ -17,7 +17,7 @@
#include <cstdint>
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/Buffer.h"
namespace dawn::native {
diff --git a/src/dawn/native/d3d11/CommandRecordingContextD3D11.h b/src/dawn/native/d3d11/CommandRecordingContextD3D11.h
index 0e56a58..7ceb3e4 100644
--- a/src/dawn/native/d3d11/CommandRecordingContextD3D11.h
+++ b/src/dawn/native/d3d11/CommandRecordingContextD3D11.h
@@ -15,7 +15,7 @@
#ifndef SRC_DAWN_NATIVE_D3D11_COMMANDRECORDINGCONTEXT_D3D11_H_
#define SRC_DAWN_NATIVE_D3D11_COMMANDRECORDINGCONTEXT_D3D11_H_
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/Error.h"
#include "dawn/native/d3d/d3d_platform.h"
diff --git a/src/dawn/native/d3d11/FenceD3D11.h b/src/dawn/native/d3d11/FenceD3D11.h
index 92dc5ae..d74dd31 100644
--- a/src/dawn/native/d3d11/FenceD3D11.h
+++ b/src/dawn/native/d3d11/FenceD3D11.h
@@ -15,7 +15,7 @@
#ifndef SRC_DAWN_NATIVE_D3D11_FENCED3D11_H_
#define SRC_DAWN_NATIVE_D3D11_FENCED3D11_H_
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/DawnNative.h"
#include "dawn/native/Error.h"
#include "dawn/native/d3d/Fence.h"
diff --git a/src/dawn/native/d3d12/FenceD3D12.h b/src/dawn/native/d3d12/FenceD3D12.h
index 25921d7..9e21a83 100644
--- a/src/dawn/native/d3d12/FenceD3D12.h
+++ b/src/dawn/native/d3d12/FenceD3D12.h
@@ -15,7 +15,7 @@
#ifndef SRC_DAWN_NATIVE_D3D12_FENCED3D12_H_
#define SRC_DAWN_NATIVE_D3D12_FENCED3D12_H_
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/DawnNative.h"
#include "dawn/native/Error.h"
#include "dawn/native/d3d/Fence.h"
diff --git a/src/dawn/native/d3d12/SamplerHeapCacheD3D12.h b/src/dawn/native/d3d12/SamplerHeapCacheD3D12.h
index e701957..934ff1d 100644
--- a/src/dawn/native/d3d12/SamplerHeapCacheD3D12.h
+++ b/src/dawn/native/d3d12/SamplerHeapCacheD3D12.h
@@ -18,6 +18,7 @@
#include <unordered_set>
#include <vector>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/native/BindingInfo.h"
#include "dawn/native/d3d12/CPUDescriptorHeapAllocationD3D12.h"
diff --git a/src/dawn/native/utils/WGPUHelpers.h b/src/dawn/native/utils/WGPUHelpers.h
index 036d00d..53febe8 100644
--- a/src/dawn/native/utils/WGPUHelpers.h
+++ b/src/dawn/native/utils/WGPUHelpers.h
@@ -19,7 +19,7 @@
#include <initializer_list>
#include <vector>
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/native/Error.h"
#include "dawn/native/UsageValidationMode.h"
#include "dawn/native/dawn_platform.h"
diff --git a/src/dawn/native/vulkan/BackendVk.h b/src/dawn/native/vulkan/BackendVk.h
index 5e46e45..c7b4497 100644
--- a/src/dawn/native/vulkan/BackendVk.h
+++ b/src/dawn/native/vulkan/BackendVk.h
@@ -23,6 +23,7 @@
#include "dawn/native/BackendConnection.h"
#include "dawn/common/DynamicLib.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/common/ityp_array.h"
#include "dawn/native/vulkan/VulkanFunctions.h"
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.h b/src/dawn/native/vulkan/PhysicalDeviceVk.h
index d6a0f12..a194645 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.h
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.h
@@ -17,7 +17,7 @@
#include "dawn/native/PhysicalDevice.h"
-#include "dawn/common/RefCounted.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/vulkan_platform.h"
#include "dawn/native/vulkan/VulkanInfo.h"
diff --git a/src/dawn/tests/unittests/RefCountedTests.cpp b/src/dawn/tests/unittests/RefCountedTests.cpp
index 9c05049..b1161c4 100644
--- a/src/dawn/tests/unittests/RefCountedTests.cpp
+++ b/src/dawn/tests/unittests/RefCountedTests.cpp
@@ -15,6 +15,7 @@
#include <thread>
#include <utility>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "gtest/gtest.h"
diff --git a/src/dawn/tests/unittests/ResultTests.cpp b/src/dawn/tests/unittests/ResultTests.cpp
index f187e04..108d3f0 100644
--- a/src/dawn/tests/unittests/ResultTests.cpp
+++ b/src/dawn/tests/unittests/ResultTests.cpp
@@ -16,6 +16,7 @@
#include <utility>
#include <vector>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/common/Result.h"
#include "gtest/gtest.h"
diff --git a/src/dawn/tests/unittests/StackContainerTests.cpp b/src/dawn/tests/unittests/StackContainerTests.cpp
index be13d5f..10e639b 100644
--- a/src/dawn/tests/unittests/StackContainerTests.cpp
+++ b/src/dawn/tests/unittests/StackContainerTests.cpp
@@ -8,6 +8,7 @@
#include <cstddef>
#include <vector>
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/common/StackContainer.h"
#include "gtest/gtest.h"
diff --git a/src/dawn/tests/unittests/ToBackendTests.cpp b/src/dawn/tests/unittests/ToBackendTests.cpp
index 8720a27..396e106 100644
--- a/src/dawn/tests/unittests/ToBackendTests.cpp
+++ b/src/dawn/tests/unittests/ToBackendTests.cpp
@@ -16,6 +16,7 @@
#include "gtest/gtest.h"
+#include "dawn/common/Ref.h"
#include "dawn/common/RefCounted.h"
#include "dawn/native/ToBackend.h"