X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fbase%2Fmemory%2Fdiscardable_memory_emulated.cc;h=415a45145cd79176fad48d97775aaa98b3f739d0;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=82f887f55d33d967995dc0e68f8f8a69b383c9ab;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/base/memory/discardable_memory_emulated.cc b/src/base/memory/discardable_memory_emulated.cc index 82f887f..415a451 100644 --- a/src/base/memory/discardable_memory_emulated.cc +++ b/src/base/memory/discardable_memory_emulated.cc @@ -8,7 +8,6 @@ #include "base/memory/discardable_memory_manager.h" namespace base { - namespace { base::LazyInstance::Leaky g_manager = @@ -18,9 +17,10 @@ base::LazyInstance::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() { @@ -52,8 +52,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 +62,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() { + if (memory_) + return true; + + memory_.reset(new uint8[bytes_]); + return false; +} + +void DiscardableMemoryEmulated::Purge() { + memory_.reset(); +} + } // namespace internal } // namespace base