Index: net/disk_cache/backend_unittest.cc |
=================================================================== |
--- net/disk_cache/backend_unittest.cc (revision 55505) |
+++ net/disk_cache/backend_unittest.cc (working copy) |
@@ -224,7 +224,7 @@ |
// Now let's create a file with the cache. |
disk_cache::Entry* entry; |
ASSERT_EQ(net::OK, CreateEntry("key", &entry)); |
- ASSERT_EQ(0, entry->WriteData(0, 20000, buffer1, 0, NULL, false)); |
+ ASSERT_EQ(0, WriteData(entry, 0, 20000, buffer1, 0, false)); |
entry->Close(); |
// And verify that the first file is still there. |
@@ -355,21 +355,21 @@ |
scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(cache_size); |
memset(buffer->data(), 0, cache_size); |
- EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10, |
- NULL, false)) << "normal file"; |
+ EXPECT_EQ(cache_size / 10, WriteData(entry, 0, 0, buffer, cache_size / 10, |
+ false)) << "normal file"; |
- EXPECT_EQ(net::ERR_FAILED, entry->WriteData(1, 0, buffer, cache_size / 5, |
- NULL, false)) << "file size above the limit"; |
+ EXPECT_EQ(net::ERR_FAILED, WriteData(entry, 1, 0, buffer, cache_size / 5, |
+ false)) << "file size above the limit"; |
// By doubling the total size, we make this file cacheable. |
SetMaxSize(cache_size * 2); |
- EXPECT_EQ(cache_size / 5, entry->WriteData(1, 0, buffer, cache_size / 5, |
- NULL, false)); |
+ EXPECT_EQ(cache_size / 5, WriteData(entry, 1, 0, buffer, cache_size / 5, |
+ false)); |
// Let's fill up the cache!. |
SetMaxSize(cache_size * 10); |
- EXPECT_EQ(cache_size * 3 / 4, entry->WriteData(0, 0, buffer, |
- cache_size * 3 / 4, NULL, false)); |
+ EXPECT_EQ(cache_size * 3 / 4, WriteData(entry, 0, 0, buffer, |
+ cache_size * 3 / 4, false)); |
entry->Close(); |
FlushQueueForTest(); |
@@ -378,13 +378,13 @@ |
// The cache is 95% full. |
ASSERT_EQ(net::OK, CreateEntry(second, &entry)); |
- EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10, |
- NULL, false)); |
+ EXPECT_EQ(cache_size / 10, WriteData(entry, 0, 0, buffer, cache_size / 10, |
+ false)); |
disk_cache::Entry* entry2; |
ASSERT_EQ(net::OK, CreateEntry("an extra key", &entry2)); |
- EXPECT_EQ(cache_size / 10, entry2->WriteData(0, 0, buffer, cache_size / 10, |
- NULL, false)); |
+ EXPECT_EQ(cache_size / 10, WriteData(entry2, 0, 0, buffer, cache_size / 10, |
+ false)); |
entry2->Close(); // This will trigger the cache trim. |
EXPECT_NE(net::OK, OpenEntry(first, &entry2)); |
@@ -472,23 +472,23 @@ |
InitCache(); |
std::string key("Some key"); |
- disk_cache::Entry* entry1; |
- ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
+ disk_cache::Entry* entry; |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
const int kSize = 50; |
scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); |
memset(buffer1->data(), 0, kSize); |
base::strlcpy(buffer1->data(), "And the data to save", kSize); |
- EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); |
- entry1->Close(); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer1, kSize, false)); |
+ entry->Close(); |
SimulateCrash(); |
- ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize); |
memset(buffer2->data(), 0, kSize); |
- EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer2, kSize, NULL)); |
- entry1->Close(); |
+ EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer2, kSize)); |
+ entry->Close(); |
EXPECT_STREQ(buffer1->data(), buffer2->data()); |
} |
@@ -510,17 +510,17 @@ |
InitCache(); |
std::string key("Some key"); |
- disk_cache::Entry* entry1; |
- ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
+ disk_cache::Entry* entry; |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
const int kSize = 50; |
- scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); |
- memset(buffer1->data(), 0, kSize); |
- base::strlcpy(buffer1->data(), "And the data to save", kSize); |
- EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); |
+ memset(buffer->data(), 0, kSize); |
+ base::strlcpy(buffer->data(), "And the data to save", kSize); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
SimulateCrash(); |
- EXPECT_NE(net::OK, OpenEntry(key, &entry1)); |
+ EXPECT_NE(net::OK, OpenEntry(key, &entry)); |
EXPECT_EQ(0, cache_->GetEntryCount()); |
} |
@@ -548,21 +548,21 @@ |
InitCache(); |
std::string key("Some key"); |
- disk_cache::Entry* entry1; |
- ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
+ disk_cache::Entry* entry; |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
const int kSize = 50; |
- scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); |
- memset(buffer1->data(), 0, kSize); |
- base::strlcpy(buffer1->data(), "And the data to save", kSize); |
- EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); |
- entry1->Close(); |
- ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
- EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer1, kSize, NULL)); |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); |
+ memset(buffer->data(), 0, kSize); |
+ base::strlcpy(buffer->data(), "And the data to save", kSize); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
+ entry->Close(); |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
+ EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer, kSize)); |
SimulateCrash(); |
- EXPECT_NE(net::OK, OpenEntry(key, &entry1)); |
+ EXPECT_NE(net::OK, OpenEntry(key, &entry)); |
EXPECT_EQ(0, cache_->GetEntryCount()); |
} |
@@ -653,13 +653,13 @@ |
scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); |
memset(buffer->data(), 0, kSize); |
- EXPECT_EQ(kSize, entry->WriteData(0, 0, buffer, kSize, NULL, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
// Simulate a crash. |
SimulateCrash(); |
ASSERT_EQ(net::OK, CreateEntry(second, &entry)); |
- EXPECT_EQ(kSize, entry->WriteData(0, 0, buffer, kSize, NULL, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
EXPECT_EQ(2, cache_->GetEntryCount()); |
SetMaxSize(kSize); |
@@ -703,7 +703,7 @@ |
for (int i = 0; i < 32; i++) { |
std::string key(StringPrintf("some key %d", i)); |
ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
- EXPECT_EQ(kSize, entry->WriteData(0, 0, buffer, kSize, NULL, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
entry->Close(); |
ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
// Note that we are not closing the entries. |
@@ -713,7 +713,7 @@ |
SimulateCrash(); |
ASSERT_EQ(net::OK, CreateEntry("Something else", &entry)); |
- EXPECT_EQ(kSize, entry->WriteData(0, 0, buffer, kSize, NULL, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
EXPECT_EQ(33, cache_->GetEntryCount()); |
SetMaxSize(kSize); |
@@ -866,10 +866,10 @@ |
scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); |
memset(buffer1->data(), 0, kSize); |
base::strlcpy(buffer1->data(), "And the data to save", kSize); |
- EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); |
+ EXPECT_EQ(kSize, WriteData(entry1, 0, 0, buffer1, kSize, false)); |
entry1->Close(); |
ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
- EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer1, kSize, NULL)); |
+ EXPECT_EQ(kSize, ReadData(entry1, 0, 0, buffer1, kSize)); |
std::string key2("Another key"); |
ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
@@ -1499,8 +1499,8 @@ |
const int kBufSize = 20000; |
scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kBufSize); |
memset(buf->data(), 0, kBufSize); |
- EXPECT_EQ(100, entry2->WriteData(0, 0, buf, 100, NULL, false)); |
- EXPECT_EQ(kBufSize, entry3->WriteData(0, 0, buf, kBufSize, NULL, false)); |
+ EXPECT_EQ(100, WriteData(entry2, 0, 0, buf, 100, false)); |
+ EXPECT_EQ(kBufSize, WriteData(entry3, 0, 0, buf, kBufSize, false)); |
// This line should disable the cache but not delete it. |
EXPECT_NE(net::OK, OpenNextEntry(&iter, &entry4)); |
@@ -1508,13 +1508,13 @@ |
EXPECT_NE(net::OK, CreateEntry("cache is disabled", &entry4)); |
- EXPECT_EQ(100, entry2->ReadData(0, 0, buf, 100, NULL)); |
- EXPECT_EQ(100, entry2->WriteData(0, 0, buf, 100, NULL, false)); |
- EXPECT_EQ(100, entry2->WriteData(1, 0, buf, 100, NULL, false)); |
+ EXPECT_EQ(100, ReadData(entry2, 0, 0, buf, 100)); |
+ EXPECT_EQ(100, WriteData(entry2, 0, 0, buf, 100, false)); |
+ EXPECT_EQ(100, WriteData(entry2, 1, 0, buf, 100, false)); |
- EXPECT_EQ(kBufSize, entry3->ReadData(0, 0, buf, kBufSize, NULL)); |
- EXPECT_EQ(kBufSize, entry3->WriteData(0, 0, buf, kBufSize, NULL, false)); |
- EXPECT_EQ(kBufSize, entry3->WriteData(1, 0, buf, kBufSize, NULL, false)); |
+ EXPECT_EQ(kBufSize, ReadData(entry3, 0, 0, buf, kBufSize)); |
+ EXPECT_EQ(kBufSize, WriteData(entry3, 0, 0, buf, kBufSize, false)); |
+ EXPECT_EQ(kBufSize, WriteData(entry3, 1, 0, buf, kBufSize, false)); |
std::string key = entry2->GetKey(); |
EXPECT_EQ(sizeof(key2) - 1, key.size()); |
@@ -1747,3 +1747,64 @@ |
CACHE_UMA(HOURS, "FillupTime", i, 28); |
} |
} |
+ |
+// Make sure that we keep the total memory used by the internal buffers under |
+// control. |
+TEST_F(DiskCacheBackendTest, TotalBuffersSize1) { |
+ SetDirectMode(); |
+ InitCache(); |
+ std::string key("the first key"); |
+ disk_cache::Entry* entry; |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
+ |
+ const int kSize = 200; |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); |
+ CacheTestFillBuffer(buffer->data(), kSize, true); |
+ |
+ for (int i = 0; i < 10; i++) { |
+ SCOPED_TRACE(i); |
+ // Allocate 2MB for this entry. |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, true)); |
+ EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer, kSize, true)); |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 1024 * 1024, buffer, kSize, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 1, 1024 * 1024, buffer, kSize, false)); |
+ |
+ // Delete one of the buffers and truncate the other. |
+ EXPECT_EQ(0, WriteData(entry, 0, 0, buffer, 0, true)); |
+ EXPECT_EQ(0, WriteData(entry, 1, 10, buffer, 0, true)); |
+ |
+ // Delete the second buffer, writing 10 bytes to disk. |
+ entry->Close(); |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
+ } |
+ |
+ entry->Close(); |
+ EXPECT_EQ(0, cache_impl_->GetTotalBuffersSize()); |
+} |
+ |
+// This test assumes at least 150MB of system memory. |
+TEST_F(DiskCacheBackendTest, TotalBuffersSize2) { |
+ SetDirectMode(); |
+ InitCache(); |
+ |
+ const int kOneMB = 1024 * 1024; |
+ EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB, cache_impl_->GetTotalBuffersSize()); |
+ |
+ EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB * 2, cache_impl_->GetTotalBuffersSize()); |
+ |
+ EXPECT_TRUE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
+ EXPECT_EQ(kOneMB * 3, cache_impl_->GetTotalBuffersSize()); |
+ |
+ cache_impl_->BufferDeleted(kOneMB); |
+ EXPECT_EQ(kOneMB * 2, cache_impl_->GetTotalBuffersSize()); |
+ |
+ // Check the upper limit. |
+ EXPECT_FALSE(cache_impl_->IsAllocAllowed(0, 30 * kOneMB)); |
+ |
+ for (int i = 0; i < 30; i++) |
+ cache_impl_->IsAllocAllowed(0, kOneMB); // Ignore the result. |
+ |
+ EXPECT_FALSE(cache_impl_->IsAllocAllowed(0, kOneMB)); |
+} |
gavinp
2010/08/19 18:17:22
NIT: add a newline here
|