Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: net/disk_cache/simple/simple_index.cc

Issue 14295013: Simple Cache: DoomEntriesBetween() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix an actual bug in DoomEntry Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/disk_cache/simple/simple_index.h ('k') | net/disk_cache/simple/simple_synchronous_entry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 const base::FilePath& path) 84 const base::FilePath& path)
85 : cache_size_(0), 85 : cache_size_(0),
86 initialized_(false), 86 initialized_(false),
87 index_filename_(path.AppendASCII("simple-index")), 87 index_filename_(path.AppendASCII("simple-index")),
88 cache_thread_(cache_thread), 88 cache_thread_(cache_thread),
89 io_thread_(io_thread) { 89 io_thread_(io_thread) {
90 } 90 }
91 91
92 SimpleIndex::~SimpleIndex() { 92 SimpleIndex::~SimpleIndex() {
93 DCHECK(io_thread_checker_.CalledOnValidThread()); 93 DCHECK(io_thread_checker_.CalledOnValidThread());
94
95 // Fail all callbacks waiting for the index to come up.
96 for (CallbackList::iterator it = to_run_when_initialized_.begin(),
97 end = to_run_when_initialized_.end(); it != end; ++it) {
98 it->Run(net::ERR_ABORTED);
99 }
94 } 100 }
95 101
96 void SimpleIndex::Initialize() { 102 void SimpleIndex::Initialize() {
97 DCHECK(io_thread_checker_.CalledOnValidThread()); 103 DCHECK(io_thread_checker_.CalledOnValidThread());
98 IndexCompletionCallback merge_callback = 104 IndexCompletionCallback merge_callback =
99 base::Bind(&SimpleIndex::MergeInitializingSet, AsWeakPtr()); 105 base::Bind(&SimpleIndex::MergeInitializingSet, AsWeakPtr());
100 base::WorkerPool::PostTask(FROM_HERE, 106 base::WorkerPool::PostTask(FROM_HERE,
101 base::Bind(&SimpleIndex::LoadFromDisk, 107 base::Bind(&SimpleIndex::LoadFromDisk,
102 index_filename_, 108 index_filename_,
103 io_thread_, 109 io_thread_,
104 merge_callback), 110 merge_callback),
105 true); 111 true);
106 } 112 }
107 113
114 int SimpleIndex::ExecuteWhenReady(const net::CompletionCallback& task) {
115 DCHECK(io_thread_checker_.CalledOnValidThread());
116 if (initialized_)
117 io_thread_->PostTask(FROM_HERE, base::Bind(task, net::OK));
118 else
119 to_run_when_initialized_.push_back(task);
120 return net::ERR_IO_PENDING;
121 }
122
123 scoped_ptr<std::vector<uint64> > SimpleIndex::RemoveEntriesBetween(
124 const base::Time initial_time, const base::Time end_time) {
125 DCHECK_EQ(true, initialized_);
126 const base::Time extended_end_time =
127 end_time.is_null() ? base::Time::Max() : end_time;
128 DCHECK(extended_end_time >= initial_time);
129 scoped_ptr<std::vector<uint64> > ret_hashes(new std::vector<uint64>());
130 for (EntrySet::iterator it = entries_set_.begin(), end = entries_set_.end();
131 it != end;) {
132 EntryMetadata metadata = it->second;
133 base::Time entry_time = metadata.GetLastUsedTime();
134 if (initial_time <= entry_time && entry_time < extended_end_time) {
135 ret_hashes->push_back(metadata.GetHashKey());
136 entries_set_.erase(it++);
137 } else {
138 it++;
139 }
140 }
141 return ret_hashes.Pass();
142 }
143
144 int32 SimpleIndex::GetEntryCount() const {
145 // TODO(pasko): return a meaningful initial estimate before initialized.
146 return entries_set_.size();
147 }
148
108 void SimpleIndex::Insert(const std::string& key) { 149 void SimpleIndex::Insert(const std::string& key) {
109 DCHECK(io_thread_checker_.CalledOnValidThread()); 150 DCHECK(io_thread_checker_.CalledOnValidThread());
110 // Upon insert we don't know yet the size of the entry. 151 // Upon insert we don't know yet the size of the entry.
111 // It will be updated later when the SimpleEntryImpl finishes opening or 152 // It will be updated later when the SimpleEntryImpl finishes opening or
112 // creating the new entry, and then UpdateEntrySize will be called. 153 // creating the new entry, and then UpdateEntrySize will be called.
113 const uint64 hash_key = simple_util::GetEntryHashKey(key); 154 const uint64 hash_key = simple_util::GetEntryHashKey(key);
114 InsertInEntrySet(EntryMetadata(hash_key, base::Time::Now(), 0), 155 InsertInEntrySet(EntryMetadata(hash_key, base::Time::Now(), 0),
115 &entries_set_); 156 &entries_set_);
116 if (!initialized_) 157 if (!initialized_)
117 removed_entries_.erase(hash_key); 158 removed_entries_.erase(hash_key);
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 347 }
307 } 348 }
308 last_write_to_disk_ = base::Time::Now(); 349 last_write_to_disk_ = base::Time::Now();
309 initialized_ = true; 350 initialized_ = true;
310 removed_entries_.clear(); 351 removed_entries_.clear();
311 352
312 // The actual IO is asynchronous, so calling WriteToDisk() shouldn't slow down 353 // The actual IO is asynchronous, so calling WriteToDisk() shouldn't slow down
313 // much the merge. 354 // much the merge.
314 if (force_index_flush) 355 if (force_index_flush)
315 WriteToDisk(); 356 WriteToDisk();
357
358 // Run all callbacks waiting for the index to come up.
359 for (CallbackList::iterator it = to_run_when_initialized_.begin(),
360 end = to_run_when_initialized_.end(); it != end; ++it) {
361 io_thread_->PostTask(FROM_HERE, base::Bind((*it), net::OK));
362 }
363 to_run_when_initialized_.clear();
316 } 364 }
317 365
318 void SimpleIndex::WriteToDisk() { 366 void SimpleIndex::WriteToDisk() {
319 DCHECK(io_thread_checker_.CalledOnValidThread()); 367 DCHECK(io_thread_checker_.CalledOnValidThread());
320 if (!initialized_) 368 if (!initialized_)
321 return; 369 return;
322 last_write_to_disk_ = base::Time::Now(); 370 last_write_to_disk_ = base::Time::Now();
323 SimpleIndexFile::IndexMetadata index_metadata(entries_set_.size(), 371 SimpleIndexFile::IndexMetadata index_metadata(entries_set_.size(),
324 cache_size_); 372 cache_size_);
325 scoped_ptr<Pickle> pickle = SimpleIndexFile::Serialize(index_metadata, 373 scoped_ptr<Pickle> pickle = SimpleIndexFile::Serialize(index_metadata,
326 entries_set_); 374 entries_set_);
327 cache_thread_->PostTask(FROM_HERE, base::Bind( 375 cache_thread_->PostTask(FROM_HERE, base::Bind(
328 &SimpleIndex::WriteToDiskInternal, 376 &SimpleIndex::WriteToDiskInternal,
329 index_filename_, 377 index_filename_,
330 base::Passed(&pickle))); 378 base::Passed(&pickle)));
331 } 379 }
332 380
333 } // namespace disk_cache 381 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/simple/simple_index.h ('k') | net/disk_cache/simple/simple_synchronous_entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698