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 |