| OLD | NEW |
| 1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2010 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/field_trial.h" | 7 #include "base/field_trial.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/histogram.h" | 10 #include "base/histogram.h" |
| (...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 scoped_ptr<Rankings::Iterator> iterator( | 771 scoped_ptr<Rankings::Iterator> iterator( |
| 772 reinterpret_cast<Rankings::Iterator*>(iter)); | 772 reinterpret_cast<Rankings::Iterator*>(iter)); |
| 773 } | 773 } |
| 774 | 774 |
| 775 EntryImpl* BackendImpl::OpenEntryImpl(const std::string& key) { | 775 EntryImpl* BackendImpl::OpenEntryImpl(const std::string& key) { |
| 776 if (disabled_) | 776 if (disabled_) |
| 777 return NULL; | 777 return NULL; |
| 778 | 778 |
| 779 TimeTicks start = TimeTicks::Now(); | 779 TimeTicks start = TimeTicks::Now(); |
| 780 uint32 hash = Hash(key); | 780 uint32 hash = Hash(key); |
| 781 Trace("Open hash 0x%x", hash); |
| 781 | 782 |
| 782 EntryImpl* cache_entry = MatchEntry(key, hash, false); | 783 EntryImpl* cache_entry = MatchEntry(key, hash, false); |
| 783 if (!cache_entry) { | 784 if (!cache_entry) { |
| 784 stats_.OnEvent(Stats::OPEN_MISS); | 785 stats_.OnEvent(Stats::OPEN_MISS); |
| 785 return NULL; | 786 return NULL; |
| 786 } | 787 } |
| 787 | 788 |
| 788 if (ENTRY_NORMAL != cache_entry->entry()->Data()->state) { | 789 if (ENTRY_NORMAL != cache_entry->entry()->Data()->state) { |
| 789 // The entry was already evicted. | 790 // The entry was already evicted. |
| 790 cache_entry->Release(); | 791 cache_entry->Release(); |
| 791 stats_.OnEvent(Stats::OPEN_MISS); | 792 stats_.OnEvent(Stats::OPEN_MISS); |
| 792 return NULL; | 793 return NULL; |
| 793 } | 794 } |
| 794 | 795 |
| 795 eviction_.OnOpenEntry(cache_entry); | 796 eviction_.OnOpenEntry(cache_entry); |
| 796 entry_count_++; | 797 entry_count_++; |
| 797 | 798 |
| 798 CACHE_UMA(AGE_MS, "OpenTime", GetSizeGroup(), start); | 799 CACHE_UMA(AGE_MS, "OpenTime", GetSizeGroup(), start); |
| 799 stats_.OnEvent(Stats::OPEN_HIT); | 800 stats_.OnEvent(Stats::OPEN_HIT); |
| 800 return cache_entry; | 801 return cache_entry; |
| 801 } | 802 } |
| 802 | 803 |
| 803 EntryImpl* BackendImpl::CreateEntryImpl(const std::string& key) { | 804 EntryImpl* BackendImpl::CreateEntryImpl(const std::string& key) { |
| 804 if (disabled_ || key.empty()) | 805 if (disabled_ || key.empty()) |
| 805 return NULL; | 806 return NULL; |
| 806 | 807 |
| 807 TimeTicks start = TimeTicks::Now(); | 808 TimeTicks start = TimeTicks::Now(); |
| 808 uint32 hash = Hash(key); | 809 uint32 hash = Hash(key); |
| 810 Trace("Create hash 0x%x", hash); |
| 809 | 811 |
| 810 scoped_refptr<EntryImpl> parent; | 812 scoped_refptr<EntryImpl> parent; |
| 811 Addr entry_address(data_->table[hash & mask_]); | 813 Addr entry_address(data_->table[hash & mask_]); |
| 812 if (entry_address.is_initialized()) { | 814 if (entry_address.is_initialized()) { |
| 813 // We have an entry already. It could be the one we are looking for, or just | 815 // We have an entry already. It could be the one we are looking for, or just |
| 814 // a hash conflict. | 816 // a hash conflict. |
| 815 EntryImpl* old_entry = MatchEntry(key, hash, false); | 817 EntryImpl* old_entry = MatchEntry(key, hash, false); |
| 816 if (old_entry) | 818 if (old_entry) |
| 817 return ResurrectEntry(old_entry); | 819 return ResurrectEntry(old_entry); |
| 818 | 820 |
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1575 cache_entry = NULL; | 1577 cache_entry = NULL; |
| 1576 } else { | 1578 } else { |
| 1577 Trace("NewEntry failed on MatchEntry 0x%x", address.value()); | 1579 Trace("NewEntry failed on MatchEntry 0x%x", address.value()); |
| 1578 } | 1580 } |
| 1579 | 1581 |
| 1580 // Restart the search. | 1582 // Restart the search. |
| 1581 address.set_value(data_->table[hash & mask_]); | 1583 address.set_value(data_->table[hash & mask_]); |
| 1582 continue; | 1584 continue; |
| 1583 } | 1585 } |
| 1584 | 1586 |
| 1587 DCHECK_EQ(hash & mask_, cache_entry->entry()->Data()->hash & mask_); |
| 1585 if (cache_entry->IsSameEntry(key, hash)) { | 1588 if (cache_entry->IsSameEntry(key, hash)) { |
| 1586 if (!cache_entry->Update()) | 1589 if (!cache_entry->Update()) |
| 1587 cache_entry = NULL; | 1590 cache_entry = NULL; |
| 1588 found = true; | 1591 found = true; |
| 1589 break; | 1592 break; |
| 1590 } | 1593 } |
| 1591 if (!cache_entry->Update()) | 1594 if (!cache_entry->Update()) |
| 1592 cache_entry = NULL; | 1595 cache_entry = NULL; |
| 1593 parent_entry = cache_entry; | 1596 parent_entry = cache_entry; |
| 1594 cache_entry = NULL; | 1597 cache_entry = NULL; |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2068 if (total_memory > kMaxBuffersSize || total_memory <= 0) | 2071 if (total_memory > kMaxBuffersSize || total_memory <= 0) |
| 2069 total_memory = kMaxBuffersSize; | 2072 total_memory = kMaxBuffersSize; |
| 2070 | 2073 |
| 2071 done = true; | 2074 done = true; |
| 2072 } | 2075 } |
| 2073 | 2076 |
| 2074 return static_cast<int>(total_memory); | 2077 return static_cast<int>(total_memory); |
| 2075 } | 2078 } |
| 2076 | 2079 |
| 2077 } // namespace disk_cache | 2080 } // namespace disk_cache |
| OLD | NEW |