Index: base/memory/discardable_memory_shmem.cc |
diff --git a/base/memory/discardable_memory_shmem.cc b/base/memory/discardable_memory_shmem.cc |
index 416fcf2aa9fede8388c4895ec4084307d84c75ae..9056279492f4a2544904b3f38c63d52386df1774 100644 |
--- a/base/memory/discardable_memory_shmem.cc |
+++ b/base/memory/discardable_memory_shmem.cc |
@@ -6,62 +6,17 @@ |
#include "base/lazy_instance.h" |
#include "base/memory/discardable_memory_shmem_allocator.h" |
-#include "base/memory/discardable_shared_memory.h" |
namespace base { |
-namespace { |
- |
-// Have the DiscardableMemoryManager trigger in-process eviction |
-// when address space usage gets too high (e.g. 512 MBytes). |
-const size_t kMemoryLimit = 512 * 1024 * 1024; |
- |
-// internal::DiscardableMemoryManager has an explicit constructor that takes |
-// a number of memory limit parameters. The LeakyLazyInstanceTraits doesn't |
-// handle the case. Thus, we need our own class here. |
-struct DiscardableMemoryManagerLazyInstanceTraits { |
- // Leaky as discardable memory clients can use this after the exit handler |
- // has been called. |
- static const bool kRegisterOnExit = false; |
-#ifndef NDEBUG |
- static const bool kAllowedToAccessOnNonjoinableThread = true; |
-#endif |
- |
- static internal::DiscardableMemoryManager* New(void* instance) { |
- return new (instance) internal::DiscardableMemoryManager( |
- kMemoryLimit, kMemoryLimit, TimeDelta::Max()); |
- } |
- static void Delete(internal::DiscardableMemoryManager* instance) { |
- instance->~DiscardableMemoryManager(); |
- } |
-}; |
- |
-LazyInstance<internal::DiscardableMemoryManager, |
- DiscardableMemoryManagerLazyInstanceTraits> g_manager = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-} // namespace |
- |
namespace internal { |
DiscardableMemoryShmem::DiscardableMemoryShmem(size_t bytes) |
: bytes_(bytes), is_locked_(false) { |
- g_manager.Pointer()->Register(this, bytes); |
} |
DiscardableMemoryShmem::~DiscardableMemoryShmem() { |
if (is_locked_) |
Unlock(); |
- g_manager.Pointer()->Unregister(this); |
-} |
- |
-// static |
-void DiscardableMemoryShmem::ReleaseFreeMemory() { |
- g_manager.Pointer()->ReleaseFreeMemory(); |
-} |
- |
-// static |
-void DiscardableMemoryShmem::PurgeForTesting() { |
- g_manager.Pointer()->PurgeAll(); |
} |
bool DiscardableMemoryShmem::Initialize() { |
@@ -71,18 +26,24 @@ bool DiscardableMemoryShmem::Initialize() { |
DiscardableMemoryLockStatus DiscardableMemoryShmem::Lock() { |
DCHECK(!is_locked_); |
- bool purged = false; |
- if (!g_manager.Pointer()->AcquireLock(this, &purged)) |
+ if (chunk_ && chunk_->Lock()) { |
+ is_locked_ = true; |
+ return DISCARDABLE_MEMORY_LOCK_STATUS_SUCCESS; |
+ } |
+ |
+ chunk_ = DiscardableMemoryShmemAllocator::GetInstance() |
+ ->AllocateLockedDiscardableMemory(bytes_); |
+ if (!chunk_) |
return DISCARDABLE_MEMORY_LOCK_STATUS_FAILED; |
is_locked_ = true; |
- return purged ? DISCARDABLE_MEMORY_LOCK_STATUS_PURGED |
- : DISCARDABLE_MEMORY_LOCK_STATUS_SUCCESS; |
+ return DISCARDABLE_MEMORY_LOCK_STATUS_PURGED; |
} |
void DiscardableMemoryShmem::Unlock() { |
DCHECK(is_locked_); |
- g_manager.Pointer()->ReleaseLock(this); |
+ DCHECK(chunk_); |
+ chunk_->Unlock(); |
is_locked_ = false; |
} |
@@ -92,28 +53,5 @@ void* DiscardableMemoryShmem::Memory() const { |
return chunk_->Memory(); |
} |
-bool DiscardableMemoryShmem::AllocateAndAcquireLock() { |
- if (chunk_ && chunk_->Lock()) |
- return true; |
- |
- chunk_ = DiscardableMemoryShmemAllocator::GetInstance() |
- ->AllocateLockedDiscardableMemory(bytes_); |
- DCHECK(chunk_); |
- return false; |
-} |
- |
-void DiscardableMemoryShmem::ReleaseLock() { |
- chunk_->Unlock(); |
-} |
- |
-void DiscardableMemoryShmem::Purge() { |
- DCHECK(!is_locked_); |
- chunk_.reset(); |
-} |
- |
-bool DiscardableMemoryShmem::IsMemoryResident() const { |
- return chunk_->IsMemoryResident(); |
-} |
- |
} // namespace internal |
} // namespace base |