15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/discardable_memory.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/discardable_memory_emulated.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/discardable_memory_malloc.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace base { 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool DiscardableMemory::ReduceMemoryUsage() { 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return internal::DiscardableMemoryEmulated::ReduceMemoryUsage(); 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DiscardableMemory::GetSupportedTypes( 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<DiscardableMemoryType>* types) { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const DiscardableMemoryType supported_types[] = { 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISCARDABLE_MEMORY_TYPE_EMULATED, 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISCARDABLE_MEMORY_TYPE_MALLOC 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) types->assign(supported_types, supported_types + arraysize(supported_types)); 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<DiscardableMemory> DiscardableMemory::CreateLockedMemoryWithType( 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DiscardableMemoryType type, size_t size) { 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (type) { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case DISCARDABLE_MEMORY_TYPE_NONE: 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case DISCARDABLE_MEMORY_TYPE_ASHMEM: 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case DISCARDABLE_MEMORY_TYPE_MAC: 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DiscardableMemory>(); 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case DISCARDABLE_MEMORY_TYPE_EMULATED: { 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<internal::DiscardableMemoryEmulated> memory( 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new internal::DiscardableMemoryEmulated(size)); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!memory->Initialize()) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DiscardableMemory>(); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return memory.PassAs<DiscardableMemory>(); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case DISCARDABLE_MEMORY_TYPE_MALLOC: { 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<internal::DiscardableMemoryMalloc> memory( 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new internal::DiscardableMemoryMalloc(size)); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!memory->Initialize()) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DiscardableMemory>(); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return memory.PassAs<DiscardableMemory>(); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DiscardableMemory>(); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DiscardableMemory::PurgeForTesting() { 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::DiscardableMemoryEmulated::PurgeForTesting(); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace base 64