Index: base/memory/discardable_memory_emulated.cc |
diff --git a/base/memory/discardable_memory_emulated.cc b/base/memory/discardable_memory_emulated.cc |
index 82f887f55d33d967995dc0e68f8f8a69b383c9ab..c9effe6d2ff7e8439e6dc94245e7914da2ea4aa8 100644 |
--- a/base/memory/discardable_memory_emulated.cc |
+++ b/base/memory/discardable_memory_emulated.cc |
@@ -8,7 +8,6 @@ |
#include "base/memory/discardable_memory_manager.h" |
namespace base { |
- |
namespace { |
base::LazyInstance<internal::DiscardableMemoryManager>::Leaky g_manager = |
@@ -52,8 +51,7 @@ DiscardableMemoryLockStatus DiscardableMemoryEmulated::Lock() { |
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; |
@@ -63,14 +61,27 @@ DiscardableMemoryLockStatus DiscardableMemoryEmulated::Lock() { |
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(size_t bytes) { |
+ if (memory_) |
+ return true; |
+ |
+ memory_.reset(new uint8[bytes]); |
+ return false; |
+} |
+ |
+void DiscardableMemoryEmulated::Purge() { |
+ memory_.reset(); |
+} |
+ |
} // namespace internal |
} // namespace base |