Chromium Code Reviews| Index: base/memory/discardable_memory.cc |
| diff --git a/base/memory/discardable_memory.cc b/base/memory/discardable_memory.cc |
| index 33f9e19cdeee523f7b99a53a8452ef23f0f569f0..df6034227164d6c53081099cbde79f0a3e9bfd2e 100644 |
| --- a/base/memory/discardable_memory.cc |
| +++ b/base/memory/discardable_memory.cc |
| @@ -6,59 +6,97 @@ |
| #include "base/logging.h" |
| +#include <stdio.h> |
| + |
| namespace base { |
| DiscardableMemory::DiscardableMemory() |
| +#if defined(OS_ANDROID) || defined(OS_MACOSX) |
| : memory_(NULL), |
| size_(0), |
| is_locked_(false) |
| #if defined(OS_ANDROID) |
| , fd_(-1) |
| #endif // OS_ANDROID |
| +#endif // OS_ANDROID || OS_MACOSX |
| { |
| DCHECK(Supported()); |
| } |
| -void* DiscardableMemory::Memory() const { |
| - DCHECK(is_locked_); |
| - return memory_; |
| -} |
| - |
| // Stub implementations for platforms that don't support discardable memory. |
| #if !defined(OS_ANDROID) && !defined(OS_MACOSX) |
| +namespace { |
| +static DiscardableMemoryProvider* s_provider = NULL; |
|
jonathan.backer
2013/05/29 14:02:54
Who owns the s_provider? I see it being set, but
Ian Vollick
2013/06/06 00:21:47
The render thread impl. It now resets it in its de
|
| +} // namespace |
| + |
| DiscardableMemory::~DiscardableMemory() { |
| - NOTIMPLEMENTED(); |
| + if (s_provider) |
| + s_provider->Unregister(this); |
| + else |
| + NOTREACHED(); |
| } |
| // static |
| bool DiscardableMemory::Supported() { |
| - return false; |
| + return s_provider; |
| +} |
| + |
| +// static |
| +void DiscardableMemory::SetProvider(DiscardableMemoryProvider* provider) { |
| + s_provider = provider; |
| } |
| bool DiscardableMemory::InitializeAndLock(size_t size) { |
| - NOTIMPLEMENTED(); |
| + if (s_provider) |
| + return s_provider->Register(this, size); |
| + NOTREACHED(); |
| return false; |
| } |
| LockDiscardableMemoryStatus DiscardableMemory::Lock() { |
| - NOTIMPLEMENTED(); |
| + if (s_provider) |
| + return s_provider->Lock(this); |
| + NOTREACHED(); |
| return DISCARDABLE_MEMORY_FAILED; |
| } |
| void DiscardableMemory::Unlock() { |
| - NOTIMPLEMENTED(); |
| + if (s_provider) |
| + s_provider->Unlock(this); |
| + else |
| + NOTREACHED(); |
| +} |
| + |
| +void* DiscardableMemory::Memory() const { |
| + if (s_provider) |
| + return s_provider->Memory(this); |
| + NOTREACHED(); |
| + return NULL; |
| } |
| // static |
| bool DiscardableMemory::PurgeForTestingSupported() { |
| + if (s_provider) |
| + return s_provider->PurgeForTestingSupported(); |
| + NOTREACHED(); |
| return false; |
| } |
| // static |
| void DiscardableMemory::PurgeForTesting() { |
| - NOTIMPLEMENTED(); |
| + if (s_provider) |
| + s_provider->PurgeForTesting(); |
| + else |
| + NOTREACHED(); |
| +} |
| + |
| +#else |
| + |
| +void* DiscardableMemory::Memory() const { |
| + DCHECK(is_locked_); |
| + return memory_; |
| } |
| #endif // OS_* |