| OLD | NEW |
| 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/backend_impl.h" | 5 #include "net/disk_cache/backend_impl.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/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 EntryImpl* cache_entry = MatchEntry(key, hash, false); | 269 EntryImpl* cache_entry = MatchEntry(key, hash, false); |
| 270 if (!cache_entry) { | 270 if (!cache_entry) { |
| 271 stats_.OnEvent(Stats::OPEN_MISS); | 271 stats_.OnEvent(Stats::OPEN_MISS); |
| 272 return false; | 272 return false; |
| 273 } | 273 } |
| 274 | 274 |
| 275 eviction_.OnOpenEntry(cache_entry); | 275 eviction_.OnOpenEntry(cache_entry); |
| 276 DCHECK(entry); | 276 DCHECK(entry); |
| 277 *entry = cache_entry; | 277 *entry = cache_entry; |
| 278 | 278 |
| 279 UMA_HISTOGRAM_TIMES(L"DiskCache.OpenTime", Time::Now() - start); | 279 UMA_HISTOGRAM_TIMES("DiskCache.OpenTime", Time::Now() - start); |
| 280 stats_.OnEvent(Stats::OPEN_HIT); | 280 stats_.OnEvent(Stats::OPEN_HIT); |
| 281 return true; | 281 return true; |
| 282 } | 282 } |
| 283 | 283 |
| 284 bool BackendImpl::CreateEntry(const std::string& key, Entry** entry) { | 284 bool BackendImpl::CreateEntry(const std::string& key, Entry** entry) { |
| 285 if (disabled_ || key.empty()) | 285 if (disabled_ || key.empty()) |
| 286 return false; | 286 return false; |
| 287 | 287 |
| 288 Time start = Time::Now(); | 288 Time start = Time::Now(); |
| 289 uint32 hash = Hash(key); | 289 uint32 hash = Hash(key); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 data_->header.num_entries++; | 342 data_->header.num_entries++; |
| 343 DCHECK(data_->header.num_entries > 0); | 343 DCHECK(data_->header.num_entries > 0); |
| 344 eviction_.OnCreateEntry(cache_entry); | 344 eviction_.OnCreateEntry(cache_entry); |
| 345 if (!parent.get()) | 345 if (!parent.get()) |
| 346 data_->table[hash & mask_] = entry_address.value(); | 346 data_->table[hash & mask_] = entry_address.value(); |
| 347 | 347 |
| 348 DCHECK(entry); | 348 DCHECK(entry); |
| 349 *entry = NULL; | 349 *entry = NULL; |
| 350 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry)); | 350 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry)); |
| 351 | 351 |
| 352 UMA_HISTOGRAM_TIMES(L"DiskCache.CreateTime", Time::Now() - start); | 352 UMA_HISTOGRAM_TIMES("DiskCache.CreateTime", Time::Now() - start); |
| 353 stats_.OnEvent(Stats::CREATE_HIT); | 353 stats_.OnEvent(Stats::CREATE_HIT); |
| 354 Trace("create entry hit "); | 354 Trace("create entry hit "); |
| 355 return true; | 355 return true; |
| 356 } | 356 } |
| 357 | 357 |
| 358 bool BackendImpl::DoomEntry(const std::string& key) { | 358 bool BackendImpl::DoomEntry(const std::string& key) { |
| 359 if (disabled_) | 359 if (disabled_) |
| 360 return false; | 360 return false; |
| 361 | 361 |
| 362 Entry* entry; | 362 Entry* entry; |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 // Setting the index table length to an invalid value will force re-creation | 644 // Setting the index table length to an invalid value will force re-creation |
| 645 // of the cache files. | 645 // of the cache files. |
| 646 data_->header.table_len = 1; | 646 data_->header.table_len = 1; |
| 647 disabled_ = true; | 647 disabled_ = true; |
| 648 | 648 |
| 649 if (!num_refs_) | 649 if (!num_refs_) |
| 650 RestartCache(); | 650 RestartCache(); |
| 651 } | 651 } |
| 652 | 652 |
| 653 void BackendImpl::ReportError(int error) { | 653 void BackendImpl::ReportError(int error) { |
| 654 static LinearHistogram counter(L"DiskCache.Error", 0, 49, 50); | 654 static LinearHistogram counter("DiskCache.Error", 0, 49, 50); |
| 655 counter.SetFlags(kUmaTargetedHistogramFlag); | 655 counter.SetFlags(kUmaTargetedHistogramFlag); |
| 656 | 656 |
| 657 // We transmit positive numbers, instead of direct error codes. | 657 // We transmit positive numbers, instead of direct error codes. |
| 658 DCHECK(error <= 0); | 658 DCHECK(error <= 0); |
| 659 counter.Add(error * -1); | 659 counter.Add(error * -1); |
| 660 } | 660 } |
| 661 | 661 |
| 662 void BackendImpl::OnEvent(Stats::Counters an_event) { | 662 void BackendImpl::OnEvent(Stats::Counters an_event) { |
| 663 stats_.OnEvent(an_event); | 663 stats_.OnEvent(an_event); |
| 664 } | 664 } |
| 665 | 665 |
| 666 void BackendImpl::OnStatsTimer() { | 666 void BackendImpl::OnStatsTimer() { |
| 667 stats_.OnEvent(Stats::TIMER); | 667 stats_.OnEvent(Stats::TIMER); |
| 668 int64 current = stats_.GetCounter(Stats::OPEN_ENTRIES); | 668 int64 current = stats_.GetCounter(Stats::OPEN_ENTRIES); |
| 669 int64 time = stats_.GetCounter(Stats::TIMER); | 669 int64 time = stats_.GetCounter(Stats::TIMER); |
| 670 | 670 |
| 671 current = current * (time - 1) + num_refs_; | 671 current = current * (time - 1) + num_refs_; |
| 672 current /= time; | 672 current /= time; |
| 673 stats_.SetCounter(Stats::OPEN_ENTRIES, current); | 673 stats_.SetCounter(Stats::OPEN_ENTRIES, current); |
| 674 stats_.SetCounter(Stats::MAX_ENTRIES, max_refs_); | 674 stats_.SetCounter(Stats::MAX_ENTRIES, max_refs_); |
| 675 | 675 |
| 676 static bool first_time = true; | 676 static bool first_time = true; |
| 677 if (!data_) | 677 if (!data_) |
| 678 first_time = false; | 678 first_time = false; |
| 679 if (first_time) { | 679 if (first_time) { |
| 680 first_time = false; | 680 first_time = false; |
| 681 int experiment = data_->header.experiment; | 681 int experiment = data_->header.experiment; |
| 682 std::wstring entries(StringPrintf(L"DiskCache.Entries_%d", experiment)); | 682 std::string entries(StringPrintf("DiskCache.Entries_%d", experiment)); |
| 683 std::wstring size(StringPrintf(L"DiskCache.Size_%d", experiment)); | 683 std::string size(StringPrintf("DiskCache.Size_%d", experiment)); |
| 684 std::wstring max_size(StringPrintf(L"DiskCache.MaxSize_%d", experiment)); | 684 std::string max_size(StringPrintf("DiskCache.MaxSize_%d", experiment)); |
| 685 UMA_HISTOGRAM_COUNTS(entries.c_str(), data_->header.num_entries); | 685 UMA_HISTOGRAM_COUNTS(entries.c_str(), data_->header.num_entries); |
| 686 UMA_HISTOGRAM_COUNTS(size.c_str(), data_->header.num_bytes / (1024 * 1024)); | 686 UMA_HISTOGRAM_COUNTS(size.c_str(), data_->header.num_bytes / (1024 * 1024)); |
| 687 UMA_HISTOGRAM_COUNTS(max_size.c_str(), max_size_ / (1024 * 1024)); | 687 UMA_HISTOGRAM_COUNTS(max_size.c_str(), max_size_ / (1024 * 1024)); |
| 688 } | 688 } |
| 689 } | 689 } |
| 690 | 690 |
| 691 void BackendImpl::IncrementIoCount() { | 691 void BackendImpl::IncrementIoCount() { |
| 692 num_pending_io_++; | 692 num_pending_io_++; |
| 693 } | 693 } |
| 694 | 694 |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 | 1153 |
| 1154 return num_dirty; | 1154 return num_dirty; |
| 1155 } | 1155 } |
| 1156 | 1156 |
| 1157 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) { | 1157 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) { |
| 1158 RankingsNode* rankings = cache_entry->rankings()->Data(); | 1158 RankingsNode* rankings = cache_entry->rankings()->Data(); |
| 1159 return !rankings->pointer; | 1159 return !rankings->pointer; |
| 1160 } | 1160 } |
| 1161 | 1161 |
| 1162 } // namespace disk_cache | 1162 } // namespace disk_cache |
| OLD | NEW |