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/backend_impl.h" | 5 #include "net/disk_cache/backend_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 // the id cannot be zero, because that value is used as "not dirty". | 277 // the id cannot be zero, because that value is used as "not dirty". |
278 // Increasing the value once per second gives us many years before we start | 278 // Increasing the value once per second gives us many years before we start |
279 // having collisions. | 279 // having collisions. |
280 data_->header.this_id++; | 280 data_->header.this_id++; |
281 if (!data_->header.this_id) | 281 if (!data_->header.this_id) |
282 data_->header.this_id++; | 282 data_->header.this_id++; |
283 | 283 |
284 bool previous_crash = (data_->header.crash != 0); | 284 bool previous_crash = (data_->header.crash != 0); |
285 data_->header.crash = 1; | 285 data_->header.crash = 1; |
286 | 286 |
287 if (!block_files_.Init(create_files)) | 287 if (!block_files_.Init(create_files, kFirstAdditionalBlockFile)) |
288 return net::ERR_FAILED; | 288 return net::ERR_FAILED; |
289 | 289 |
290 // We want to minimize the changes to cache for an AppCache. | 290 // We want to minimize the changes to cache for an AppCache. |
291 if (cache_type() == net::APP_CACHE) { | 291 if (cache_type() == net::APP_CACHE) { |
292 DCHECK(!new_eviction_); | 292 DCHECK(!new_eviction_); |
293 read_only_ = true; | 293 read_only_ = true; |
294 } else if (cache_type() == net::SHADER_CACHE) { | 294 } else if (cache_type() == net::SHADER_CACHE) { |
295 DCHECK(!new_eviction_); | 295 DCHECK(!new_eviction_); |
296 } | 296 } |
297 | 297 |
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1137 LOG(ERROR) << "Number of entries mismatch"; | 1137 LOG(ERROR) << "Number of entries mismatch"; |
1138 #if !defined(NET_BUILD_STRESS_CACHE) | 1138 #if !defined(NET_BUILD_STRESS_CACHE) |
1139 return ERR_NUM_ENTRIES_MISMATCH; | 1139 return ERR_NUM_ENTRIES_MISMATCH; |
1140 #endif | 1140 #endif |
1141 } | 1141 } |
1142 | 1142 |
1143 return CheckAllEntries(); | 1143 return CheckAllEntries(); |
1144 } | 1144 } |
1145 | 1145 |
1146 void BackendImpl::FlushIndex() { | 1146 void BackendImpl::FlushIndex() { |
1147 if (index_.get() && !disabled_) | 1147 if (index_ && !disabled_) |
1148 index_->Flush(); | 1148 index_->Flush(); |
1149 } | 1149 } |
1150 | 1150 |
1151 // ------------------------------------------------------------------------ | 1151 // ------------------------------------------------------------------------ |
1152 | 1152 |
1153 net::CacheType BackendImpl::GetCacheType() const { | 1153 net::CacheType BackendImpl::GetCacheType() const { |
1154 return cache_type_; | 1154 return cache_type_; |
1155 } | 1155 } |
1156 | 1156 |
1157 int32 BackendImpl::GetEntryCount() const { | 1157 int32 BackendImpl::GetEntryCount() const { |
1158 if (!index_.get() || disabled_) | 1158 if (!index_ || disabled_) |
1159 return 0; | 1159 return 0; |
1160 // num_entries includes entries already evicted. | 1160 // num_entries includes entries already evicted. |
1161 int32 not_deleted = data_->header.num_entries - | 1161 int32 not_deleted = data_->header.num_entries - |
1162 data_->header.lru.sizes[Rankings::DELETED]; | 1162 data_->header.lru.sizes[Rankings::DELETED]; |
1163 | 1163 |
1164 if (not_deleted < 0) { | 1164 if (not_deleted < 0) { |
1165 NOTREACHED(); | 1165 NOTREACHED(); |
1166 not_deleted = 0; | 1166 not_deleted = 0; |
1167 } | 1167 } |
1168 | 1168 |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1567 int error = NewEntry(address, &tmp); | 1567 int error = NewEntry(address, &tmp); |
1568 cache_entry.swap(&tmp); | 1568 cache_entry.swap(&tmp); |
1569 | 1569 |
1570 if (error || cache_entry->dirty()) { | 1570 if (error || cache_entry->dirty()) { |
1571 // This entry is dirty on disk (it was not properly closed): we cannot | 1571 // This entry is dirty on disk (it was not properly closed): we cannot |
1572 // trust it. | 1572 // trust it. |
1573 Addr child(0); | 1573 Addr child(0); |
1574 if (!error) | 1574 if (!error) |
1575 child.set_value(cache_entry->GetNextAddress()); | 1575 child.set_value(cache_entry->GetNextAddress()); |
1576 | 1576 |
1577 if (parent_entry.get()) { | 1577 if (parent_entry) { |
1578 parent_entry->SetNextAddress(child); | 1578 parent_entry->SetNextAddress(child); |
1579 parent_entry = NULL; | 1579 parent_entry = NULL; |
1580 } else { | 1580 } else { |
1581 data_->table[hash & mask_] = child.value(); | 1581 data_->table[hash & mask_] = child.value(); |
1582 } | 1582 } |
1583 | 1583 |
1584 Trace("MatchEntry dirty %d 0x%x 0x%x", find_parent, entry_addr.value(), | 1584 Trace("MatchEntry dirty %d 0x%x 0x%x", find_parent, entry_addr.value(), |
1585 address.value()); | 1585 address.value()); |
1586 | 1586 |
1587 if (!error) { | 1587 if (!error) { |
(...skipping 20 matching lines...) Expand all Loading... |
1608 Trace("Entry not on the index 0x%x", address.value()); | 1608 Trace("Entry not on the index 0x%x", address.value()); |
1609 *match_error = true; | 1609 *match_error = true; |
1610 parent_entry = NULL; | 1610 parent_entry = NULL; |
1611 } | 1611 } |
1612 break; | 1612 break; |
1613 } | 1613 } |
1614 if (!cache_entry->Update()) | 1614 if (!cache_entry->Update()) |
1615 cache_entry = NULL; | 1615 cache_entry = NULL; |
1616 parent_entry = cache_entry; | 1616 parent_entry = cache_entry; |
1617 cache_entry = NULL; | 1617 cache_entry = NULL; |
1618 if (!parent_entry.get()) | 1618 if (!parent_entry) |
1619 break; | 1619 break; |
1620 | 1620 |
1621 address.set_value(parent_entry->GetNextAddress()); | 1621 address.set_value(parent_entry->GetNextAddress()); |
1622 } | 1622 } |
1623 | 1623 |
1624 if (parent_entry.get() && (!find_parent || !found)) | 1624 if (parent_entry && (!find_parent || !found)) |
1625 parent_entry = NULL; | 1625 parent_entry = NULL; |
1626 | 1626 |
1627 if (find_parent && entry_addr.is_initialized() && !cache_entry.get()) { | 1627 if (find_parent && entry_addr.is_initialized() && !cache_entry) { |
1628 *match_error = true; | 1628 *match_error = true; |
1629 parent_entry = NULL; | 1629 parent_entry = NULL; |
1630 } | 1630 } |
1631 | 1631 |
1632 if (cache_entry.get() && (find_parent || !found)) | 1632 if (cache_entry && (find_parent || !found)) |
1633 cache_entry = NULL; | 1633 cache_entry = NULL; |
1634 | 1634 |
1635 find_parent ? parent_entry.swap(&tmp) : cache_entry.swap(&tmp); | 1635 find_parent ? parent_entry.swap(&tmp) : cache_entry.swap(&tmp); |
1636 FlushIndex(); | 1636 FlushIndex(); |
1637 return tmp; | 1637 return tmp; |
1638 } | 1638 } |
1639 | 1639 |
1640 // This is the actual implementation for OpenNextEntry and OpenPrevEntry. | 1640 // This is the actual implementation for OpenNextEntry and OpenPrevEntry. |
1641 EntryImpl* BackendImpl::OpenFollowingEntry(bool forward, void** iter) { | 1641 EntryImpl* BackendImpl::OpenFollowingEntry(bool forward, void** iter) { |
1642 if (disabled_) | 1642 if (disabled_) |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2112 if (total_memory > kMaxBuffersSize || total_memory <= 0) | 2112 if (total_memory > kMaxBuffersSize || total_memory <= 0) |
2113 total_memory = kMaxBuffersSize; | 2113 total_memory = kMaxBuffersSize; |
2114 | 2114 |
2115 done = true; | 2115 done = true; |
2116 } | 2116 } |
2117 | 2117 |
2118 return static_cast<int>(total_memory); | 2118 return static_cast<int>(total_memory); |
2119 } | 2119 } |
2120 | 2120 |
2121 } // namespace disk_cache | 2121 } // namespace disk_cache |
OLD | NEW |