 Chromium Code Reviews
 Chromium Code Reviews Issue 2565323002:
  Stop using callbacks in MemoryCoordinatorProxy  (Closed)
    
  
    Issue 2565323002:
  Stop using callbacks in MemoryCoordinatorProxy  (Closed) 
  | Index: base/memory/memory_coordinator_proxy.h | 
| diff --git a/base/memory/memory_coordinator_proxy.h b/base/memory/memory_coordinator_proxy.h | 
| index 4148da5dceec0c59e39462a6f740569263432ba9..2adf5657de490b5f1bdbd05b6c4fbf5e5babe3ab 100644 | 
| --- a/base/memory/memory_coordinator_proxy.h | 
| +++ b/base/memory/memory_coordinator_proxy.h | 
| @@ -6,33 +6,38 @@ | 
| #define BASE_MEMORY_MEMORY_COORDINATOR_PROXY_H_ | 
| #include "base/base_export.h" | 
| -#include "base/callback.h" | 
| #include "base/memory/memory_coordinator_client.h" | 
| #include "base/memory/singleton.h" | 
| +#include "base/memory/weak_ptr.h" | 
| namespace base { | 
| +// An interface to MemoryCoordinator. See comments in MemoryCoordinatorProxy for | 
| +// method descriptions. | 
| +class BASE_EXPORT MemoryCoordinatorInterface { | 
| + public: | 
| + virtual ~MemoryCoordinatorInterface() {} | 
| + | 
| + virtual MemoryState GetLocalMemoryState() = 0; | 
| 
dcheng
2016/12/12 07:27:07
Two nits:
1) I think it's more common to document
 
bashi
2016/12/12 07:38:39
Let me clarify your comments. Do you mean moving c
 
dcheng
2016/12/12 08:31:13
Yes.
 
chrisha
2016/12/13 15:42:47
+1 to dropping "Interface" and putting the comment
 | 
| + virtual void SetMemoryStateForTesting(MemoryState state) = 0; | 
| +}; | 
| + | 
| // The proxy of MemoryCoordinator to be accessed from components that are not | 
| // in content/browser e.g. net. | 
| class BASE_EXPORT MemoryCoordinatorProxy { | 
| public: | 
| - using GetCurrentMemoryStateCallback = base::Callback<MemoryState()>; | 
| - using SetCurrentMemoryStateCallback = base::Callback<void(MemoryState)>; | 
| - | 
| static MemoryCoordinatorProxy* GetInstance(); | 
| - // Returns the current memory state. | 
| - MemoryState GetCurrentMemoryState() const; | 
| - | 
| - // Sets the current memory state. This function is for testing only. | 
| - void SetCurrentMemoryStateForTesting(MemoryState memory_state); | 
| + // Sets an instance of MemoryCoordinator | 
| + void Set(WeakPtr<MemoryCoordinatorInterface> instance); | 
| 
dcheng
2016/12/12 07:27:07
Does this need to be a weak pointer? Maybe it shou
 
bashi
2016/12/12 07:38:39
Sure. But I think it would be better to have expli
 
dcheng
2016/12/12 08:31:13
I actually prefer that model: the WeakPtr make it
 
chrisha
2016/12/13 15:42:47
Ditto. I'd prefer explicit management here. We alr
 | 
| - // Sets state-getter callback. | 
| - void SetGetCurrentMemoryStateCallback(GetCurrentMemoryStateCallback callback); | 
| + // Returns the process's current memory state. Note that the local state | 
| + // could be different from the global memory state as some processes cannot | 
| + // be suspended. | 
| + MemoryState GetLocalMemoryState() const; | 
| - // Sets state-setter callback. | 
| - void SetSetCurrentMemoryStateForTestingCallback( | 
| - SetCurrentMemoryStateCallback callback); | 
| + // Sets the memory state of this process. This function is for testing only. | 
| + void SetMemoryStateForTesting(MemoryState memory_state); | 
| 
chrisha
2016/12/13 15:42:47
Why are these two functions needed here, if it's a
 | 
| private: | 
| friend struct base::DefaultSingletonTraits<MemoryCoordinatorProxy>; | 
| @@ -40,8 +45,7 @@ class BASE_EXPORT MemoryCoordinatorProxy { | 
| MemoryCoordinatorProxy(); | 
| virtual ~MemoryCoordinatorProxy(); | 
| - GetCurrentMemoryStateCallback getter_callback_; | 
| - SetCurrentMemoryStateCallback setter_callback_; | 
| + WeakPtr<MemoryCoordinatorInterface> instance_; | 
| DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorProxy); | 
| }; |