Index: gpu/command_buffer/common/discardable_handle.cc |
diff --git a/gpu/command_buffer/common/discardable_handle.cc b/gpu/command_buffer/common/discardable_handle.cc |
index 987ad821f4508025b1e56665ca4ab7ed0671a82f..d7fa9cd642cd6cde1164ca724cb7e3358f8b2473 100644 |
--- a/gpu/command_buffer/common/discardable_handle.cc |
+++ b/gpu/command_buffer/common/discardable_handle.cc |
@@ -30,11 +30,11 @@ DiscardableHandleBase& DiscardableHandleBase::operator=( |
DiscardableHandleBase& DiscardableHandleBase::operator=( |
DiscardableHandleBase&& other) = default; |
-bool DiscardableHandleBase::IsLockedForTesting() { |
+bool DiscardableHandleBase::IsLockedForTesting() const { |
return kHandleLockedStart <= base::subtle::NoBarrier_Load(AsAtomic()); |
} |
-bool DiscardableHandleBase::IsDeletedForTesting() { |
+bool DiscardableHandleBase::IsDeletedForTesting() const { |
return kHandleDeleted == base::subtle::NoBarrier_Load(AsAtomic()); |
} |
@@ -114,4 +114,11 @@ bool ServiceDiscardableHandle::Delete() { |
AsAtomic(), kHandleUnlocked, kHandleDeleted); |
} |
+void ServiceDiscardableHandle::ForceDelete() { |
+ // No barrier is needed as all GPU process access happens on a single thread, |
+ // and communication of dependent data between the GPU process and the |
+ // renderer process happens across the command buffer and includes barriers. |
+ base::subtle::NoBarrier_Store(AsAtomic(), kHandleDeleted); |
+} |
+ |
} // namespace gpu |