Home | History | Annotate | Download | only in memory
      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 
     11 namespace base {
     12 
     13 // static
     14 void DiscardableMemory::RegisterMemoryPressureListeners() {
     15   internal::DiscardableMemoryEmulated::RegisterMemoryPressureListeners();
     16 }
     17 
     18 // static
     19 void DiscardableMemory::UnregisterMemoryPressureListeners() {
     20   internal::DiscardableMemoryEmulated::UnregisterMemoryPressureListeners();
     21 }
     22 
     23 // static
     24 bool DiscardableMemory::ReduceMemoryUsage() {
     25   return internal::DiscardableMemoryEmulated::ReduceMemoryUsage();
     26 }
     27 
     28 // static
     29 void 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
     39 scoped_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
     69 void DiscardableMemory::PurgeForTesting() {
     70   internal::DiscardableMemoryEmulated::PurgeForTesting();
     71 }
     72 
     73 }  // namespace base
     74