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_index.h" | 5 #include "net/disk_cache/simple/simple_index.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
352 | 352 |
353 SimpleIndex::EntrySet* index_file_entries = &load_result->entries; | 353 SimpleIndex::EntrySet* index_file_entries = &load_result->entries; |
354 // First, remove the entries that are in the |removed_entries_| from both | 354 // First, remove the entries that are in the |removed_entries_| from both |
355 // sets. | 355 // sets. |
356 for (base::hash_set<uint64>::const_iterator it = | 356 for (base::hash_set<uint64>::const_iterator it = |
357 removed_entries_.begin(); it != removed_entries_.end(); ++it) { | 357 removed_entries_.begin(); it != removed_entries_.end(); ++it) { |
358 entries_set_.erase(*it); | 358 entries_set_.erase(*it); |
359 index_file_entries->erase(*it); | 359 index_file_entries->erase(*it); |
360 } | 360 } |
361 | 361 |
362 // Recalculate the cache size while merging the two sets. | 362 for (EntrySet::const_iterator it = entries_set_.begin(); |
363 for (EntrySet::const_iterator it = index_file_entries->begin(); | 363 it != entries_set_.end(); ++it) { |
364 const uint64 entry_hash = it->first; | |
365 std::pair<EntrySet::iterator, bool> insert_result = | |
366 index_file_entries->insert(EntrySet::value_type(entry_hash, | |
367 EntryMetadata())); | |
368 EntrySet::iterator& possibly_inserted_entry = insert_result.first; | |
369 possibly_inserted_entry->second = it->second; | |
Randy Smith (Not in Mondays)
2013/08/12 17:02:20
Suggestion: Why not test insert_result.second to d
gavinp
2013/08/13 11:11:05
I think it's just a copy of EntrySet::data_type yo
| |
370 } | |
371 | |
372 uint64 merged_cache_size = 0; | |
373 for (EntrySet::iterator it = index_file_entries->begin(); | |
364 it != index_file_entries->end(); ++it) { | 374 it != index_file_entries->end(); ++it) { |
365 // If there is already an entry in the current entries_set_, we need to | 375 merged_cache_size += it->second.GetEntrySize(); |
366 // merge the new data there with the data loaded in the initialization. | |
367 EntrySet::iterator current_entry = entries_set_.find(it->first); | |
368 // When Merging, existing data in the |current_entry| will prevail. | |
369 if (current_entry == entries_set_.end()) { | |
370 InsertInEntrySet(it->first, it->second, &entries_set_); | |
371 cache_size_ += it->second.GetEntrySize(); | |
372 } | |
373 } | 376 } |
377 | |
378 entries_set_.swap(*index_file_entries); | |
379 cache_size_ = merged_cache_size; | |
374 initialized_ = true; | 380 initialized_ = true; |
375 removed_entries_.clear(); | 381 removed_entries_.clear(); |
376 | 382 |
377 // The actual IO is asynchronous, so calling WriteToDisk() shouldn't slow the | 383 // The actual IO is asynchronous, so calling WriteToDisk() shouldn't slow the |
378 // merge down much. | 384 // merge down much. |
379 if (load_result->flush_required) | 385 if (load_result->flush_required) |
380 WriteToDisk(); | 386 WriteToDisk(); |
381 | 387 |
382 UMA_HISTOGRAM_CUSTOM_COUNTS("SimpleCache.IndexInitializationWaiters", | 388 UMA_HISTOGRAM_CUSTOM_COUNTS("SimpleCache.IndexInitializationWaiters", |
383 to_run_when_initialized_.size(), 0, 100, 20); | 389 to_run_when_initialized_.size(), 0, 100, 20); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
446 entries_set_.erase(it++); | 452 entries_set_.erase(it++); |
447 continue; | 453 continue; |
448 } | 454 } |
449 } | 455 } |
450 ++it; | 456 ++it; |
451 } | 457 } |
452 return ret_hashes.Pass(); | 458 return ret_hashes.Pass(); |
453 } | 459 } |
454 | 460 |
455 } // namespace disk_cache | 461 } // namespace disk_cache |
OLD | NEW |