• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef BASE_MEMORY_MEMORY_COORDINATOR_PROXY_H_
6 #define BASE_MEMORY_MEMORY_COORDINATOR_PROXY_H_
7 
8 #include "base/base_export.h"
9 #include "base/callback.h"
10 #include "base/memory/memory_coordinator_client.h"
11 #include "base/memory/singleton.h"
12 
13 namespace base {
14 
15 // The MemoryCoordinator interface. See comments in MemoryCoordinatorProxy for
16 // method descriptions.
17 class BASE_EXPORT MemoryCoordinator {
18  public:
19   virtual ~MemoryCoordinator() = default;
20 
21   virtual MemoryState GetCurrentMemoryState() const = 0;
22 };
23 
24 // The proxy of MemoryCoordinator to be accessed from components that are not
25 // in content/browser e.g. net.
26 class BASE_EXPORT MemoryCoordinatorProxy {
27  public:
28   static MemoryCoordinatorProxy* GetInstance();
29 
30   // Sets an implementation of MemoryCoordinator. MemoryCoordinatorProxy doesn't
31   // take the ownership of |coordinator|. It must outlive this proxy.
32   // This should be called before any components starts using this proxy.
33   static void SetMemoryCoordinator(MemoryCoordinator* coordinator);
34 
35   // Returns the current memory state.
36   MemoryState GetCurrentMemoryState() const;
37 
38  private:
39   friend struct base::DefaultSingletonTraits<MemoryCoordinatorProxy>;
40 
41   MemoryCoordinatorProxy();
42   virtual ~MemoryCoordinatorProxy();
43 
44   DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorProxy);
45 };
46 
47 }  // namespace base
48 
49 #endif  // BASE_MEMORY_MEMORY_COORDINATOR_PROXY_H_
50