Chromium Code Reviews| Index: base/memory/memory_coordinator_proxy.cc |
| diff --git a/base/memory/memory_coordinator_proxy.cc b/base/memory/memory_coordinator_proxy.cc |
| index 24b6d66655e0e0d1cdaf59f89b7c2f2cb0c7458f..03e63873f30a7e8a88f31dd626291e64c42c7970 100644 |
| --- a/base/memory/memory_coordinator_proxy.cc |
| +++ b/base/memory/memory_coordinator_proxy.cc |
| @@ -4,38 +4,52 @@ |
| #include "base/memory/memory_coordinator_proxy.h" |
| +#include "base/atomicops.h" |
| + |
| namespace base { |
| +namespace { |
| + |
| +subtle::AtomicWord g_memory_coordinator = 0; |
|
dcheng
2017/02/20 03:07:21
Is it necessary to use atomics? The base::Callback
bashi
2017/02/20 03:16:59
Probably it isn't necessary to use atomics. I just
|
| + |
| +inline MemoryCoordinator* GetMemoryCoordinator() { |
| + subtle::AtomicWord coordinator = |
| + base::subtle::Acquire_Load(&g_memory_coordinator); |
| + return reinterpret_cast<MemoryCoordinator*>(coordinator); |
| +} |
| + |
| +} // namespace |
| + |
| MemoryCoordinatorProxy::MemoryCoordinatorProxy() { |
| } |
| MemoryCoordinatorProxy::~MemoryCoordinatorProxy() { |
| } |
| +// static |
| MemoryCoordinatorProxy* MemoryCoordinatorProxy::GetInstance() { |
| return Singleton<base::MemoryCoordinatorProxy>::get(); |
| } |
| +// static |
| +void MemoryCoordinatorProxy::SetMemoryCoordinator( |
| + MemoryCoordinator* coordinator) { |
| + base::subtle::Release_Store( |
| + &g_memory_coordinator, reinterpret_cast<subtle::AtomicWord>(coordinator)); |
| +} |
| + |
| MemoryState MemoryCoordinatorProxy::GetCurrentMemoryState() const { |
| - if (!getter_callback_) |
| + auto* coordinator = GetMemoryCoordinator(); |
| + if (!coordinator) |
| return MemoryState::NORMAL; |
| - return getter_callback_.Run(); |
| + return coordinator->GetCurrentMemoryState(); |
| } |
| void MemoryCoordinatorProxy::SetCurrentMemoryStateForTesting( |
| MemoryState memory_state) { |
| - DCHECK(setter_callback_); |
| - setter_callback_.Run(memory_state); |
| -} |
| - |
| -void MemoryCoordinatorProxy::SetGetCurrentMemoryStateCallback( |
| - GetCurrentMemoryStateCallback callback) { |
| - getter_callback_ = callback; |
| -} |
| - |
| -void MemoryCoordinatorProxy::SetSetCurrentMemoryStateForTestingCallback( |
| - SetCurrentMemoryStateCallback callback) { |
| - setter_callback_ = callback; |
| + auto* coordinator = GetMemoryCoordinator(); |
| + DCHECK(coordinator); |
| + coordinator->SetCurrentMemoryStateForTesting(memory_state); |
| } |
| } // namespace base |