discardable_memory_win.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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
24void DiscardableMemory::GetSupportedTypes(
25    std::vector<DiscardableMemoryType>* types) {
26  const DiscardableMemoryType supported_types[] = {
27    DISCARDABLE_MEMORY_TYPE_EMULATED,
28    DISCARDABLE_MEMORY_TYPE_MALLOC
29  };
30  types->assign(supported_types, supported_types + arraysize(supported_types));
31}
32
33// static
34scoped_ptr<DiscardableMemory> DiscardableMemory::CreateLockedMemoryWithType(
35    DiscardableMemoryType type, size_t size) {
36  switch (type) {
37    case DISCARDABLE_MEMORY_TYPE_NONE:
38    case DISCARDABLE_MEMORY_TYPE_ASHMEM:
39    case DISCARDABLE_MEMORY_TYPE_MAC:
40      return scoped_ptr<DiscardableMemory>();
41    case DISCARDABLE_MEMORY_TYPE_EMULATED: {
42      scoped_ptr<internal::DiscardableMemoryEmulated> memory(
43          new internal::DiscardableMemoryEmulated(size));
44      if (!memory->Initialize())
45        return scoped_ptr<DiscardableMemory>();
46
47      return memory.PassAs<DiscardableMemory>();
48    }
49    case DISCARDABLE_MEMORY_TYPE_MALLOC: {
50      scoped_ptr<internal::DiscardableMemoryMalloc> memory(
51          new internal::DiscardableMemoryMalloc(size));
52      if (!memory->Initialize())
53        return scoped_ptr<DiscardableMemory>();
54
55      return memory.PassAs<DiscardableMemory>();
56    }
57  }
58
59  NOTREACHED();
60  return scoped_ptr<DiscardableMemory>();
61}
62
63// static
64void DiscardableMemory::PurgeForTesting() {
65  internal::DiscardableMemoryEmulated::PurgeForTesting();
66}
67
68}  // namespace base
69