Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / base / memory / discardable_memory_emulated.cc
index 82f887f..415a451 100644 (file)
@@ -8,7 +8,6 @@
 #include "base/memory/discardable_memory_manager.h"
 
 namespace base {
-
 namespace {
 
 base::LazyInstance<internal::DiscardableMemoryManager>::Leaky g_manager =
@@ -18,9 +17,10 @@ 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() {
@@ -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