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 12namespace base { 13namespace internal { 14 15class DiscardableMemoryEmulated 16 : public DiscardableMemory, 17 public internal::DiscardableMemoryManagerAllocation { 18 public: 19 explicit DiscardableMemoryEmulated(size_t bytes); 20 virtual ~DiscardableMemoryEmulated(); 21 22 static bool ReduceMemoryUsage(); 23 24 // TODO(reveman): Remove this as it is breaking the discardable memory design 25 // principle that implementations should not rely on information this is 26 // unavailable in kernel space. crbug.com/400423 27 BASE_EXPORT static void ReduceMemoryUsageUntilWithinLimit(size_t bytes); 28 29 static void PurgeForTesting(); 30 31 bool Initialize(); 32 33 // Overridden from DiscardableMemory: 34 virtual DiscardableMemoryLockStatus Lock() OVERRIDE; 35 virtual void Unlock() OVERRIDE; 36 virtual void* Memory() const OVERRIDE; 37 38 // Overridden from internal::DiscardableMemoryManagerAllocation: 39 virtual bool AllocateAndAcquireLock() OVERRIDE; 40 virtual void ReleaseLock() OVERRIDE {} 41 virtual void Purge() OVERRIDE; 42 43 private: 44 const size_t bytes_; 45 scoped_ptr<uint8[]> memory_; 46 bool is_locked_; 47 48 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryEmulated); 49}; 50 51} // namespace internal 52} // namespace base 53 54#endif // BASE_MEMORY_DISCARDABLE_MEMORY_EMULATED_H_ 55