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#include "base/memory/discardable_memory.h" 6 7#include "base/logging.h" 8#include "base/memory/discardable_memory_emulated.h" 9#include "base/memory/discardable_memory_malloc.h" 10 11namespace base { 12 13// static 14void DiscardableMemory::RegisterMemoryPressureListeners() { 15 internal::DiscardableMemoryEmulated::RegisterMemoryPressureListeners(); 16} 17 18// static 19void DiscardableMemory::UnregisterMemoryPressureListeners() { 20 internal::DiscardableMemoryEmulated::UnregisterMemoryPressureListeners(); 21} 22 23// static 24bool DiscardableMemory::ReduceMemoryUsage() { 25 return internal::DiscardableMemoryEmulated::ReduceMemoryUsage(); 26} 27 28// static 29void DiscardableMemory::GetSupportedTypes( 30 std::vector<DiscardableMemoryType>* types) { 31 const DiscardableMemoryType supported_types[] = { 32 DISCARDABLE_MEMORY_TYPE_EMULATED, 33 DISCARDABLE_MEMORY_TYPE_MALLOC 34 }; 35 types->assign(supported_types, supported_types + arraysize(supported_types)); 36} 37 38// static 39scoped_ptr<DiscardableMemory> DiscardableMemory::CreateLockedMemoryWithType( 40 DiscardableMemoryType type, size_t size) { 41 switch (type) { 42 case DISCARDABLE_MEMORY_TYPE_NONE: 43 case DISCARDABLE_MEMORY_TYPE_ASHMEM: 44 case DISCARDABLE_MEMORY_TYPE_MAC: 45 return scoped_ptr<DiscardableMemory>(); 46 case DISCARDABLE_MEMORY_TYPE_EMULATED: { 47 scoped_ptr<internal::DiscardableMemoryEmulated> memory( 48 new internal::DiscardableMemoryEmulated(size)); 49 if (!memory->Initialize()) 50 return scoped_ptr<DiscardableMemory>(); 51 52 return memory.PassAs<DiscardableMemory>(); 53 } 54 case DISCARDABLE_MEMORY_TYPE_MALLOC: { 55 scoped_ptr<internal::DiscardableMemoryMalloc> memory( 56 new internal::DiscardableMemoryMalloc(size)); 57 if (!memory->Initialize()) 58 return scoped_ptr<DiscardableMemory>(); 59 60 return memory.PassAs<DiscardableMemory>(); 61 } 62 } 63 64 NOTREACHED(); 65 return scoped_ptr<DiscardableMemory>(); 66} 67 68// static 69void DiscardableMemory::PurgeForTesting() { 70 internal::DiscardableMemoryEmulated::PurgeForTesting(); 71} 72 73} // namespace base 74