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#ifndef BASE_MEMORY_DISCARDABLE_MEMORY_ASHMEM_H_
6#define BASE_MEMORY_DISCARDABLE_MEMORY_ASHMEM_H_
7
8#include "base/memory/discardable_memory.h"
9
10#include "base/macros.h"
11#include "base/memory/discardable_memory_manager.h"
12
13namespace base {
14namespace internal {
15
16class DiscardableAshmemChunk;
17class DiscardableMemoryAshmemAllocator;
18class DiscardableMemoryManager;
19
20class DiscardableMemoryAshmem
21    : public DiscardableMemory,
22      public internal::DiscardableMemoryManagerAllocation {
23 public:
24  explicit DiscardableMemoryAshmem(size_t bytes,
25                                   DiscardableMemoryAshmemAllocator* allocator,
26                                   DiscardableMemoryManager* manager);
27
28  virtual ~DiscardableMemoryAshmem();
29
30  bool Initialize();
31
32  // Overridden from DiscardableMemory:
33  virtual DiscardableMemoryLockStatus Lock() OVERRIDE;
34  virtual void Unlock() OVERRIDE;
35  virtual void* Memory() const OVERRIDE;
36
37  // Overridden from internal::DiscardableMemoryManagerAllocation:
38  virtual bool AllocateAndAcquireLock() OVERRIDE;
39  virtual void ReleaseLock() OVERRIDE;
40  virtual void Purge() OVERRIDE;
41
42 private:
43  const size_t bytes_;
44  DiscardableMemoryAshmemAllocator* const allocator_;
45  DiscardableMemoryManager* const manager_;
46  bool is_locked_;
47  scoped_ptr<DiscardableAshmemChunk> ashmem_chunk_;
48
49  DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryAshmem);
50};
51
52}  // namespace internal
53}  // namespace base
54
55#endif  // BASE_MEMORY_DISCARDABLE_MEMORY_ASHMEM_H_
56