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

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

Issue 274012: Convert BlockFiles to use FilePath instead of wstring. (Closed)
Patch Set: rebase Created 11 years, 2 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/block_files.h" 5 #include "net/disk_cache/block_files.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/histogram.h" 8 #include "base/histogram.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/time.h" 10 #include "base/time.h"
11 #include "net/disk_cache/cache_util.h" 11 #include "net/disk_cache/cache_util.h"
12 #include "net/disk_cache/file_lock.h" 12 #include "net/disk_cache/file_lock.h"
13 13
14 using base::Time; 14 using base::Time;
15 15
16 namespace { 16 namespace {
17 17
18 const wchar_t* kBlockName = L"data_"; 18 const char* kBlockName = "data_";
19 19
20 // This array is used to perform a fast lookup of the nibble bit pattern to the 20 // This array is used to perform a fast lookup of the nibble bit pattern to the
21 // type of entry that can be stored there (number of consecutive blocks). 21 // type of entry that can be stored there (number of consecutive blocks).
22 const char s_types[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; 22 const char s_types[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
23 23
24 // Returns the type of block (number of consecutive blocks that can be stored) 24 // Returns the type of block (number of consecutive blocks that can be stored)
25 // for a given nibble of the bitmap. 25 // for a given nibble of the bitmap.
26 inline int GetMapBlockType(uint8 value) { 26 inline int GetMapBlockType(uint8 value) {
27 value &= 0xf; 27 value &= 0xf;
28 return s_types[value]; 28 return s_types[value];
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 init_ = false; 193 init_ = false;
194 for (unsigned int i = 0; i < block_files_.size(); i++) { 194 for (unsigned int i = 0; i < block_files_.size(); i++) {
195 if (block_files_[i]) { 195 if (block_files_[i]) {
196 block_files_[i]->Release(); 196 block_files_[i]->Release();
197 block_files_[i] = NULL; 197 block_files_[i] = NULL;
198 } 198 }
199 } 199 }
200 block_files_.clear(); 200 block_files_.clear();
201 } 201 }
202 202
203 std::wstring BlockFiles::Name(int index) { 203 FilePath BlockFiles::Name(int index) {
204 // The file format allows for 256 files. 204 // The file format allows for 256 files.
205 DCHECK(index < 256 || index >= 0); 205 DCHECK(index < 256 || index >= 0);
206 std::wstring name(path_); 206 std::string tmp = StringPrintf("%s%d", kBlockName, index);
207 std::wstring tmp = StringPrintf(L"%ls%d", kBlockName, index); 207 return path_.AppendASCII(tmp);
208 file_util::AppendToPath(&name, tmp);
209
210 return name;
211 } 208 }
212 209
213 bool BlockFiles::CreateBlockFile(int index, FileType file_type, bool force) { 210 bool BlockFiles::CreateBlockFile(int index, FileType file_type, bool force) {
214 std::wstring name = Name(index); 211 FilePath name = Name(index);
215 int flags = 212 int flags =
216 force ? base::PLATFORM_FILE_CREATE_ALWAYS : base::PLATFORM_FILE_CREATE; 213 force ? base::PLATFORM_FILE_CREATE_ALWAYS : base::PLATFORM_FILE_CREATE;
217 flags |= base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_EXCLUSIVE_WRITE; 214 flags |= base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_EXCLUSIVE_WRITE;
218 215
219 scoped_refptr<File> file(new File( 216 scoped_refptr<File> file(new File(
220 base::CreatePlatformFile(name.c_str(), flags, NULL))); 217 base::CreatePlatformFile(name, flags, NULL)));
221 if (!file->IsValid()) 218 if (!file->IsValid())
222 return false; 219 return false;
223 220
224 BlockFileHeader header; 221 BlockFileHeader header;
225 header.entry_size = Addr::BlockSizeForFileType(file_type); 222 header.entry_size = Addr::BlockSizeForFileType(file_type);
226 header.this_file = static_cast<int16>(index); 223 header.this_file = static_cast<int16>(index);
227 DCHECK(index <= kint16max && index >= 0); 224 DCHECK(index <= kint16max && index >= 0);
228 225
229 return file->Write(&header, sizeof(header), 0); 226 return file->Write(&header, sizeof(header), 0);
230 } 227 }
231 228
232 bool BlockFiles::OpenBlockFile(int index) { 229 bool BlockFiles::OpenBlockFile(int index) {
233 if (block_files_.size() - 1 < static_cast<unsigned int>(index)) { 230 if (block_files_.size() - 1 < static_cast<unsigned int>(index)) {
234 DCHECK(index > 0); 231 DCHECK(index > 0);
235 int to_add = index - static_cast<int>(block_files_.size()) + 1; 232 int to_add = index - static_cast<int>(block_files_.size()) + 1;
236 block_files_.resize(block_files_.size() + to_add); 233 block_files_.resize(block_files_.size() + to_add);
237 } 234 }
238 235
239 std::wstring name = Name(index); 236 FilePath name = Name(index);
240 scoped_refptr<MappedFile> file(new MappedFile()); 237 scoped_refptr<MappedFile> file(new MappedFile());
241 238
242 if (!file->Init(name, kBlockHeaderSize)) { 239 if (!file->Init(name.ToWStringHack(), kBlockHeaderSize)) {
243 LOG(ERROR) << "Failed to open " << name; 240 LOG(ERROR) << "Failed to open " << name.value();
244 return false; 241 return false;
245 } 242 }
246 243
247 if (file->GetLength() < static_cast<size_t>(kBlockHeaderSize)) { 244 if (file->GetLength() < static_cast<size_t>(kBlockHeaderSize)) {
248 LOG(ERROR) << "File too small " << name; 245 LOG(ERROR) << "File too small " << name.value();
249 return false; 246 return false;
250 } 247 }
251 248
252 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer()); 249 BlockFileHeader* header = reinterpret_cast<BlockFileHeader*>(file->buffer());
253 if (kBlockMagic != header->magic || kCurrentVersion != header->version) { 250 if (kBlockMagic != header->magic || kCurrentVersion != header->version) {
254 LOG(ERROR) << "Invalid file version or magic"; 251 LOG(ERROR) << "Invalid file version or magic";
255 return false; 252 return false;
256 } 253 }
257 254
258 if (header->updating) { 255 if (header->updating) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 reinterpret_cast<BlockFileHeader*>(next_file->buffer()); 380 reinterpret_cast<BlockFileHeader*>(next_file->buffer());
384 if (!next_header->num_entries) { 381 if (!next_header->num_entries) {
385 DCHECK_EQ(next_header->entry_size, header->entry_size); 382 DCHECK_EQ(next_header->entry_size, header->entry_size);
386 // Delete next_file and remove it from the chain. 383 // Delete next_file and remove it from the chain.
387 int file_index = header->next_file; 384 int file_index = header->next_file;
388 header->next_file = next_header->next_file; 385 header->next_file = next_header->next_file;
389 DCHECK(block_files_.size() >= static_cast<unsigned int>(file_index)); 386 DCHECK(block_files_.size() >= static_cast<unsigned int>(file_index));
390 block_files_[file_index]->Release(); 387 block_files_[file_index]->Release();
391 block_files_[file_index] = NULL; 388 block_files_[file_index] = NULL;
392 389
393 std::wstring name = Name(file_index); 390 FilePath name = Name(file_index);
394 int failure = DeleteCacheFile(name) ? 0 : 1; 391 int failure = DeleteCacheFile(name) ? 0 : 1;
395 UMA_HISTOGRAM_COUNTS("DiskCache.DeleteFailed2", failure); 392 UMA_HISTOGRAM_COUNTS("DiskCache.DeleteFailed2", failure);
396 if (failure) 393 if (failure)
397 LOG(ERROR) << "Failed to delete " << name << " from the cache."; 394 LOG(ERROR) << "Failed to delete " << name.value() << " from the cache.";
398 continue; 395 continue;
399 } 396 }
400 397
401 header = next_header; 398 header = next_header;
402 file = next_file; 399 file = next_file;
403 } 400 }
404 } 401 }
405 402
406 bool BlockFiles::CreateBlock(FileType block_type, int block_count, 403 bool BlockFiles::CreateBlock(FileType block_type, int block_count,
407 Addr* block_address) { 404 Addr* block_address) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 int num_entries = (file_size - sizeof(*header)) / header->entry_size; 479 int num_entries = (file_size - sizeof(*header)) / header->entry_size;
483 header->max_entries = num_entries; 480 header->max_entries = num_entries;
484 } 481 }
485 482
486 FixAllocationCounters(header); 483 FixAllocationCounters(header);
487 header->updating = 0; 484 header->updating = 0;
488 return true; 485 return true;
489 } 486 }
490 487
491 } // namespace disk_cache 488 } // namespace disk_cache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698