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.
4
5#include "base/memory/discardable_memory_malloc.h"
6
7#include "base/logging.h"
8
9namespace base {
10namespace internal {
11
12DiscardableMemoryMalloc::DiscardableMemoryMalloc(size_t size) : size_(size) {
13}
14
15DiscardableMemoryMalloc::~DiscardableMemoryMalloc() {
16}
17
18bool DiscardableMemoryMalloc::Initialize() {
19  return Lock() != DISCARDABLE_MEMORY_LOCK_STATUS_FAILED;
20}
21
22DiscardableMemoryLockStatus DiscardableMemoryMalloc::Lock() {
23  DCHECK(!memory_);
24
25  memory_.reset(static_cast<uint8*>(malloc(size_)));
26  if (!memory_)
27    return DISCARDABLE_MEMORY_LOCK_STATUS_FAILED;
28
29  return DISCARDABLE_MEMORY_LOCK_STATUS_PURGED;
30}
31
32void DiscardableMemoryMalloc::Unlock() {
33  DCHECK(memory_);
34  memory_.reset();
35}
36
37void* DiscardableMemoryMalloc::Memory() const {
38  DCHECK(memory_);
39  return memory_.get();
40}
41
42}  // namespace internal
43}  // namespace base
44