Add browser-wide discardable memory implementation.
[chromium-blink-merge.git] / base / memory / discardable_memory_shmem_allocator.cc
blob78d15c1031e7713bc9e80915dd894942c4d755b6
1 // Copyright 2014 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.
5 #include "base/memory/discardable_memory_shmem_allocator.h"
7 #include "base/lazy_instance.h"
8 #include "base/logging.h"
9 #include "base/memory/discardable_shared_memory.h"
11 namespace base {
12 namespace {
14 // Default allocator implementation that allocates in-process
15 // DiscardableSharedMemory instances.
16 class DiscardableMemoryShmemAllocatorImpl
17 : public DiscardableMemoryShmemAllocator {
18 public:
19 // Overridden from DiscardableMemoryShmemAllocator:
20 virtual scoped_ptr<DiscardableSharedMemory>
21 AllocateLockedDiscardableSharedMemory(size_t size) override {
22 scoped_ptr<DiscardableSharedMemory> memory(new DiscardableSharedMemory);
23 if (!memory->CreateAndMap(size))
24 return scoped_ptr<DiscardableSharedMemory>();
26 return memory.Pass();
30 LazyInstance<DiscardableMemoryShmemAllocatorImpl>::Leaky g_default_allocator =
31 LAZY_INSTANCE_INITIALIZER;
33 DiscardableMemoryShmemAllocator* g_allocator = nullptr;
35 } // namespace
37 // static
38 void DiscardableMemoryShmemAllocator::SetInstance(
39 DiscardableMemoryShmemAllocator* allocator) {
40 DCHECK(allocator);
42 // Make sure this function is only called once before the first call
43 // to GetInstance().
44 DCHECK(!g_allocator);
46 g_allocator = allocator;
49 // static
50 DiscardableMemoryShmemAllocator*
51 DiscardableMemoryShmemAllocator::GetInstance() {
52 if (!g_allocator)
53 g_allocator = g_default_allocator.Pointer();
55 return g_allocator;
58 } // namespace base