1 // Copyright 2013 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_DISCARDABLE_MEMORY_EMULATED_H_ 6 #define BASE_MEMORY_DISCARDABLE_MEMORY_EMULATED_H_ 7 8 #include "base/memory/discardable_memory.h" 9 10 #include "base/memory/discardable_memory_manager.h" 11 12 namespace base { 13 namespace internal { 14 15 class DiscardableMemoryEmulated 16 : public DiscardableMemory, 17 public internal::DiscardableMemoryManagerAllocation { 18 public: 19 explicit DiscardableMemoryEmulated(size_t bytes); 20 virtual ~DiscardableMemoryEmulated(); 21 22 static void RegisterMemoryPressureListeners(); 23 static void UnregisterMemoryPressureListeners(); 24 static bool ReduceMemoryUsage(); 25 26 static void PurgeForTesting(); 27 28 bool Initialize(); 29 30 // Overridden from DiscardableMemory: 31 virtual DiscardableMemoryLockStatus Lock() OVERRIDE; 32 virtual void Unlock() OVERRIDE; 33 virtual void* Memory() const OVERRIDE; 34 35 // Overridden from internal::DiscardableMemoryManagerAllocation: 36 virtual bool AllocateAndAcquireLock() OVERRIDE; ReleaseLock()37 virtual void ReleaseLock() OVERRIDE {} 38 virtual void Purge() OVERRIDE; 39 40 private: 41 const size_t bytes_; 42 scoped_ptr<uint8[]> memory_; 43 bool is_locked_; 44 45 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryEmulated); 46 }; 47 48 } // namespace internal 49 } // namespace base 50 51 #endif // BASE_MEMORY_DISCARDABLE_MEMORY_EMULATED_H_ 52