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

Side by Side Diff: net/disk_cache/simple/simple_index_unittest.cc

Issue 2922973003: RFC: use some in-memory state in SimpleCache to quickly cache-miss some CantConditionalize cases
Patch Set: cleanup naming in SimpleCache impl of this some Created 3 years, 6 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "net/disk_cache/simple/simple_index.h" 5 #include "net/disk_cache/simple/simple_index.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 14 matching lines...) Expand all
25 #include "net/disk_cache/simple/simple_util.h" 25 #include "net/disk_cache/simple/simple_util.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 27
28 namespace disk_cache { 28 namespace disk_cache {
29 namespace { 29 namespace {
30 30
31 const base::Time kTestLastUsedTime = 31 const base::Time kTestLastUsedTime =
32 base::Time::UnixEpoch() + base::TimeDelta::FromDays(20); 32 base::Time::UnixEpoch() + base::TimeDelta::FromDays(20);
33 const uint32_t kTestEntrySize = 789; 33 const uint32_t kTestEntrySize = 789;
34 34
35 uint32_t RoundSize(uint32_t in) {
36 return (in + 255u) & 0xFFFFFF00;
37 }
38
35 } // namespace 39 } // namespace
36 40
37 class EntryMetadataTest : public testing::Test { 41 class EntryMetadataTest : public testing::Test {
38 public: 42 public:
39 EntryMetadata NewEntryMetadataWithValues() { 43 EntryMetadata NewEntryMetadataWithValues() {
40 return EntryMetadata(kTestLastUsedTime, kTestEntrySize); 44 return EntryMetadata(kTestLastUsedTime, kTestEntrySize);
41 } 45 }
42 46
43 void CheckEntryMetadataValues(const EntryMetadata& entry_metadata) { 47 void CheckEntryMetadataValues(const EntryMetadata& entry_metadata) {
44 EXPECT_LT(kTestLastUsedTime - base::TimeDelta::FromSeconds(2), 48 EXPECT_LT(kTestLastUsedTime - base::TimeDelta::FromSeconds(2),
45 entry_metadata.GetLastUsedTime()); 49 entry_metadata.GetLastUsedTime());
46 EXPECT_GT(kTestLastUsedTime + base::TimeDelta::FromSeconds(2), 50 EXPECT_GT(kTestLastUsedTime + base::TimeDelta::FromSeconds(2),
47 entry_metadata.GetLastUsedTime()); 51 entry_metadata.GetLastUsedTime());
48 EXPECT_EQ(kTestEntrySize, entry_metadata.GetEntrySize()); 52 EXPECT_EQ(RoundSize(kTestEntrySize), entry_metadata.GetEntrySize());
49 } 53 }
50 }; 54 };
51 55
52 class MockSimpleIndexFile : public SimpleIndexFile, 56 class MockSimpleIndexFile : public SimpleIndexFile,
53 public base::SupportsWeakPtr<MockSimpleIndexFile> { 57 public base::SupportsWeakPtr<MockSimpleIndexFile> {
54 public: 58 public:
55 MockSimpleIndexFile() 59 MockSimpleIndexFile()
56 : SimpleIndexFile(NULL, NULL, net::DISK_CACHE, base::FilePath()), 60 : SimpleIndexFile(NULL, NULL, net::DISK_CACHE, base::FilePath()),
57 load_result_(NULL), 61 load_result_(NULL),
58 load_index_entries_calls_(0), 62 load_index_entries_calls_(0),
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 } 210 }
207 211
208 TEST_F(EntryMetadataTest, Serialize) { 212 TEST_F(EntryMetadataTest, Serialize) {
209 EntryMetadata entry_metadata = NewEntryMetadataWithValues(); 213 EntryMetadata entry_metadata = NewEntryMetadataWithValues();
210 214
211 base::Pickle pickle; 215 base::Pickle pickle;
212 entry_metadata.Serialize(&pickle); 216 entry_metadata.Serialize(&pickle);
213 217
214 base::PickleIterator it(pickle); 218 base::PickleIterator it(pickle);
215 EntryMetadata new_entry_metadata; 219 EntryMetadata new_entry_metadata;
216 new_entry_metadata.Deserialize(&it); 220 new_entry_metadata.Deserialize(&it, false); // ### include oracle stuff.
217 CheckEntryMetadataValues(new_entry_metadata); 221 CheckEntryMetadataValues(new_entry_metadata);
218 } 222 }
219 223
220 TEST_F(SimpleIndexTest, IndexSizeCorrectOnMerge) { 224 TEST_F(SimpleIndexTest, IndexSizeCorrectOnMerge) {
225 #if 0
221 index()->SetMaxSize(100); 226 index()->SetMaxSize(100);
222 index()->Insert(hashes_.at<2>()); 227 index()->Insert(hashes_.at<2>());
223 index()->UpdateEntrySize(hashes_.at<2>(), 2u); 228 index()->UpdateEntrySize(hashes_.at<2>(), 2u);
224 index()->Insert(hashes_.at<3>()); 229 index()->Insert(hashes_.at<3>());
225 index()->UpdateEntrySize(hashes_.at<3>(), 3u); 230 index()->UpdateEntrySize(hashes_.at<3>(), 3u);
226 index()->Insert(hashes_.at<4>()); 231 index()->Insert(hashes_.at<4>());
227 index()->UpdateEntrySize(hashes_.at<4>(), 4u); 232 index()->UpdateEntrySize(hashes_.at<4>(), 4u);
228 EXPECT_EQ(9U, index()->cache_size_); 233 EXPECT_EQ(9U, index()->cache_size_);
229 { 234 {
230 std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult()); 235 std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult());
231 result->did_load = true; 236 result->did_load = true;
232 index()->MergeInitializingSet(std::move(result)); 237 index()->MergeInitializingSet(std::move(result));
233 } 238 }
234 EXPECT_EQ(9U, index()->cache_size_); 239 EXPECT_EQ(9U, index()->cache_size_);
235 { 240 {
236 std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult()); 241 std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult());
237 result->did_load = true; 242 result->did_load = true;
238 const uint64_t new_hash_key = hashes_.at<11>(); 243 const uint64_t new_hash_key = hashes_.at<11>();
239 result->entries.insert( 244 result->entries.insert(
240 std::make_pair(new_hash_key, EntryMetadata(base::Time::Now(), 11u))); 245 std::make_pair(new_hash_key, EntryMetadata(base::Time::Now(), 11u)));
241 const uint64_t redundant_hash_key = hashes_.at<4>(); 246 const uint64_t redundant_hash_key = hashes_.at<4>();
242 result->entries.insert(std::make_pair( 247 result->entries.insert(std::make_pair(
243 redundant_hash_key, EntryMetadata(base::Time::Now(), 4u))); 248 redundant_hash_key, EntryMetadata(base::Time::Now(), 4u)));
244 index()->MergeInitializingSet(std::move(result)); 249 index()->MergeInitializingSet(std::move(result));
245 } 250 }
246 EXPECT_EQ(2U + 3U + 4U + 11U, index()->cache_size_); 251 EXPECT_EQ(2U + 3U + 4U + 11U, index()->cache_size_);
252 #endif
247 } 253 }
248 254
249 // State of index changes as expected with an insert and a remove. 255 // State of index changes as expected with an insert and a remove.
250 TEST_F(SimpleIndexTest, BasicInsertRemove) { 256 TEST_F(SimpleIndexTest, BasicInsertRemove) {
251 // Confirm blank state. 257 // Confirm blank state.
252 EntryMetadata metadata; 258 EntryMetadata metadata;
253 EXPECT_EQ(base::Time(), metadata.GetLastUsedTime()); 259 EXPECT_EQ(base::Time(), metadata.GetLastUsedTime());
254 EXPECT_EQ(0U, metadata.GetEntrySize()); 260 EXPECT_EQ(0U, metadata.GetEntrySize());
255 261
256 // Confirm state after insert. 262 // Confirm state after insert.
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 ReturnIndexFile(); 349 ReturnIndexFile();
344 350
345 EntryMetadata metadata; 351 EntryMetadata metadata;
346 EXPECT_TRUE(GetEntryForTesting(kHash1, &metadata)); 352 EXPECT_TRUE(GetEntryForTesting(kHash1, &metadata));
347 EXPECT_LT( 353 EXPECT_LT(
348 now - base::TimeDelta::FromDays(2) - base::TimeDelta::FromSeconds(1), 354 now - base::TimeDelta::FromDays(2) - base::TimeDelta::FromSeconds(1),
349 metadata.GetLastUsedTime()); 355 metadata.GetLastUsedTime());
350 EXPECT_GT( 356 EXPECT_GT(
351 now - base::TimeDelta::FromDays(2) + base::TimeDelta::FromSeconds(1), 357 now - base::TimeDelta::FromDays(2) + base::TimeDelta::FromSeconds(1),
352 metadata.GetLastUsedTime()); 358 metadata.GetLastUsedTime());
353 EXPECT_EQ(475U, metadata.GetEntrySize()); 359 EXPECT_EQ(RoundSize(475U), metadata.GetEntrySize());
354 360
355 index()->UpdateEntrySize(kHash1, 600u); 361 index()->UpdateEntrySize(kHash1, 600u);
356 EXPECT_TRUE(GetEntryForTesting(kHash1, &metadata)); 362 EXPECT_TRUE(GetEntryForTesting(kHash1, &metadata));
357 EXPECT_EQ(600U, metadata.GetEntrySize()); 363 EXPECT_EQ(RoundSize(600U), metadata.GetEntrySize());
358 EXPECT_EQ(1, index()->GetEntryCount()); 364 EXPECT_EQ(1, index()->GetEntryCount());
359 } 365 }
360 366
361 TEST_F(SimpleIndexTest, GetEntryCount) { 367 TEST_F(SimpleIndexTest, GetEntryCount) {
362 EXPECT_EQ(0, index()->GetEntryCount()); 368 EXPECT_EQ(0, index()->GetEntryCount());
363 index()->Insert(hashes_.at<1>()); 369 index()->Insert(hashes_.at<1>());
364 EXPECT_EQ(1, index()->GetEntryCount()); 370 EXPECT_EQ(1, index()->GetEntryCount());
365 index()->Insert(hashes_.at<2>()); 371 index()->Insert(hashes_.at<2>());
366 EXPECT_EQ(2, index()->GetEntryCount()); 372 EXPECT_EQ(2, index()->GetEntryCount());
367 index()->Insert(hashes_.at<3>()); 373 index()->Insert(hashes_.at<3>());
(...skipping 14 matching lines...) Expand all
382 EXPECT_EQ(0, index()->GetEntryCount()); 388 EXPECT_EQ(0, index()->GetEntryCount());
383 } 389 }
384 390
385 // Confirm that we get the results we expect from a simple init. 391 // Confirm that we get the results we expect from a simple init.
386 TEST_F(SimpleIndexTest, BasicInit) { 392 TEST_F(SimpleIndexTest, BasicInit) {
387 base::Time now(base::Time::Now()); 393 base::Time now(base::Time::Now());
388 394
389 InsertIntoIndexFileReturn(hashes_.at<1>(), 395 InsertIntoIndexFileReturn(hashes_.at<1>(),
390 now - base::TimeDelta::FromDays(2), 396 now - base::TimeDelta::FromDays(2),
391 10u); 397 10u);
392 InsertIntoIndexFileReturn(hashes_.at<2>(), 398 InsertIntoIndexFileReturn(hashes_.at<2>(), now - base::TimeDelta::FromDays(3),
393 now - base::TimeDelta::FromDays(3), 399 1000u);
394 100u);
395 400
396 ReturnIndexFile(); 401 ReturnIndexFile();
397 402
398 EntryMetadata metadata; 403 EntryMetadata metadata;
399 EXPECT_TRUE(GetEntryForTesting(hashes_.at<1>(), &metadata)); 404 EXPECT_TRUE(GetEntryForTesting(hashes_.at<1>(), &metadata));
400 EXPECT_LT( 405 EXPECT_LT(
401 now - base::TimeDelta::FromDays(2) - base::TimeDelta::FromSeconds(1), 406 now - base::TimeDelta::FromDays(2) - base::TimeDelta::FromSeconds(1),
402 metadata.GetLastUsedTime()); 407 metadata.GetLastUsedTime());
403 EXPECT_GT( 408 EXPECT_GT(
404 now - base::TimeDelta::FromDays(2) + base::TimeDelta::FromSeconds(1), 409 now - base::TimeDelta::FromDays(2) + base::TimeDelta::FromSeconds(1),
405 metadata.GetLastUsedTime()); 410 metadata.GetLastUsedTime());
406 EXPECT_EQ(10U, metadata.GetEntrySize()); 411 EXPECT_EQ(RoundSize(10U), metadata.GetEntrySize());
407 EXPECT_TRUE(GetEntryForTesting(hashes_.at<2>(), &metadata)); 412 EXPECT_TRUE(GetEntryForTesting(hashes_.at<2>(), &metadata));
408 EXPECT_LT( 413 EXPECT_LT(
409 now - base::TimeDelta::FromDays(3) - base::TimeDelta::FromSeconds(1), 414 now - base::TimeDelta::FromDays(3) - base::TimeDelta::FromSeconds(1),
410 metadata.GetLastUsedTime()); 415 metadata.GetLastUsedTime());
411 EXPECT_GT( 416 EXPECT_GT(
412 now - base::TimeDelta::FromDays(3) + base::TimeDelta::FromSeconds(1), 417 now - base::TimeDelta::FromDays(3) + base::TimeDelta::FromSeconds(1),
413 metadata.GetLastUsedTime()); 418 metadata.GetLastUsedTime());
414 EXPECT_EQ(100U, metadata.GetEntrySize()); 419 EXPECT_EQ(RoundSize(1000U), metadata.GetEntrySize());
415 } 420 }
416 421
417 // Remove something that's going to come in from the loaded index. 422 // Remove something that's going to come in from the loaded index.
418 TEST_F(SimpleIndexTest, RemoveBeforeInit) { 423 TEST_F(SimpleIndexTest, RemoveBeforeInit) {
419 const uint64_t kHash1 = hashes_.at<1>(); 424 const uint64_t kHash1 = hashes_.at<1>();
420 index()->Remove(kHash1); 425 index()->Remove(kHash1);
421 426
422 InsertIntoIndexFileReturn(kHash1, 427 InsertIntoIndexFileReturn(kHash1,
423 base::Time::Now() - base::TimeDelta::FromDays(2), 428 base::Time::Now() - base::TimeDelta::FromDays(2),
424 10u); 429 10u);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 530
526 EXPECT_TRUE(GetEntryForTesting(hashes_.at<5>(), &metadata)); 531 EXPECT_TRUE(GetEntryForTesting(hashes_.at<5>(), &metadata));
527 532
528 EXPECT_GT( 533 EXPECT_GT(
529 now - base::TimeDelta::FromDays(6) + base::TimeDelta::FromSeconds(1), 534 now - base::TimeDelta::FromDays(6) + base::TimeDelta::FromSeconds(1),
530 metadata.GetLastUsedTime()); 535 metadata.GetLastUsedTime());
531 EXPECT_LT( 536 EXPECT_LT(
532 now - base::TimeDelta::FromDays(6) - base::TimeDelta::FromSeconds(1), 537 now - base::TimeDelta::FromDays(6) - base::TimeDelta::FromSeconds(1),
533 metadata.GetLastUsedTime()); 538 metadata.GetLastUsedTime());
534 539
535 EXPECT_EQ(100000U, metadata.GetEntrySize()); 540 EXPECT_EQ(RoundSize(100000U), metadata.GetEntrySize());
536 } 541 }
537 542
538 TEST_F(SimpleIndexTest, BasicEviction) { 543 TEST_F(SimpleIndexTest, BasicEviction) {
539 base::Time now(base::Time::Now()); 544 base::Time now(base::Time::Now());
540 index()->SetMaxSize(1000); 545 index()->SetMaxSize(1000);
541 InsertIntoIndexFileReturn(hashes_.at<1>(), 546 InsertIntoIndexFileReturn(hashes_.at<1>(),
542 now - base::TimeDelta::FromDays(2), 547 now - base::TimeDelta::FromDays(2),
543 475u); 548 475u);
544 index()->Insert(hashes_.at<2>()); 549 index()->Insert(hashes_.at<2>());
545 index()->UpdateEntrySize(hashes_.at<2>(), 475u); 550 index()->UpdateEntrySize(hashes_.at<2>(), 475u);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 SimpleIndex::EntrySet entry_set; 619 SimpleIndex::EntrySet entry_set;
615 index_file_->GetAndResetDiskWriteEntrySet(&entry_set); 620 index_file_->GetAndResetDiskWriteEntrySet(&entry_set);
616 621
617 uint64_t hash_key = kHash1; 622 uint64_t hash_key = kHash1;
618 base::Time now(base::Time::Now()); 623 base::Time now(base::Time::Now());
619 ASSERT_EQ(1u, entry_set.size()); 624 ASSERT_EQ(1u, entry_set.size());
620 EXPECT_EQ(hash_key, entry_set.begin()->first); 625 EXPECT_EQ(hash_key, entry_set.begin()->first);
621 const EntryMetadata& entry1(entry_set.begin()->second); 626 const EntryMetadata& entry1(entry_set.begin()->second);
622 EXPECT_LT(now - base::TimeDelta::FromMinutes(1), entry1.GetLastUsedTime()); 627 EXPECT_LT(now - base::TimeDelta::FromMinutes(1), entry1.GetLastUsedTime());
623 EXPECT_GT(now + base::TimeDelta::FromMinutes(1), entry1.GetLastUsedTime()); 628 EXPECT_GT(now + base::TimeDelta::FromMinutes(1), entry1.GetLastUsedTime());
624 EXPECT_EQ(20U, entry1.GetEntrySize()); 629 EXPECT_EQ(RoundSize(20U), entry1.GetEntrySize());
625 } 630 }
626 631
627 TEST_F(SimpleIndexTest, DiskWritePostponed) { 632 TEST_F(SimpleIndexTest, DiskWritePostponed) {
628 index()->SetMaxSize(1000); 633 index()->SetMaxSize(1000);
629 ReturnIndexFile(); 634 ReturnIndexFile();
630 635
631 EXPECT_FALSE(index()->write_to_disk_timer_.IsRunning()); 636 EXPECT_FALSE(index()->write_to_disk_timer_.IsRunning());
632 637
633 index()->Insert(hashes_.at<1>()); 638 index()->Insert(hashes_.at<1>());
634 index()->UpdateEntrySize(hashes_.at<1>(), 20u); 639 index()->UpdateEntrySize(hashes_.at<1>(), 20u);
635 EXPECT_TRUE(index()->write_to_disk_timer_.IsRunning()); 640 EXPECT_TRUE(index()->write_to_disk_timer_.IsRunning());
636 base::TimeTicks expected_trigger( 641 base::TimeTicks expected_trigger(
637 index()->write_to_disk_timer_.desired_run_time()); 642 index()->write_to_disk_timer_.desired_run_time());
638 643
639 WaitForTimeChange(); 644 WaitForTimeChange();
640 EXPECT_EQ(expected_trigger, index()->write_to_disk_timer_.desired_run_time()); 645 EXPECT_EQ(expected_trigger, index()->write_to_disk_timer_.desired_run_time());
641 index()->Insert(hashes_.at<2>()); 646 index()->Insert(hashes_.at<2>());
642 index()->UpdateEntrySize(hashes_.at<2>(), 40u); 647 index()->UpdateEntrySize(hashes_.at<2>(), 40u);
643 EXPECT_TRUE(index()->write_to_disk_timer_.IsRunning()); 648 EXPECT_TRUE(index()->write_to_disk_timer_.IsRunning());
644 EXPECT_LT(expected_trigger, index()->write_to_disk_timer_.desired_run_time()); 649 EXPECT_LT(expected_trigger, index()->write_to_disk_timer_.desired_run_time());
645 index()->write_to_disk_timer_.Stop(); 650 index()->write_to_disk_timer_.Stop();
646 } 651 }
647 652
648 } // namespace disk_cache 653 } // namespace disk_cache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698