| Index: base/memory/discardable_memory_shmem_allocator.cc
|
| diff --git a/base/memory/discardable_memory_shmem_allocator.cc b/base/memory/discardable_memory_shmem_allocator.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..78d15c1031e7713bc9e80915dd894942c4d755b6
|
| --- /dev/null
|
| +++ b/base/memory/discardable_memory_shmem_allocator.cc
|
| @@ -0,0 +1,58 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/memory/discardable_memory_shmem_allocator.h"
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "base/logging.h"
|
| +#include "base/memory/discardable_shared_memory.h"
|
| +
|
| +namespace base {
|
| +namespace {
|
| +
|
| +// Default allocator implementation that allocates in-process
|
| +// DiscardableSharedMemory instances.
|
| +class DiscardableMemoryShmemAllocatorImpl
|
| + : public DiscardableMemoryShmemAllocator {
|
| + public:
|
| + // Overridden from DiscardableMemoryShmemAllocator:
|
| + virtual scoped_ptr<DiscardableSharedMemory>
|
| + AllocateLockedDiscardableSharedMemory(size_t size) override {
|
| + scoped_ptr<DiscardableSharedMemory> memory(new DiscardableSharedMemory);
|
| + if (!memory->CreateAndMap(size))
|
| + return scoped_ptr<DiscardableSharedMemory>();
|
| +
|
| + return memory.Pass();
|
| + }
|
| +};
|
| +
|
| +LazyInstance<DiscardableMemoryShmemAllocatorImpl>::Leaky g_default_allocator =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +DiscardableMemoryShmemAllocator* g_allocator = nullptr;
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +void DiscardableMemoryShmemAllocator::SetInstance(
|
| + DiscardableMemoryShmemAllocator* allocator) {
|
| + DCHECK(allocator);
|
| +
|
| + // Make sure this function is only called once before the first call
|
| + // to GetInstance().
|
| + DCHECK(!g_allocator);
|
| +
|
| + g_allocator = allocator;
|
| +}
|
| +
|
| +// static
|
| +DiscardableMemoryShmemAllocator*
|
| +DiscardableMemoryShmemAllocator::GetInstance() {
|
| + if (!g_allocator)
|
| + g_allocator = g_default_allocator.Pointer();
|
| +
|
| + return g_allocator;
|
| +}
|
| +
|
| +} // namespace base
|
|
|