Index: base/memory/discardable_memory_emulated.cc |
diff --git a/base/memory/discardable_memory_emulated.cc b/base/memory/discardable_memory_emulated.cc |
index 415a45145cd79176fad48d97775aaa98b3f739d0..c0b2c0d17ba3944da318e92b8380d32e585f51ab 100644 |
--- a/base/memory/discardable_memory_emulated.cc |
+++ b/base/memory/discardable_memory_emulated.cc |
@@ -10,8 +10,20 @@ |
namespace base { |
namespace { |
-base::LazyInstance<internal::DiscardableMemoryManager>::Leaky g_manager = |
- LAZY_INSTANCE_INITIALIZER; |
+// This is admittedly pretty magical. It's approximately enough memory for four |
+// 2560x1600 images. |
+const size_t kEmulatedMemoryLimit = 64 * 1024 * 1024; |
+const size_t kEmulatedBytesToKeepUnderModeratePressure = |
+ kEmulatedMemoryLimit / 4; |
+ |
+struct SharedState { |
+ SharedState() |
+ : manager(kEmulatedMemoryLimit, |
+ kEmulatedBytesToKeepUnderModeratePressure) {} |
+ |
+ internal::DiscardableMemoryManager manager; |
+}; |
+LazyInstance<SharedState>::Leaky g_shared_state = LAZY_INSTANCE_INITIALIZER; |
} // namespace |
@@ -20,28 +32,28 @@ namespace internal { |
DiscardableMemoryEmulated::DiscardableMemoryEmulated(size_t bytes) |
: bytes_(bytes), |
is_locked_(false) { |
- g_manager.Pointer()->Register(this, bytes); |
+ g_shared_state.Pointer()->manager.Register(this, bytes); |
} |
DiscardableMemoryEmulated::~DiscardableMemoryEmulated() { |
if (is_locked_) |
Unlock(); |
- g_manager.Pointer()->Unregister(this); |
+ g_shared_state.Pointer()->manager.Unregister(this); |
} |
// static |
void DiscardableMemoryEmulated::RegisterMemoryPressureListeners() { |
- g_manager.Pointer()->RegisterMemoryPressureListener(); |
+ g_shared_state.Pointer()->manager.RegisterMemoryPressureListener(); |
} |
// static |
void DiscardableMemoryEmulated::UnregisterMemoryPressureListeners() { |
- g_manager.Pointer()->UnregisterMemoryPressureListener(); |
+ g_shared_state.Pointer()->manager.UnregisterMemoryPressureListener(); |
} |
// static |
void DiscardableMemoryEmulated::PurgeForTesting() { |
- g_manager.Pointer()->PurgeAll(); |
+ g_shared_state.Pointer()->manager.PurgeAll(); |
} |
bool DiscardableMemoryEmulated::Initialize() { |
@@ -52,7 +64,7 @@ DiscardableMemoryLockStatus DiscardableMemoryEmulated::Lock() { |
DCHECK(!is_locked_); |
bool purged = false; |
- if (!g_manager.Pointer()->AcquireLock(this, &purged)) |
+ if (!g_shared_state.Pointer()->manager.AcquireLock(this, &purged)) |
return DISCARDABLE_MEMORY_LOCK_STATUS_FAILED; |
is_locked_ = true; |
@@ -62,7 +74,7 @@ DiscardableMemoryLockStatus DiscardableMemoryEmulated::Lock() { |
void DiscardableMemoryEmulated::Unlock() { |
DCHECK(is_locked_); |
- g_manager.Pointer()->ReleaseLock(this); |
+ g_shared_state.Pointer()->manager.ReleaseLock(this); |
is_locked_ = false; |
} |