| 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/rankings.h" | 5 #include "net/disk_cache/rankings.h" |
| 6 | 6 |
| 7 #include "base/histogram.h" | 7 #include "base/histogram.h" |
| 8 #include "net/disk_cache/backend_impl.h" | 8 #include "net/disk_cache/backend_impl.h" |
| 9 #include "net/disk_cache/entry_impl.h" | 9 #include "net/disk_cache/entry_impl.h" |
| 10 #include "net/disk_cache/errors.h" | 10 #include "net/disk_cache/errors.h" |
| 11 #include "net/disk_cache/histogram_macros.h" | 11 #include "net/disk_cache/histogram_macros.h" |
| 12 | 12 |
| 13 using base::Time; | 13 using base::Time; |
| 14 using base::TimeTicks; |
| 14 | 15 |
| 15 // This is used by crash_cache.exe to generate unit test files. | 16 // This is used by crash_cache.exe to generate unit test files. |
| 16 disk_cache::RankCrashes g_rankings_crash = disk_cache::NO_CRASH; | 17 disk_cache::RankCrashes g_rankings_crash = disk_cache::NO_CRASH; |
| 17 | 18 |
| 18 namespace { | 19 namespace { |
| 19 | 20 |
| 20 enum Operation { | 21 enum Operation { |
| 21 INSERT = 1, | 22 INSERT = 1, |
| 22 REMOVE | 23 REMOVE |
| 23 }; | 24 }; |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 heads_[i].set_value(0); | 201 heads_[i].set_value(0); |
| 201 tails_[i].set_value(0); | 202 tails_[i].set_value(0); |
| 202 } | 203 } |
| 203 control_data_ = NULL; | 204 control_data_ = NULL; |
| 204 } | 205 } |
| 205 | 206 |
| 206 bool Rankings::GetRanking(CacheRankingsBlock* rankings) { | 207 bool Rankings::GetRanking(CacheRankingsBlock* rankings) { |
| 207 if (!rankings->address().is_initialized()) | 208 if (!rankings->address().is_initialized()) |
| 208 return false; | 209 return false; |
| 209 | 210 |
| 210 Time start = Time::Now(); | 211 TimeTicks start = TimeTicks::Now(); |
| 211 if (!rankings->Load()) | 212 if (!rankings->Load()) |
| 212 return false; | 213 return false; |
| 213 | 214 |
| 214 if (!SanityCheck(rankings, true)) { | 215 if (!SanityCheck(rankings, true)) { |
| 215 backend_->CriticalError(ERR_INVALID_LINKS); | 216 backend_->CriticalError(ERR_INVALID_LINKS); |
| 216 return false; | 217 return false; |
| 217 } | 218 } |
| 218 | 219 |
| 219 backend_->OnEvent(Stats::OPEN_RANKINGS); | 220 backend_->OnEvent(Stats::OPEN_RANKINGS); |
| 220 | 221 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 DecrementCounter(list); | 400 DecrementCounter(list); |
| 400 UpdateIterators(&next); | 401 UpdateIterators(&next); |
| 401 UpdateIterators(&prev); | 402 UpdateIterators(&prev); |
| 402 } | 403 } |
| 403 | 404 |
| 404 // A crash in between Remove and Insert will lead to a dirty entry not on the | 405 // A crash in between Remove and Insert will lead to a dirty entry not on the |
| 405 // list. We want to avoid that case as much as we can (as while waiting for IO), | 406 // list. We want to avoid that case as much as we can (as while waiting for IO), |
| 406 // but the net effect is just an assert on debug when attempting to remove the | 407 // but the net effect is just an assert on debug when attempting to remove the |
| 407 // entry. Otherwise we'll need reentrant transactions, which is an overkill. | 408 // entry. Otherwise we'll need reentrant transactions, which is an overkill. |
| 408 void Rankings::UpdateRank(CacheRankingsBlock* node, bool modified, List list) { | 409 void Rankings::UpdateRank(CacheRankingsBlock* node, bool modified, List list) { |
| 409 Time start = Time::Now(); | 410 TimeTicks start = TimeTicks::Now(); |
| 410 Remove(node, list); | 411 Remove(node, list); |
| 411 Insert(node, modified, list); | 412 Insert(node, modified, list); |
| 412 CACHE_UMA(AGE_MS, "UpdateRank", 0, start); | 413 CACHE_UMA(AGE_MS, "UpdateRank", 0, start); |
| 413 } | 414 } |
| 414 | 415 |
| 415 void Rankings::CompleteTransaction() { | 416 void Rankings::CompleteTransaction() { |
| 416 Addr node_addr(static_cast<CacheAddr>(control_data_->transaction)); | 417 Addr node_addr(static_cast<CacheAddr>(control_data_->transaction)); |
| 417 if (!node_addr.is_initialized() || node_addr.is_separate_file()) { | 418 if (!node_addr.is_initialized() || node_addr.is_separate_file()) { |
| 418 NOTREACHED(); | 419 NOTREACHED(); |
| 419 LOG(ERROR) << "Invalid rankings info."; | 420 LOG(ERROR) << "Invalid rankings info."; |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 void Rankings::DecrementCounter(List list) { | 796 void Rankings::DecrementCounter(List list) { |
| 796 if (!count_lists_) | 797 if (!count_lists_) |
| 797 return; | 798 return; |
| 798 | 799 |
| 799 DCHECK(control_data_->sizes[list] > 0); | 800 DCHECK(control_data_->sizes[list] > 0); |
| 800 if (control_data_->sizes[list] > 0) | 801 if (control_data_->sizes[list] > 0) |
| 801 control_data_->sizes[list]--; | 802 control_data_->sizes[list]--; |
| 802 } | 803 } |
| 803 | 804 |
| 804 } // namespace disk_cache | 805 } // namespace disk_cache |
| OLD | NEW |