#include "base/memory/discardable_memory_manager.h"
namespace base {
-
namespace {
base::LazyInstance<internal::DiscardableMemoryManager>::Leaky g_manager =
namespace internal {
-DiscardableMemoryEmulated::DiscardableMemoryEmulated(size_t size)
- : is_locked_(false) {
- g_manager.Pointer()->Register(this, size);
+DiscardableMemoryEmulated::DiscardableMemoryEmulated(size_t bytes)
+ : bytes_(bytes),
+ is_locked_(false) {
+ g_manager.Pointer()->Register(this, bytes);
}
DiscardableMemoryEmulated::~DiscardableMemoryEmulated() {
DCHECK(!is_locked_);
bool purged = false;
- memory_ = g_manager.Pointer()->Acquire(this, &purged);
- if (!memory_)
+ if (!g_manager.Pointer()->AcquireLock(this, &purged))
return DISCARDABLE_MEMORY_LOCK_STATUS_FAILED;
is_locked_ = true;
void DiscardableMemoryEmulated::Unlock() {
DCHECK(is_locked_);
- g_manager.Pointer()->Release(this, memory_.Pass());
+ g_manager.Pointer()->ReleaseLock(this);
is_locked_ = false;
}
void* DiscardableMemoryEmulated::Memory() const {
+ DCHECK(is_locked_);
DCHECK(memory_);
return memory_.get();
}
+bool DiscardableMemoryEmulated::AllocateAndAcquireLock() {
+ if (memory_)
+ return true;
+
+ memory_.reset(new uint8[bytes_]);
+ return false;
+}
+
+void DiscardableMemoryEmulated::Purge() {
+ memory_.reset();
+}
+
} // namespace internal
} // namespace base