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

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

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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 unified diff | Download patch
« no previous file with comments | « net/disk_cache/blockfile/block_files.h ('k') | net/disk_cache/simple/simple_backend_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/block_files.h" 5 #include "net/disk_cache/blockfile/block_files.h"
6 6
7 #include "base/atomicops.h" 7 #include "base/atomicops.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 10 matching lines...) Expand all
21 namespace { 21 namespace {
22 22
23 const char* kBlockName = "data_"; 23 const char* kBlockName = "data_";
24 24
25 // This array is used to perform a fast lookup of the nibble bit pattern to the 25 // This array is used to perform a fast lookup of the nibble bit pattern to the
26 // type of entry that can be stored there (number of consecutive blocks). 26 // type of entry that can be stored there (number of consecutive blocks).
27 const char s_types[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; 27 const char s_types[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
28 28
29 // Returns the type of block (number of consecutive blocks that can be stored) 29 // Returns the type of block (number of consecutive blocks that can be stored)
30 // for a given nibble of the bitmap. 30 // for a given nibble of the bitmap.
31 inline int GetMapBlockType(uint8 value) { 31 inline int GetMapBlockType(uint32 value) {
32 value &= 0xf; 32 value &= 0xf;
33 return s_types[value]; 33 return s_types[value];
34 } 34 }
35 35
36 } // namespace 36 } // namespace
37 37
38 namespace disk_cache { 38 namespace disk_cache {
39 39
40 BlockHeader::BlockHeader() : header_(NULL) { 40 BlockHeader::BlockHeader() : header_(NULL) {
41 } 41 }
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 } 272 }
273 273
274 bool BlockFiles::Init(bool create_files) { 274 bool BlockFiles::Init(bool create_files) {
275 DCHECK(!init_); 275 DCHECK(!init_);
276 if (init_) 276 if (init_)
277 return false; 277 return false;
278 278
279 thread_checker_.reset(new base::ThreadChecker); 279 thread_checker_.reset(new base::ThreadChecker);
280 280
281 block_files_.resize(kFirstAdditionalBlockFile); 281 block_files_.resize(kFirstAdditionalBlockFile);
282 for (int i = 0; i < kFirstAdditionalBlockFile; i++) { 282 for (int16 i = 0; i < kFirstAdditionalBlockFile; i++) {
283 if (create_files) 283 if (create_files)
284 if (!CreateBlockFile(i, static_cast<FileType>(i + 1), true)) 284 if (!CreateBlockFile(i, static_cast<FileType>(i + 1), true))
285 return false; 285 return false;
286 286
287 if (!OpenBlockFile(i)) 287 if (!OpenBlockFile(i))
288 return false; 288 return false;
289 289
290 // Walk this chain of files removing empty ones. 290 // Walk this chain of files removing empty ones.
291 if (!RemoveEmptyFile(static_cast<FileType>(i + 1))) 291 if (!RemoveEmptyFile(static_cast<FileType>(i + 1)))
292 return false; 292 return false;
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 break; 567 break;
568 } 568 }
569 LOCAL_HISTOGRAM_TIMES("DiskCache.GetFileForNewBlock", 569 LOCAL_HISTOGRAM_TIMES("DiskCache.GetFileForNewBlock",
570 TimeTicks::Now() - start); 570 TimeTicks::Now() - start);
571 return file; 571 return file;
572 } 572 }
573 573
574 MappedFile* BlockFiles::NextFile(MappedFile* file) { 574 MappedFile* BlockFiles::NextFile(MappedFile* file) {
575 ScopedFlush flush(file); 575 ScopedFlush flush(file);
576 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer()); 576 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer());
577 int new_file = header->next_file; 577 int16 new_file = header->next_file;
578 if (!new_file) { 578 if (!new_file) {
579 // RANKINGS is not reported as a type for small entries, but we may be 579 // RANKINGS is not reported as a type for small entries, but we may be
580 // extending the rankings block file. 580 // extending the rankings block file.
581 FileType type = Addr::RequiredFileType(header->entry_size); 581 FileType type = Addr::RequiredFileType(header->entry_size);
582 if (header->entry_size == Addr::BlockSizeForFileType(RANKINGS)) 582 if (header->entry_size == Addr::BlockSizeForFileType(RANKINGS))
583 type = RANKINGS; 583 type = RANKINGS;
584 584
585 new_file = CreateNextBlockFile(type); 585 new_file = CreateNextBlockFile(type);
586 if (!new_file) 586 if (!new_file)
587 return NULL; 587 return NULL;
588 588
589 FileLock lock(header); 589 FileLock lock(header);
590 header->next_file = new_file; 590 header->next_file = new_file;
591 } 591 }
592 592
593 // Only the block_file argument is relevant for what we want. 593 // Only the block_file argument is relevant for what we want.
594 Addr address(BLOCK_256, 1, new_file, 0); 594 Addr address(BLOCK_256, 1, new_file, 0);
595 return GetFile(address); 595 return GetFile(address);
596 } 596 }
597 597
598 int BlockFiles::CreateNextBlockFile(FileType block_type) { 598 int16 BlockFiles::CreateNextBlockFile(FileType block_type) {
599 for (int i = kFirstAdditionalBlockFile; i <= kMaxBlockFile; i++) { 599 for (int16 i = kFirstAdditionalBlockFile; i <= kMaxBlockFile; i++) {
600 if (CreateBlockFile(i, block_type, false)) 600 if (CreateBlockFile(i, block_type, false))
601 return i; 601 return i;
602 } 602 }
603 return 0; 603 return 0;
604 } 604 }
605 605
606 // We walk the list of files for this particular block type, deleting the ones 606 // We walk the list of files for this particular block type, deleting the ones
607 // that are empty. 607 // that are empty.
608 bool BlockFiles::RemoveEmptyFile(FileType block_type) { 608 bool BlockFiles::RemoveEmptyFile(FileType block_type) {
609 MappedFile* file = block_files_[block_type - 1]; 609 MappedFile* file = block_files_[block_type - 1];
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 } 722 }
723 723
724 base::FilePath BlockFiles::Name(int index) { 724 base::FilePath BlockFiles::Name(int index) {
725 // The file format allows for 256 files. 725 // The file format allows for 256 files.
726 DCHECK(index < 256 && index >= 0); 726 DCHECK(index < 256 && index >= 0);
727 std::string tmp = base::StringPrintf("%s%d", kBlockName, index); 727 std::string tmp = base::StringPrintf("%s%d", kBlockName, index);
728 return path_.AppendASCII(tmp); 728 return path_.AppendASCII(tmp);
729 } 729 }
730 730
731 } // namespace disk_cache 731 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/blockfile/block_files.h ('k') | net/disk_cache/simple/simple_backend_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698