| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/blockfile/index_table_v3.h" | 5 #include "net/disk_cache/blockfile/index_table_v3.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 // |num_entries| is the capacity of the main table. The extra table is half | 56 // |num_entries| is the capacity of the main table. The extra table is half |
| 57 // the size of the main table. | 57 // the size of the main table. |
| 58 explicit TestCacheTables(int num_entries); | 58 explicit TestCacheTables(int num_entries); |
| 59 ~TestCacheTables() {} | 59 ~TestCacheTables() {} |
| 60 | 60 |
| 61 void GetInitData(IndexTableInitData* result); | 61 void GetInitData(IndexTableInitData* result); |
| 62 void CopyFrom(const TestCacheTables& other); | 62 void CopyFrom(const TestCacheTables& other); |
| 63 base::Time start_time() const { return start_time_; } | 63 base::Time start_time() const { return start_time_; } |
| 64 | 64 |
| 65 private: | 65 private: |
| 66 scoped_ptr<uint64_t[]> main_bitmap_; | 66 std::unique_ptr<uint64_t[]> main_bitmap_; |
| 67 scoped_ptr<disk_cache::IndexBucket[]> main_table_; | 67 std::unique_ptr<disk_cache::IndexBucket[]> main_table_; |
| 68 scoped_ptr<disk_cache::IndexBucket[]> extra_table_; | 68 std::unique_ptr<disk_cache::IndexBucket[]> extra_table_; |
| 69 base::Time start_time_; | 69 base::Time start_time_; |
| 70 int num_bitmap_bytes_; | 70 int num_bitmap_bytes_; |
| 71 | 71 |
| 72 DISALLOW_COPY_AND_ASSIGN(TestCacheTables); | 72 DISALLOW_COPY_AND_ASSIGN(TestCacheTables); |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 TestCacheTables::TestCacheTables(int num_entries) { | 75 TestCacheTables::TestCacheTables(int num_entries) { |
| 76 DCHECK_GE(num_entries, 1024); | 76 DCHECK_GE(num_entries, 1024); |
| 77 DCHECK_EQ(num_entries, num_entries / 1024 * 1024); | 77 DCHECK_EQ(num_entries, num_entries / 1024 * 1024); |
| 78 main_table_.reset(new disk_cache::IndexBucket[num_entries]); | 78 main_table_.reset(new disk_cache::IndexBucket[num_entries]); |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 ASSERT_EQ(3u, iterator.cells.size()); | 573 ASSERT_EQ(3u, iterator.cells.size()); |
| 574 EXPECT_EQ(entries[41].hash, iterator.cells[0].hash); | 574 EXPECT_EQ(entries[41].hash, iterator.cells[0].hash); |
| 575 EXPECT_EQ(entries[42].hash, iterator.cells[1].hash); | 575 EXPECT_EQ(entries[42].hash, iterator.cells[1].hash); |
| 576 EXPECT_EQ(entries[43].hash, iterator.cells[2].hash); | 576 EXPECT_EQ(entries[43].hash, iterator.cells[2].hash); |
| 577 } | 577 } |
| 578 | 578 |
| 579 // Tests doubling of the table. | 579 // Tests doubling of the table. |
| 580 TEST(DiskCacheIndexTable, Doubling) { | 580 TEST(DiskCacheIndexTable, Doubling) { |
| 581 IndexTable index(NULL); | 581 IndexTable index(NULL); |
| 582 int size = 1024; | 582 int size = 1024; |
| 583 scoped_ptr<TestCacheTables> cache(new TestCacheTables(size)); | 583 std::unique_ptr<TestCacheTables> cache(new TestCacheTables(size)); |
| 584 int entry_id = 0; | 584 int entry_id = 0; |
| 585 disk_cache::CellList entries; | 585 disk_cache::CellList entries; |
| 586 | 586 |
| 587 // Go from 1024 to 256k cells. | 587 // Go from 1024 to 256k cells. |
| 588 for (int resizes = 0; resizes <= 8; resizes++) { | 588 for (int resizes = 0; resizes <= 8; resizes++) { |
| 589 scoped_ptr<TestCacheTables> old_cache(std::move(cache)); | 589 std::unique_ptr<TestCacheTables> old_cache(std::move(cache)); |
| 590 cache.reset(new TestCacheTables(size)); | 590 cache.reset(new TestCacheTables(size)); |
| 591 cache.get()->CopyFrom(*old_cache.get()); | 591 cache.get()->CopyFrom(*old_cache.get()); |
| 592 | 592 |
| 593 IndexTableInitData init_data; | 593 IndexTableInitData init_data; |
| 594 cache.get()->GetInitData(&init_data); | 594 cache.get()->GetInitData(&init_data); |
| 595 index.Init(&init_data); | 595 index.Init(&init_data); |
| 596 | 596 |
| 597 // Write some entries. | 597 // Write some entries. |
| 598 for (int i = 0; i < 250; i++, entry_id++) { | 598 for (int i = 0; i < 250; i++, entry_id++) { |
| 599 SCOPED_TRACE(entry_id); | 599 SCOPED_TRACE(entry_id); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 614 disk_cache::EntrySet found_entries = index.LookupEntries(entries[i].hash); | 614 disk_cache::EntrySet found_entries = index.LookupEntries(entries[i].hash); |
| 615 ASSERT_EQ(1u, found_entries.cells.size()); | 615 ASSERT_EQ(1u, found_entries.cells.size()); |
| 616 EXPECT_TRUE(found_entries.cells[0].IsValid()); | 616 EXPECT_TRUE(found_entries.cells[0].IsValid()); |
| 617 } | 617 } |
| 618 } | 618 } |
| 619 | 619 |
| 620 // Tests bucket chaining when growing the index. | 620 // Tests bucket chaining when growing the index. |
| 621 TEST(DiskCacheIndexTable, BucketChains) { | 621 TEST(DiskCacheIndexTable, BucketChains) { |
| 622 IndexTable index(NULL); | 622 IndexTable index(NULL); |
| 623 int size = 1024; | 623 int size = 1024; |
| 624 scoped_ptr<TestCacheTables> cache(new TestCacheTables(size)); | 624 std::unique_ptr<TestCacheTables> cache(new TestCacheTables(size)); |
| 625 disk_cache::CellList entries; | 625 disk_cache::CellList entries; |
| 626 | 626 |
| 627 IndexTableInitData init_data; | 627 IndexTableInitData init_data; |
| 628 cache.get()->GetInitData(&init_data); | 628 cache.get()->GetInitData(&init_data); |
| 629 index.Init(&init_data); | 629 index.Init(&init_data); |
| 630 | 630 |
| 631 // Write some entries. | 631 // Write some entries. |
| 632 for (int i = 0; i < 8; i++) { | 632 for (int i = 0; i < 8; i++) { |
| 633 SCOPED_TRACE(i); | 633 SCOPED_TRACE(i); |
| 634 uint32_t hash = i * 256; | 634 uint32_t hash = i * 256; |
| 635 disk_cache::Addr addr(disk_cache::BLOCK_ENTRIES, 1, 5, i * 7 + 1); | 635 disk_cache::Addr addr(disk_cache::BLOCK_ENTRIES, 1, 5, i * 7 + 1); |
| 636 EntryCell entry = index.CreateEntryCell(hash, addr); | 636 EntryCell entry = index.CreateEntryCell(hash, addr); |
| 637 EXPECT_TRUE(entry.IsValid()); | 637 EXPECT_TRUE(entry.IsValid()); |
| 638 | 638 |
| 639 disk_cache::CellInfo info = { hash, addr }; | 639 disk_cache::CellInfo info = { hash, addr }; |
| 640 entries.push_back(info); | 640 entries.push_back(info); |
| 641 } | 641 } |
| 642 | 642 |
| 643 // Double the size. | 643 // Double the size. |
| 644 scoped_ptr<TestCacheTables> old_cache(std::move(cache)); | 644 std::unique_ptr<TestCacheTables> old_cache(std::move(cache)); |
| 645 cache.reset(new TestCacheTables(size * 2)); | 645 cache.reset(new TestCacheTables(size * 2)); |
| 646 cache.get()->CopyFrom(*old_cache.get()); | 646 cache.get()->CopyFrom(*old_cache.get()); |
| 647 | 647 |
| 648 cache.get()->GetInitData(&init_data); | 648 cache.get()->GetInitData(&init_data); |
| 649 index.Init(&init_data); | 649 index.Init(&init_data); |
| 650 | 650 |
| 651 // Write more entries, starting with the upper half of the table. | 651 // Write more entries, starting with the upper half of the table. |
| 652 for (int i = 9; i < 11; i++) { | 652 for (int i = 9; i < 11; i++) { |
| 653 SCOPED_TRACE(i); | 653 SCOPED_TRACE(i); |
| 654 uint32_t hash = i * 256; | 654 uint32_t hash = i * 256; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 | 702 |
| 703 uint32_t hash = 0; | 703 uint32_t hash = 0; |
| 704 disk_cache::Addr addr(disk_cache::BLOCK_ENTRIES, 1, 5, 6); | 704 disk_cache::Addr addr(disk_cache::BLOCK_ENTRIES, 1, 5, 6); |
| 705 EntryCell entry = index.CreateEntryCell(hash, addr); | 705 EntryCell entry = index.CreateEntryCell(hash, addr); |
| 706 EXPECT_TRUE(entry.IsValid()); | 706 EXPECT_TRUE(entry.IsValid()); |
| 707 | 707 |
| 708 index.OnBackupTimer(); | 708 index.OnBackupTimer(); |
| 709 int expected = (1024 + 512) / 8 + sizeof(disk_cache::IndexHeaderV3); | 709 int expected = (1024 + 512) / 8 + sizeof(disk_cache::IndexHeaderV3); |
| 710 EXPECT_EQ(expected, backend.buffer_len()); | 710 EXPECT_EQ(expected, backend.buffer_len()); |
| 711 } | 711 } |
| OLD | NEW |