blob: 23aac68c753808a19f02bfa76d77c0f93d1aa6b2 [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
dchengd0e0af62016-03-25 09:15:56 +090010#include "base/logging.h"
reveman5ea34252015-03-18 08:18:16 +090011#include "base/memory/discardable_memory.h"
dchengcc8e4d82016-04-05 06:25:51 +090012#include "base/memory/ptr_util.h"
reveman5ea34252015-03-18 08:18:16 +090013
14namespace base {
15namespace {
16
17class DiscardableMemoryImpl : public DiscardableMemory {
18 public:
jbromanef35fe92016-03-16 10:52:06 +090019 explicit DiscardableMemoryImpl(size_t size)
20 : data_(new uint8_t[size]), size_(size) {}
reveman5ea34252015-03-18 08:18:16 +090021
22 // Overridden from DiscardableMemory:
jbromanef35fe92016-03-16 10:52:06 +090023 bool Lock() override {
24 DCHECK(!is_locked_);
25 is_locked_ = true;
26 return false;
27 }
28
29 void Unlock() override {
30 DCHECK(is_locked_);
31 is_locked_ = false;
32 // Force eviction to catch clients not correctly checking the return value
33 // of Lock().
34 memset(data_.get(), 0, size_);
35 }
36
37 void* data() const override {
38 DCHECK(is_locked_);
39 return data_.get();
40 }
reveman5ea34252015-03-18 08:18:16 +090041
ssidbd827b32015-08-26 00:33:20 +090042 trace_event::MemoryAllocatorDump* CreateMemoryAllocatorDump(
43 const char* name,
44 trace_event::ProcessMemoryDump* pmd) const override {
45 return nullptr;
46 }
47
reveman5ea34252015-03-18 08:18:16 +090048 private:
jbromanef35fe92016-03-16 10:52:06 +090049 bool is_locked_ = true;
dchengcc8e4d82016-04-05 06:25:51 +090050 std::unique_ptr<uint8_t[]> data_;
jbromanef35fe92016-03-16 10:52:06 +090051 size_t size_;
reveman5ea34252015-03-18 08:18:16 +090052};
53
54} // namespace
55
56TestDiscardableMemoryAllocator::TestDiscardableMemoryAllocator() {
57}
58
59TestDiscardableMemoryAllocator::~TestDiscardableMemoryAllocator() {
60}
61
dchengcc8e4d82016-04-05 06:25:51 +090062std::unique_ptr<DiscardableMemory>
reveman5ea34252015-03-18 08:18:16 +090063TestDiscardableMemoryAllocator::AllocateLockedDiscardableMemory(size_t size) {
Jeremy Romancd0c4672017-08-17 08:27:24 +090064 return std::make_unique<DiscardableMemoryImpl>(size);
reveman5ea34252015-03-18 08:18:16 +090065}
66
67} // namespace base