blob: 7ed0a4565ede26f6b54a011c27e0e9484c665be7 [file] [log] [blame]
reveman5ea34252015-03-18 08:18:16 +09001// Copyright 2015 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/test/test_discardable_memory_allocator.h"
6
jbromanef35fe92016-03-16 10:52:06 +09007#include <cstdint>
8#include <cstring>
reveman5ea34252015-03-18 08:18:16 +09009
10#include "base/memory/discardable_memory.h"
11
12namespace base {
13namespace {
14
15class DiscardableMemoryImpl : public DiscardableMemory {
16 public:
jbromanef35fe92016-03-16 10:52:06 +090017 explicit DiscardableMemoryImpl(size_t size)
18 : data_(new uint8_t[size]), size_(size) {}
reveman5ea34252015-03-18 08:18:16 +090019
20 // Overridden from DiscardableMemory:
jbromanef35fe92016-03-16 10:52:06 +090021 bool Lock() override {
22 DCHECK(!is_locked_);
23 is_locked_ = true;
24 return false;
25 }
26
27 void Unlock() override {
28 DCHECK(is_locked_);
29 is_locked_ = false;
30 // Force eviction to catch clients not correctly checking the return value
31 // of Lock().
32 memset(data_.get(), 0, size_);
33 }
34
35 void* data() const override {
36 DCHECK(is_locked_);
37 return data_.get();
38 }
reveman5ea34252015-03-18 08:18:16 +090039
ssidbd827b32015-08-26 00:33:20 +090040 trace_event::MemoryAllocatorDump* CreateMemoryAllocatorDump(
41 const char* name,
42 trace_event::ProcessMemoryDump* pmd) const override {
43 return nullptr;
44 }
45
reveman5ea34252015-03-18 08:18:16 +090046 private:
jbromanef35fe92016-03-16 10:52:06 +090047 bool is_locked_ = true;
revemand0ab04c2015-04-17 05:52:18 +090048 scoped_ptr<uint8_t[]> data_;
jbromanef35fe92016-03-16 10:52:06 +090049 size_t size_;
reveman5ea34252015-03-18 08:18:16 +090050};
51
52} // namespace
53
54TestDiscardableMemoryAllocator::TestDiscardableMemoryAllocator() {
55}
56
57TestDiscardableMemoryAllocator::~TestDiscardableMemoryAllocator() {
58}
59
60scoped_ptr<DiscardableMemory>
61TestDiscardableMemoryAllocator::AllocateLockedDiscardableMemory(size_t size) {
62 return make_scoped_ptr(new DiscardableMemoryImpl(size));
63}
64
65} // namespace base