OLD | NEW |
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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 // than the actual number of used blocks. | 94 // than the actual number of used blocks. |
95 base::subtle::MemoryBarrier(); | 95 base::subtle::MemoryBarrier(); |
96 header_->allocation_map[current] |= to_add; | 96 header_->allocation_map[current] |= to_add; |
97 | 97 |
98 header_->hints[target - 1] = current; | 98 header_->hints[target - 1] = current; |
99 header_->empty[target - 1]--; | 99 header_->empty[target - 1]--; |
100 STRESS_DCHECK(header_->empty[target - 1] >= 0); | 100 STRESS_DCHECK(header_->empty[target - 1] >= 0); |
101 if (target != size) { | 101 if (target != size) { |
102 header_->empty[target - size - 1]++; | 102 header_->empty[target - size - 1]++; |
103 } | 103 } |
104 HISTOGRAM_TIMES("DiskCache.CreateBlock", TimeTicks::Now() - start); | 104 LOCAL_HISTOGRAM_TIMES("DiskCache.CreateBlock", TimeTicks::Now() - start); |
105 return true; | 105 return true; |
106 } | 106 } |
107 } | 107 } |
108 | 108 |
109 // It is possible to have an undetected corruption (for example when the OS | 109 // It is possible to have an undetected corruption (for example when the OS |
110 // crashes), fix it here. | 110 // crashes), fix it here. |
111 LOG(ERROR) << "Failing CreateMapBlock"; | 111 LOG(ERROR) << "Failing CreateMapBlock"; |
112 FixAllocationCounters(); | 112 FixAllocationCounters(); |
113 return false; | 113 return false; |
114 } | 114 } |
(...skipping 26 matching lines...) Expand all Loading... |
141 | 141 |
142 if (update_counters) { | 142 if (update_counters) { |
143 if (bits_at_end) | 143 if (bits_at_end) |
144 header_->empty[bits_at_end - 1]--; | 144 header_->empty[bits_at_end - 1]--; |
145 header_->empty[new_type - 1]++; | 145 header_->empty[new_type - 1]++; |
146 STRESS_DCHECK(header_->empty[bits_at_end - 1] >= 0); | 146 STRESS_DCHECK(header_->empty[bits_at_end - 1] >= 0); |
147 } | 147 } |
148 base::subtle::MemoryBarrier(); | 148 base::subtle::MemoryBarrier(); |
149 header_->num_entries--; | 149 header_->num_entries--; |
150 STRESS_DCHECK(header_->num_entries >= 0); | 150 STRESS_DCHECK(header_->num_entries >= 0); |
151 HISTOGRAM_TIMES("DiskCache.DeleteBlock", TimeTicks::Now() - start); | 151 LOCAL_HISTOGRAM_TIMES("DiskCache.DeleteBlock", TimeTicks::Now() - start); |
152 } | 152 } |
153 | 153 |
154 // Note that this is a simplified version of DeleteMapBlock(). | 154 // Note that this is a simplified version of DeleteMapBlock(). |
155 bool BlockHeader::UsedMapBlock(int index, int size) { | 155 bool BlockHeader::UsedMapBlock(int index, int size) { |
156 if (size < 0 || size > kMaxNumBlocks) | 156 if (size < 0 || size > kMaxNumBlocks) |
157 return false; | 157 return false; |
158 | 158 |
159 int byte_index = index / 8; | 159 int byte_index = index / 8; |
160 uint8* byte_map = reinterpret_cast<uint8*>(header_->allocation_map); | 160 uint8* byte_map = reinterpret_cast<uint8*>(header_->allocation_map); |
161 uint8 map_block = byte_map[byte_index]; | 161 uint8 map_block = byte_map[byte_index]; |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 if (!file) | 559 if (!file) |
560 return NULL; | 560 return NULL; |
561 file_header = BlockHeader(file); | 561 file_header = BlockHeader(file); |
562 continue; | 562 continue; |
563 } | 563 } |
564 | 564 |
565 if (!GrowBlockFile(file, file_header.Header())) | 565 if (!GrowBlockFile(file, file_header.Header())) |
566 return NULL; | 566 return NULL; |
567 break; | 567 break; |
568 } | 568 } |
569 HISTOGRAM_TIMES("DiskCache.GetFileForNewBlock", TimeTicks::Now() - start); | 569 LOCAL_HISTOGRAM_TIMES("DiskCache.GetFileForNewBlock", |
| 570 TimeTicks::Now() - start); |
570 return file; | 571 return file; |
571 } | 572 } |
572 | 573 |
573 MappedFile* BlockFiles::NextFile(MappedFile* file) { | 574 MappedFile* BlockFiles::NextFile(MappedFile* file) { |
574 ScopedFlush flush(file); | 575 ScopedFlush flush(file); |
575 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer()); | 576 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer()); |
576 int new_file = header->next_file; | 577 int new_file = header->next_file; |
577 if (!new_file) { | 578 if (!new_file) { |
578 // 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 |
579 // extending the rankings block file. | 580 // extending the rankings block file. |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 } | 722 } |
722 | 723 |
723 base::FilePath BlockFiles::Name(int index) { | 724 base::FilePath BlockFiles::Name(int index) { |
724 // The file format allows for 256 files. | 725 // The file format allows for 256 files. |
725 DCHECK(index < 256 && index >= 0); | 726 DCHECK(index < 256 && index >= 0); |
726 std::string tmp = base::StringPrintf("%s%d", kBlockName, index); | 727 std::string tmp = base::StringPrintf("%s%d", kBlockName, index); |
727 return path_.AppendASCII(tmp); | 728 return path_.AppendASCII(tmp); |
728 } | 729 } |
729 | 730 |
730 } // namespace disk_cache | 731 } // namespace disk_cache |
OLD | NEW |