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

Side by Side Diff: net/disk_cache/blockfile/disk_cache_perftest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/hash.h" 10 #include "base/hash.h"
(...skipping 21 matching lines...) Expand all
32 struct TestEntry { 32 struct TestEntry {
33 std::string key; 33 std::string key;
34 int data_len; 34 int data_len;
35 }; 35 };
36 typedef std::vector<TestEntry> TestEntries; 36 typedef std::vector<TestEntry> TestEntries;
37 37
38 const int kMaxSize = 16 * 1024 - 1; 38 const int kMaxSize = 16 * 1024 - 1;
39 39
40 // Creates num_entries on the cache, and writes 200 bytes of metadata and up 40 // Creates num_entries on the cache, and writes 200 bytes of metadata and up
41 // to kMaxSize of data to each entry. 41 // to kMaxSize of data to each entry.
42 bool TimeWrite(int num_entries, disk_cache::Backend* cache, 42 bool TimeWrite(int num_entries,
43 TestEntries* entries) { 43 disk_cache::Backend* cache,
44 TestEntries* entries) {
44 const int kSize1 = 200; 45 const int kSize1 = 200;
45 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 46 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
46 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kMaxSize)); 47 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kMaxSize));
47 48
48 CacheTestFillBuffer(buffer1->data(), kSize1, false); 49 CacheTestFillBuffer(buffer1->data(), kSize1, false);
49 CacheTestFillBuffer(buffer2->data(), kMaxSize, false); 50 CacheTestFillBuffer(buffer2->data(), kMaxSize, false);
50 51
51 int expected = 0; 52 int expected = 0;
52 53
53 MessageLoopHelper helper; 54 MessageLoopHelper helper;
54 CallbackTest callback(&helper, true); 55 CallbackTest callback(&helper, true);
55 56
56 base::PerfTimeLogger timer("Write disk cache entries"); 57 base::PerfTimeLogger timer("Write disk cache entries");
57 58
58 for (int i = 0; i < num_entries; i++) { 59 for (int i = 0; i < num_entries; i++) {
59 TestEntry entry; 60 TestEntry entry;
60 entry.key = GenerateKey(true); 61 entry.key = GenerateKey(true);
61 entry.data_len = rand() % kMaxSize; 62 entry.data_len = rand() % kMaxSize;
62 entries->push_back(entry); 63 entries->push_back(entry);
63 64
64 disk_cache::Entry* cache_entry; 65 disk_cache::Entry* cache_entry;
65 net::TestCompletionCallback cb; 66 net::TestCompletionCallback cb;
66 int rv = cache->CreateEntry(entry.key, &cache_entry, cb.callback()); 67 int rv = cache->CreateEntry(entry.key, &cache_entry, cb.callback());
67 if (net::OK != cb.GetResult(rv)) 68 if (net::OK != cb.GetResult(rv))
68 break; 69 break;
69 int ret = cache_entry->WriteData( 70 int ret = cache_entry->WriteData(
70 0, 0, buffer1.get(), kSize1, 71 0,
71 base::Bind(&CallbackTest::Run, base::Unretained(&callback)), false); 72 0,
73 buffer1.get(),
74 kSize1,
75 base::Bind(&CallbackTest::Run, base::Unretained(&callback)),
76 false);
72 if (net::ERR_IO_PENDING == ret) 77 if (net::ERR_IO_PENDING == ret)
73 expected++; 78 expected++;
74 else if (kSize1 != ret) 79 else if (kSize1 != ret)
75 break; 80 break;
76 81
77 ret = cache_entry->WriteData( 82 ret = cache_entry->WriteData(
78 1, 0, buffer2.get(), entry.data_len, 83 1,
79 base::Bind(&CallbackTest::Run, base::Unretained(&callback)), false); 84 0,
85 buffer2.get(),
86 entry.data_len,
87 base::Bind(&CallbackTest::Run, base::Unretained(&callback)),
88 false);
80 if (net::ERR_IO_PENDING == ret) 89 if (net::ERR_IO_PENDING == ret)
81 expected++; 90 expected++;
82 else if (entry.data_len != ret) 91 else if (entry.data_len != ret)
83 break; 92 break;
84 cache_entry->Close(); 93 cache_entry->Close();
85 } 94 }
86 95
87 helper.WaitUntilCacheIoFinished(expected); 96 helper.WaitUntilCacheIoFinished(expected);
88 timer.Done(); 97 timer.Done();
89 98
90 return (expected == helper.callbacks_called()); 99 return (expected == helper.callbacks_called());
91 } 100 }
92 101
93 // Reads the data and metadata from each entry listed on |entries|. 102 // Reads the data and metadata from each entry listed on |entries|.
94 bool TimeRead(int num_entries, disk_cache::Backend* cache, 103 bool TimeRead(int num_entries,
95 const TestEntries& entries, bool cold) { 104 disk_cache::Backend* cache,
105 const TestEntries& entries,
106 bool cold) {
96 const int kSize1 = 200; 107 const int kSize1 = 200;
97 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 108 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
98 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kMaxSize)); 109 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kMaxSize));
99 110
100 CacheTestFillBuffer(buffer1->data(), kSize1, false); 111 CacheTestFillBuffer(buffer1->data(), kSize1, false);
101 CacheTestFillBuffer(buffer2->data(), kMaxSize, false); 112 CacheTestFillBuffer(buffer2->data(), kMaxSize, false);
102 113
103 int expected = 0; 114 int expected = 0;
104 115
105 MessageLoopHelper helper; 116 MessageLoopHelper helper;
106 CallbackTest callback(&helper, true); 117 CallbackTest callback(&helper, true);
107 118
108 const char* message = cold ? "Read disk cache entries (cold)" : 119 const char* message = cold ? "Read disk cache entries (cold)"
109 "Read disk cache entries (warm)"; 120 : "Read disk cache entries (warm)";
110 base::PerfTimeLogger timer(message); 121 base::PerfTimeLogger timer(message);
111 122
112 for (int i = 0; i < num_entries; i++) { 123 for (int i = 0; i < num_entries; i++) {
113 disk_cache::Entry* cache_entry; 124 disk_cache::Entry* cache_entry;
114 net::TestCompletionCallback cb; 125 net::TestCompletionCallback cb;
115 int rv = cache->OpenEntry(entries[i].key, &cache_entry, cb.callback()); 126 int rv = cache->OpenEntry(entries[i].key, &cache_entry, cb.callback());
116 if (net::OK != cb.GetResult(rv)) 127 if (net::OK != cb.GetResult(rv))
117 break; 128 break;
118 int ret = cache_entry->ReadData( 129 int ret = cache_entry->ReadData(
119 0, 0, buffer1.get(), kSize1, 130 0,
131 0,
132 buffer1.get(),
133 kSize1,
120 base::Bind(&CallbackTest::Run, base::Unretained(&callback))); 134 base::Bind(&CallbackTest::Run, base::Unretained(&callback)));
121 if (net::ERR_IO_PENDING == ret) 135 if (net::ERR_IO_PENDING == ret)
122 expected++; 136 expected++;
123 else if (kSize1 != ret) 137 else if (kSize1 != ret)
124 break; 138 break;
125 139
126 ret = cache_entry->ReadData( 140 ret = cache_entry->ReadData(
127 1, 0, buffer2.get(), entries[i].data_len, 141 1,
142 0,
143 buffer2.get(),
144 entries[i].data_len,
128 base::Bind(&CallbackTest::Run, base::Unretained(&callback))); 145 base::Bind(&CallbackTest::Run, base::Unretained(&callback)));
129 if (net::ERR_IO_PENDING == ret) 146 if (net::ERR_IO_PENDING == ret)
130 expected++; 147 expected++;
131 else if (entries[i].data_len != ret) 148 else if (entries[i].data_len != ret)
132 break; 149 break;
133 cache_entry->Close(); 150 cache_entry->Close();
134 } 151 }
135 152
136 helper.WaitUntilCacheIoFinished(expected); 153 helper.WaitUntilCacheIoFinished(expected);
137 timer.Done(); 154 timer.Done();
(...skipping 16 matching lines...) Expand all
154 for (int i = 0; i < 300000; i++) { 171 for (int i = 0; i < 300000; i++) {
155 std::string key = GenerateKey(true); 172 std::string key = GenerateKey(true);
156 base::Hash(key); 173 base::Hash(key);
157 } 174 }
158 timer.Done(); 175 timer.Done();
159 } 176 }
160 177
161 TEST_F(DiskCacheTest, CacheBackendPerformance) { 178 TEST_F(DiskCacheTest, CacheBackendPerformance) {
162 base::Thread cache_thread("CacheThread"); 179 base::Thread cache_thread("CacheThread");
163 ASSERT_TRUE(cache_thread.StartWithOptions( 180 ASSERT_TRUE(cache_thread.StartWithOptions(
164 base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); 181 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)));
165 182
166 ASSERT_TRUE(CleanupCacheDir()); 183 ASSERT_TRUE(CleanupCacheDir());
167 net::TestCompletionCallback cb; 184 net::TestCompletionCallback cb;
168 scoped_ptr<disk_cache::Backend> cache; 185 scoped_ptr<disk_cache::Backend> cache;
169 int rv = disk_cache::CreateCacheBackend( 186 int rv =
170 net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE, cache_path_, 0, false, 187 disk_cache::CreateCacheBackend(net::DISK_CACHE,
171 cache_thread.message_loop_proxy().get(), NULL, &cache, cb.callback()); 188 net::CACHE_BACKEND_BLOCKFILE,
189 cache_path_,
190 0,
191 false,
192 cache_thread.message_loop_proxy().get(),
193 NULL,
194 &cache,
195 cb.callback());
172 196
173 ASSERT_EQ(net::OK, cb.GetResult(rv)); 197 ASSERT_EQ(net::OK, cb.GetResult(rv));
174 198
175 int seed = static_cast<int>(Time::Now().ToInternalValue()); 199 int seed = static_cast<int>(Time::Now().ToInternalValue());
176 srand(seed); 200 srand(seed);
177 201
178 TestEntries entries; 202 TestEntries entries;
179 int num_entries = 1000; 203 int num_entries = 1000;
180 204
181 EXPECT_TRUE(TimeWrite(num_entries, cache.get(), &entries)); 205 EXPECT_TRUE(TimeWrite(num_entries, cache.get(), &entries));
182 206
183 base::MessageLoop::current()->RunUntilIdle(); 207 base::MessageLoop::current()->RunUntilIdle();
184 cache.reset(); 208 cache.reset();
185 209
186 ASSERT_TRUE(base::EvictFileFromSystemCache( 210 ASSERT_TRUE(base::EvictFileFromSystemCache(cache_path_.AppendASCII("index")));
187 cache_path_.AppendASCII("index"))); 211 ASSERT_TRUE(
188 ASSERT_TRUE(base::EvictFileFromSystemCache( 212 base::EvictFileFromSystemCache(cache_path_.AppendASCII("data_0")));
189 cache_path_.AppendASCII("data_0"))); 213 ASSERT_TRUE(
190 ASSERT_TRUE(base::EvictFileFromSystemCache( 214 base::EvictFileFromSystemCache(cache_path_.AppendASCII("data_1")));
191 cache_path_.AppendASCII("data_1"))); 215 ASSERT_TRUE(
192 ASSERT_TRUE(base::EvictFileFromSystemCache( 216 base::EvictFileFromSystemCache(cache_path_.AppendASCII("data_2")));
193 cache_path_.AppendASCII("data_2"))); 217 ASSERT_TRUE(
194 ASSERT_TRUE(base::EvictFileFromSystemCache( 218 base::EvictFileFromSystemCache(cache_path_.AppendASCII("data_3")));
195 cache_path_.AppendASCII("data_3")));
196 219
197 rv = disk_cache::CreateCacheBackend( 220 rv = disk_cache::CreateCacheBackend(net::DISK_CACHE,
198 net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE, cache_path_, 0, false, 221 net::CACHE_BACKEND_BLOCKFILE,
199 cache_thread.message_loop_proxy().get(), NULL, &cache, cb.callback()); 222 cache_path_,
223 0,
224 false,
225 cache_thread.message_loop_proxy().get(),
226 NULL,
227 &cache,
228 cb.callback());
200 ASSERT_EQ(net::OK, cb.GetResult(rv)); 229 ASSERT_EQ(net::OK, cb.GetResult(rv));
201 230
202 EXPECT_TRUE(TimeRead(num_entries, cache.get(), entries, true)); 231 EXPECT_TRUE(TimeRead(num_entries, cache.get(), entries, true));
203 232
204 EXPECT_TRUE(TimeRead(num_entries, cache.get(), entries, false)); 233 EXPECT_TRUE(TimeRead(num_entries, cache.get(), entries, false));
205 234
206 base::MessageLoop::current()->RunUntilIdle(); 235 base::MessageLoop::current()->RunUntilIdle();
207 } 236 }
208 237
209 // Creating and deleting "entries" on a block-file is something quite frequent 238 // Creating and deleting "entries" on a block-file is something quite frequent
(...skipping 10 matching lines...) Expand all
220 int seed = static_cast<int>(Time::Now().ToInternalValue()); 249 int seed = static_cast<int>(Time::Now().ToInternalValue());
221 srand(seed); 250 srand(seed);
222 251
223 const int kNumEntries = 60000; 252 const int kNumEntries = 60000;
224 disk_cache::Addr* address = new disk_cache::Addr[kNumEntries]; 253 disk_cache::Addr* address = new disk_cache::Addr[kNumEntries];
225 254
226 base::PerfTimeLogger timer1("Fill three block-files"); 255 base::PerfTimeLogger timer1("Fill three block-files");
227 256
228 // Fill up the 32-byte block file (use three files). 257 // Fill up the 32-byte block file (use three files).
229 for (int i = 0; i < kNumEntries; i++) { 258 for (int i = 0; i < kNumEntries; i++) {
230 EXPECT_TRUE(files.CreateBlock(disk_cache::RANKINGS, BlockSize(), 259 EXPECT_TRUE(
231 &address[i])); 260 files.CreateBlock(disk_cache::RANKINGS, BlockSize(), &address[i]));
232 } 261 }
233 262
234 timer1.Done(); 263 timer1.Done();
235 base::PerfTimeLogger timer2("Create and delete blocks"); 264 base::PerfTimeLogger timer2("Create and delete blocks");
236 265
237 for (int i = 0; i < 200000; i++) { 266 for (int i = 0; i < 200000; i++) {
238 int entry = rand() * (kNumEntries / RAND_MAX + 1); 267 int entry = rand() * (kNumEntries / RAND_MAX + 1);
239 if (entry >= kNumEntries) 268 if (entry >= kNumEntries)
240 entry = 0; 269 entry = 0;
241 270
242 files.DeleteBlock(address[entry], false); 271 files.DeleteBlock(address[entry], false);
243 EXPECT_TRUE(files.CreateBlock(disk_cache::RANKINGS, BlockSize(), 272 EXPECT_TRUE(
244 &address[entry])); 273 files.CreateBlock(disk_cache::RANKINGS, BlockSize(), &address[entry]));
245 } 274 }
246 275
247 timer2.Done(); 276 timer2.Done();
248 base::MessageLoop::current()->RunUntilIdle(); 277 base::MessageLoop::current()->RunUntilIdle();
249 delete[] address; 278 delete[] address;
250 } 279 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698