| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/simple/simple_entry_impl.h" | 5 #include "net/disk_cache/simple/simple_entry_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cstring> | 8 #include <cstring> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 CreateNetLogSimpleEntryConstructionCallback(this)); | 198 CreateNetLogSimpleEntryConstructionCallback(this)); |
| 199 } | 199 } |
| 200 | 200 |
| 201 void SimpleEntryImpl::SetActiveEntryProxy( | 201 void SimpleEntryImpl::SetActiveEntryProxy( |
| 202 std::unique_ptr<ActiveEntryProxy> active_entry_proxy) { | 202 std::unique_ptr<ActiveEntryProxy> active_entry_proxy) { |
| 203 DCHECK(!active_entry_proxy_); | 203 DCHECK(!active_entry_proxy_); |
| 204 active_entry_proxy_ = std::move(active_entry_proxy); | 204 active_entry_proxy_ = std::move(active_entry_proxy); |
| 205 } | 205 } |
| 206 | 206 |
| 207 int SimpleEntryImpl::OpenEntry(Entry** out_entry, | 207 int SimpleEntryImpl::OpenEntry(Entry** out_entry, |
| 208 const Backend::OracleCallback& oracle, |
| 208 const CompletionCallback& callback) { | 209 const CompletionCallback& callback) { |
| 209 DCHECK(backend_.get()); | 210 DCHECK(backend_.get()); |
| 210 | 211 |
| 211 net_log_.AddEvent(net::NetLogEventType::SIMPLE_CACHE_ENTRY_OPEN_CALL); | 212 net_log_.AddEvent(net::NetLogEventType::SIMPLE_CACHE_ENTRY_OPEN_CALL); |
| 212 | 213 |
| 213 bool have_index = backend_->index()->initialized(); | 214 bool have_index = backend_->index()->initialized(); |
| 214 // This enumeration is used in histograms, add entries only at end. | 215 // This enumeration is used in histograms, add entries only at end. |
| 215 enum OpenEntryIndexEnum { | 216 enum OpenEntryIndexEnum { |
| 216 INDEX_NOEXIST = 0, | 217 INDEX_NOEXIST = 0, |
| 217 INDEX_MISS = 1, | 218 INDEX_MISS = 1, |
| 218 INDEX_HIT = 2, | 219 INDEX_HIT = 2, |
| 219 INDEX_MAX = 3, | 220 INDEX_MAX = 3, |
| 220 }; | 221 }; |
| 221 OpenEntryIndexEnum open_entry_index_enum = INDEX_NOEXIST; | 222 OpenEntryIndexEnum open_entry_index_enum = INDEX_NOEXIST; |
| 223 uint8_t oracle_byte = 0; |
| 222 if (have_index) { | 224 if (have_index) { |
| 223 if (backend_->index()->Has(entry_hash_)) | 225 if (backend_->index()->HasWithOracleByte(entry_hash_, &oracle_byte)) |
| 224 open_entry_index_enum = INDEX_HIT; | 226 open_entry_index_enum = INDEX_HIT; |
| 225 else | 227 else |
| 226 open_entry_index_enum = INDEX_MISS; | 228 open_entry_index_enum = INDEX_MISS; |
| 227 } | 229 } |
| 228 SIMPLE_CACHE_UMA(ENUMERATION, | 230 SIMPLE_CACHE_UMA(ENUMERATION, |
| 229 "OpenEntryIndexState", cache_type_, | 231 "OpenEntryIndexState", cache_type_, |
| 230 open_entry_index_enum, INDEX_MAX); | 232 open_entry_index_enum, INDEX_MAX); |
| 231 | 233 |
| 234 if (open_entry_index_enum == INDEX_HIT && !oracle.is_null() && |
| 235 oracle.Run(oracle_byte) == Backend::OracleJudgement::MISS_AND_DOOM) { |
| 236 // ### UMA this. |
| 237 // ### net log. |
| 238 Doom(); |
| 239 return net::ERR_FAILED; |
| 240 } |
| 241 |
| 232 // If entry is not known to the index, initiate fast failover to the network. | 242 // If entry is not known to the index, initiate fast failover to the network. |
| 233 if (open_entry_index_enum == INDEX_MISS) { | 243 if (open_entry_index_enum == INDEX_MISS) { |
| 234 net_log_.AddEventWithNetErrorCode( | 244 net_log_.AddEventWithNetErrorCode( |
| 235 net::NetLogEventType::SIMPLE_CACHE_ENTRY_OPEN_END, net::ERR_FAILED); | 245 net::NetLogEventType::SIMPLE_CACHE_ENTRY_OPEN_END, net::ERR_FAILED); |
| 236 return net::ERR_FAILED; | 246 return net::ERR_FAILED; |
| 237 } | 247 } |
| 238 | 248 |
| 239 pending_operations_.push(SimpleEntryOperation::OpenOperation( | 249 pending_operations_.push(SimpleEntryOperation::OpenOperation( |
| 240 this, have_index, callback, out_entry)); | 250 this, have_index, callback, out_entry)); |
| 241 RunNextOperationIfNeeded(); | 251 RunNextOperationIfNeeded(); |
| (...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1356 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { | 1366 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { |
| 1357 data_size_[i] = entry_stat.data_size(i); | 1367 data_size_[i] = entry_stat.data_size(i); |
| 1358 } | 1368 } |
| 1359 sparse_data_size_ = entry_stat.sparse_data_size(); | 1369 sparse_data_size_ = entry_stat.sparse_data_size(); |
| 1360 if (!doomed_ && backend_.get()) { | 1370 if (!doomed_ && backend_.get()) { |
| 1361 backend_->index()->UpdateEntrySize( | 1371 backend_->index()->UpdateEntrySize( |
| 1362 entry_hash_, base::checked_cast<uint32_t>(GetDiskUsage())); | 1372 entry_hash_, base::checked_cast<uint32_t>(GetDiskUsage())); |
| 1363 } | 1373 } |
| 1364 } | 1374 } |
| 1365 | 1375 |
| 1376 void SimpleEntryImpl::SetOracleByte(uint8_t oracle_byte) { |
| 1377 DCHECK(io_thread_checker_.CalledOnValidThread()); |
| 1378 if (!doomed_ && backend_.get()) { |
| 1379 backend_->index()->UpdateEntryOracleByte(entry_hash_, oracle_byte); |
| 1380 } |
| 1381 } |
| 1382 |
| 1366 int64_t SimpleEntryImpl::GetDiskUsage() const { | 1383 int64_t SimpleEntryImpl::GetDiskUsage() const { |
| 1367 int64_t file_size = 0; | 1384 int64_t file_size = 0; |
| 1368 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { | 1385 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { |
| 1369 file_size += | 1386 file_size += |
| 1370 simple_util::GetFileSizeFromDataSize(key_.size(), data_size_[i]); | 1387 simple_util::GetFileSizeFromDataSize(key_.size(), data_size_[i]); |
| 1371 } | 1388 } |
| 1372 file_size += sparse_data_size_; | 1389 file_size += sparse_data_size_; |
| 1373 return file_size; | 1390 return file_size; |
| 1374 } | 1391 } |
| 1375 | 1392 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1516 } | 1533 } |
| 1517 crc32s_end_offset_[stream_index] = offset + length; | 1534 crc32s_end_offset_[stream_index] = offset + length; |
| 1518 } else if (offset < crc32s_end_offset_[stream_index]) { | 1535 } else if (offset < crc32s_end_offset_[stream_index]) { |
| 1519 // If a range for which the crc32 was already computed is rewritten, the | 1536 // If a range for which the crc32 was already computed is rewritten, the |
| 1520 // computation of the crc32 need to start from 0 again. | 1537 // computation of the crc32 need to start from 0 again. |
| 1521 crc32s_end_offset_[stream_index] = 0; | 1538 crc32s_end_offset_[stream_index] = 0; |
| 1522 } | 1539 } |
| 1523 } | 1540 } |
| 1524 | 1541 |
| 1525 } // namespace disk_cache | 1542 } // namespace disk_cache |
| OLD | NEW |