Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2839)

Unified Diff: base/memory/discardable_memory_provider_unittest.cc

Issue 111713008: base: Refactor DiscardableMemoryProvider to build and be tested on all platforms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix native_discardable_memory on ios. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/memory/discardable_memory_provider_unittest.cc
diff --git a/base/memory/discardable_memory_provider_unittest.cc b/base/memory/discardable_memory_provider_unittest.cc
index 89d4c4c765d2fc5f8fcd22150e5b38c341877a72..1559654c789fad14256bed5ff74a04d746f56b6d 100644
--- a/base/memory/discardable_memory_provider_unittest.cc
+++ b/base/memory/discardable_memory_provider_unittest.cc
@@ -11,42 +11,71 @@
#include "base/threading/thread.h"
#include "testing/gtest/include/gtest/gtest.h"
-using base::internal::DiscardableMemoryProvider;
-
namespace base {
class DiscardableMemoryProviderTestBase {
public:
+ class TestDiscardableMemory : public DiscardableMemory {
+ public:
+ TestDiscardableMemory(
+ internal::DiscardableMemoryProvider* provider, size_t size)
+ : provider_(provider),
+ is_locked_(false) {
+ provider_->Register(this, size);
+ }
+
+ virtual ~TestDiscardableMemory() {
+ if (is_locked_)
+ Unlock();
+ provider_->Unregister(this);
+ }
+
+ // Overridden from DiscardableMemory:
+ virtual LockDiscardableMemoryStatus Lock() OVERRIDE {
+ DCHECK(!is_locked_);
+
+ bool purged = false;
+ memory_ = provider_->Acquire(this, &purged);
+ if (!memory_)
+ return DISCARDABLE_MEMORY_FAILED;
+
+ is_locked_ = true;
+ return purged ? DISCARDABLE_MEMORY_PURGED : DISCARDABLE_MEMORY_SUCCESS;
+ }
+ virtual void Unlock() OVERRIDE {
+ DCHECK(is_locked_);
+ provider_->Release(this, memory_.Pass());
+ is_locked_ = false;
+ }
+ virtual void* Memory() const OVERRIDE {
+ DCHECK(memory_);
+ return memory_.get();
+ }
+
+ private:
+ internal::DiscardableMemoryProvider* provider_;
+ scoped_ptr<uint8, FreeDeleter> memory_;
+ bool is_locked_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestDiscardableMemory);
+ };
+
DiscardableMemoryProviderTestBase()
: message_loop_(MessageLoop::TYPE_IO),
- provider_(new DiscardableMemoryProvider) {
- // We set a provider here for two reasons:
- // 1. It ensures that one test cannot affect the next, and
- // 2. Since the provider listens for pressure notifications on the thread
- // it was created on, if we create it on the test thread, we can run
- // the test thread's message loop until idle when we want to process
- // one of these notifications.
- DiscardableMemoryProvider::SetInstanceForTest(provider_.get());
- }
-
- virtual ~DiscardableMemoryProviderTestBase() {
- DiscardableMemoryProvider::SetInstanceForTest(NULL);
+ provider_(new internal::DiscardableMemoryProvider) {
}
protected:
bool IsRegistered(const DiscardableMemory* discardable) {
- return DiscardableMemoryProvider::GetInstance()->IsRegisteredForTest(
- discardable);
+ return provider_->IsRegisteredForTest(discardable);
}
bool CanBePurged(const DiscardableMemory* discardable) {
- return DiscardableMemoryProvider::GetInstance()->CanBePurgedForTest(
- discardable);
+ return provider_->CanBePurgedForTest(discardable);
}
size_t BytesAllocated() const {
- return DiscardableMemoryProvider::GetInstance()->
- GetBytesAllocatedForTest();
+ return provider_->GetBytesAllocatedForTest();
}
void* Memory(const DiscardableMemory* discardable) const {
@@ -54,18 +83,24 @@ class DiscardableMemoryProviderTestBase {
}
void SetDiscardableMemoryLimit(size_t bytes) {
- DiscardableMemoryProvider::GetInstance()->
- SetDiscardableMemoryLimit(bytes);
+ provider_->SetDiscardableMemoryLimit(bytes);
}
void SetBytesToReclaimUnderModeratePressure(size_t bytes) {
- DiscardableMemoryProvider::GetInstance()->
- SetBytesToReclaimUnderModeratePressure(bytes);
+ provider_->SetBytesToReclaimUnderModeratePressure(bytes);
+ }
+
+ scoped_ptr<DiscardableMemory> CreateLockedMemory(size_t size) {
+ scoped_ptr<TestDiscardableMemory> memory(
+ new TestDiscardableMemory(provider_.get(), size));
+ if (memory->Lock() != DISCARDABLE_MEMORY_PURGED)
+ return scoped_ptr<DiscardableMemory>();
+ return memory.PassAs<DiscardableMemory>();
}
private:
MessageLoop message_loop_;
- scoped_ptr<DiscardableMemoryProvider> provider_;
+ scoped_ptr<internal::DiscardableMemoryProvider> provider_;
};
class DiscardableMemoryProviderTest
@@ -77,8 +112,7 @@ class DiscardableMemoryProviderTest
TEST_F(DiscardableMemoryProviderTest, CreateLockedMemory) {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -87,8 +121,7 @@ TEST_F(DiscardableMemoryProviderTest, CreateLockedMemory) {
TEST_F(DiscardableMemoryProviderTest, CreateLockedMemoryZeroSize) {
size_t size = 0;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_FALSE(discardable);
EXPECT_FALSE(IsRegistered(discardable.get()));
EXPECT_EQ(0u, BytesAllocated());
@@ -96,8 +129,7 @@ TEST_F(DiscardableMemoryProviderTest, CreateLockedMemoryZeroSize) {
TEST_F(DiscardableMemoryProviderTest, LockAfterUnlock) {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -113,8 +145,7 @@ TEST_F(DiscardableMemoryProviderTest, LockAfterUnlock) {
TEST_F(DiscardableMemoryProviderTest, LockAfterPurge) {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -137,8 +168,7 @@ TEST_F(DiscardableMemoryProviderTest, LockAfterPurge) {
TEST_F(DiscardableMemoryProviderTest, LockAfterPurgeAndCannotReallocate) {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -159,15 +189,14 @@ TEST_F(DiscardableMemoryProviderTest, LockAfterPurgeAndCannotReallocate) {
TEST_F(DiscardableMemoryProviderTest, Overflow) {
{
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
size_t massive_size = std::numeric_limits<size_t>::max();
const scoped_ptr<DiscardableMemory> massive_discardable(
- DiscardableMemory::CreateLockedMemory(massive_size));
+ CreateLockedMemory(massive_size));
EXPECT_FALSE(massive_discardable);
EXPECT_EQ(1024u, BytesAllocated());
}
@@ -198,7 +227,7 @@ class DiscardableMemoryProviderPermutationTest
// Use discardable memory in order specified by ordering parameter.
void CreateAndUseDiscardableMemory() {
for (int i = 0; i < 3; ++i) {
- discardables_[i] = DiscardableMemory::CreateLockedMemory(1024);
+ discardables_[i] = CreateLockedMemory(1024);
EXPECT_TRUE(discardables_[i]);
EXPECT_NE(static_cast<void*>(NULL), Memory(discardables_[i].get()));
discardables_[i]->Unlock();
@@ -294,8 +323,7 @@ INSTANTIATE_TEST_CASE_P(DiscardableMemoryProviderPermutationTests,
TEST_F(DiscardableMemoryProviderTest, NormalDestruction) {
{
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
}
@@ -305,8 +333,7 @@ TEST_F(DiscardableMemoryProviderTest, NormalDestruction) {
TEST_F(DiscardableMemoryProviderTest, DestructionWhileLocked) {
{
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -320,8 +347,7 @@ TEST_F(DiscardableMemoryProviderTest, DestructionWhileLocked) {
// Death tests are not supported with Android APKs.
TEST_F(DiscardableMemoryProviderTest, UnlockedMemoryAccessCrashesInDebugMode) {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
EXPECT_EQ(1024u, BytesAllocated());
@@ -351,8 +377,7 @@ class ThreadedDiscardableMemoryProviderTest
void UseMemoryHelper() {
size_t size = 1024;
- const scoped_ptr<DiscardableMemory> discardable(
- DiscardableMemory::CreateLockedMemory(size));
+ const scoped_ptr<DiscardableMemory> discardable(CreateLockedMemory(size));
EXPECT_TRUE(IsRegistered(discardable.get()));
EXPECT_NE(static_cast<void*>(NULL), Memory(discardable.get()));
discardable->Unlock();

Powered by Google App Engine
This is Rietveld 408576698