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

Side by Side Diff: net/disk_cache/backend_impl.cc

Issue 6005015: Revert 70618 - First pass at adding http/backend cache events to the NetLog. ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 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/backend_impl.h ('k') | net/disk_cache/backend_unittest.cc » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/file_path.h" 7 #include "base/file_path.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 return trial2->group() == group2a; 187 return trial2->group() == group2a;
188 } 188 }
189 189
190 // ------------------------------------------------------------------------ 190 // ------------------------------------------------------------------------
191 191
192 // This class takes care of building an instance of the backend. 192 // This class takes care of building an instance of the backend.
193 class CacheCreator { 193 class CacheCreator {
194 public: 194 public:
195 CacheCreator(const FilePath& path, bool force, int max_bytes, 195 CacheCreator(const FilePath& path, bool force, int max_bytes,
196 net::CacheType type, uint32 flags, 196 net::CacheType type, uint32 flags,
197 base::MessageLoopProxy* thread, net::NetLog* net_log, 197 base::MessageLoopProxy* thread, disk_cache::Backend** backend,
198 disk_cache::Backend** backend,
199 net::CompletionCallback* callback) 198 net::CompletionCallback* callback)
200 : path_(path), force_(force), retry_(false), max_bytes_(max_bytes), 199 : path_(path), force_(force), retry_(false), max_bytes_(max_bytes),
201 type_(type), flags_(flags), thread_(thread), backend_(backend), 200 type_(type), flags_(flags), thread_(thread), backend_(backend),
202 callback_(callback), cache_(NULL), net_log_(net_log), 201 callback_(callback), cache_(NULL),
203 ALLOW_THIS_IN_INITIALIZER_LIST( 202 ALLOW_THIS_IN_INITIALIZER_LIST(
204 my_callback_(this, &CacheCreator::OnIOComplete)) { 203 my_callback_(this, &CacheCreator::OnIOComplete)) {
205 } 204 }
206 ~CacheCreator() {} 205 ~CacheCreator() {}
207 206
208 // Creates the backend. 207 // Creates the backend.
209 int Run(); 208 int Run();
210 209
211 // Callback implementation. 210 // Callback implementation.
212 void OnIOComplete(int result); 211 void OnIOComplete(int result);
213 212
214 private: 213 private:
215 void DoCallback(int result); 214 void DoCallback(int result);
216 215
217 const FilePath& path_; 216 const FilePath& path_;
218 bool force_; 217 bool force_;
219 bool retry_; 218 bool retry_;
220 int max_bytes_; 219 int max_bytes_;
221 net::CacheType type_; 220 net::CacheType type_;
222 uint32 flags_; 221 uint32 flags_;
223 scoped_refptr<base::MessageLoopProxy> thread_; 222 scoped_refptr<base::MessageLoopProxy> thread_;
224 disk_cache::Backend** backend_; 223 disk_cache::Backend** backend_;
225 net::CompletionCallback* callback_; 224 net::CompletionCallback* callback_;
226 disk_cache::BackendImpl* cache_; 225 disk_cache::BackendImpl* cache_;
227 net::NetLog* net_log_;
228 net::CompletionCallbackImpl<CacheCreator> my_callback_; 226 net::CompletionCallbackImpl<CacheCreator> my_callback_;
229 227
230 DISALLOW_COPY_AND_ASSIGN(CacheCreator); 228 DISALLOW_COPY_AND_ASSIGN(CacheCreator);
231 }; 229 };
232 230
233 int CacheCreator::Run() { 231 int CacheCreator::Run() {
234 cache_ = new disk_cache::BackendImpl(path_, thread_, net_log_); 232 cache_ = new disk_cache::BackendImpl(path_, thread_);
235 cache_->SetMaxSize(max_bytes_); 233 cache_->SetMaxSize(max_bytes_);
236 cache_->SetType(type_); 234 cache_->SetType(type_);
237 cache_->SetFlags(flags_); 235 cache_->SetFlags(flags_);
238 int rv = cache_->Init(&my_callback_); 236 int rv = cache_->Init(&my_callback_);
239 DCHECK_EQ(net::ERR_IO_PENDING, rv); 237 DCHECK_EQ(net::ERR_IO_PENDING, rv);
240 return rv; 238 return rv;
241 } 239 }
242 240
243 void CacheCreator::OnIOComplete(int result) { 241 void CacheCreator::OnIOComplete(int result) {
244 if (result == net::OK || !force_ || retry_) 242 if (result == net::OK || !force_ || retry_)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 } 288 }
291 289
292 } // namespace 290 } // namespace
293 291
294 // ------------------------------------------------------------------------ 292 // ------------------------------------------------------------------------
295 293
296 namespace disk_cache { 294 namespace disk_cache {
297 295
298 int CreateCacheBackend(net::CacheType type, const FilePath& path, int max_bytes, 296 int CreateCacheBackend(net::CacheType type, const FilePath& path, int max_bytes,
299 bool force, base::MessageLoopProxy* thread, 297 bool force, base::MessageLoopProxy* thread,
300 net::NetLog* net_log, Backend** backend, 298 Backend** backend, CompletionCallback* callback) {
301 CompletionCallback* callback) {
302 DCHECK(callback); 299 DCHECK(callback);
303 if (type == net::MEMORY_CACHE) { 300 if (type == net::MEMORY_CACHE) {
304 *backend = MemBackendImpl::CreateBackend(max_bytes); 301 *backend = MemBackendImpl::CreateBackend(max_bytes);
305 return *backend ? net::OK : net::ERR_FAILED; 302 return *backend ? net::OK : net::ERR_FAILED;
306 } 303 }
307 DCHECK(thread); 304 DCHECK(thread);
308 305
309 return BackendImpl::CreateBackend(path, force, max_bytes, type, kNone, thread, 306 return BackendImpl::CreateBackend(path, force, max_bytes, type, kNone, thread,
310 net_log, backend, callback); 307 backend, callback);
311 } 308 }
312 309
313 // Returns the preferred maximum number of bytes for the cache given the 310 // Returns the preferred maximum number of bytes for the cache given the
314 // number of available bytes. 311 // number of available bytes.
315 int PreferedCacheSize(int64 available) { 312 int PreferedCacheSize(int64 available) {
316 // Return 80% of the available space if there is not enough space to use 313 // Return 80% of the available space if there is not enough space to use
317 // kDefaultCacheSize. 314 // kDefaultCacheSize.
318 if (available < kDefaultCacheSize * 10 / 8) 315 if (available < kDefaultCacheSize * 10 / 8)
319 return static_cast<int32>(available * 8 / 10); 316 return static_cast<int32>(available * 8 / 10);
320 317
(...skipping 26 matching lines...) Expand all
347 // number, (located on the same parent folder), and spawn a worker thread to 344 // number, (located on the same parent folder), and spawn a worker thread to
348 // delete all the files on all the stale cache folders. The whole process can 345 // delete all the files on all the stale cache folders. The whole process can
349 // still fail if we are not able to rename the cache folder (for instance due to 346 // still fail if we are not able to rename the cache folder (for instance due to
350 // a sharing violation), and in that case a cache for this profile (on the 347 // a sharing violation), and in that case a cache for this profile (on the
351 // desired path) cannot be created. 348 // desired path) cannot be created.
352 // 349 //
353 // Static. 350 // Static.
354 int BackendImpl::CreateBackend(const FilePath& full_path, bool force, 351 int BackendImpl::CreateBackend(const FilePath& full_path, bool force,
355 int max_bytes, net::CacheType type, 352 int max_bytes, net::CacheType type,
356 uint32 flags, base::MessageLoopProxy* thread, 353 uint32 flags, base::MessageLoopProxy* thread,
357 net::NetLog* net_log, Backend** backend, 354 Backend** backend,
358 CompletionCallback* callback) { 355 CompletionCallback* callback) {
359 DCHECK(callback); 356 DCHECK(callback);
360 CacheCreator* creator = new CacheCreator(full_path, force, max_bytes, type, 357 CacheCreator* creator = new CacheCreator(full_path, force, max_bytes, type,
361 flags, thread, net_log, backend, 358 flags, thread, backend, callback);
362 callback);
363 // This object will self-destroy when finished. 359 // This object will self-destroy when finished.
364 return creator->Run(); 360 return creator->Run();
365 } 361 }
366 362
367 int BackendImpl::Init(CompletionCallback* callback) { 363 int BackendImpl::Init(CompletionCallback* callback) {
368 background_queue_.Init(callback); 364 background_queue_.Init(callback);
369 return net::ERR_IO_PENDING; 365 return net::ERR_IO_PENDING;
370 } 366 }
371 367
372 BackendImpl::BackendImpl(const FilePath& path, 368 BackendImpl::BackendImpl(const FilePath& path,
373 base::MessageLoopProxy* cache_thread, 369 base::MessageLoopProxy* cache_thread)
374 net::NetLog* net_log)
375 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)), 370 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)),
376 path_(path), 371 path_(path),
377 block_files_(path), 372 block_files_(path),
378 mask_(0), 373 mask_(0),
379 max_size_(0), 374 max_size_(0),
380 io_delay_(0), 375 io_delay_(0),
381 cache_type_(net::DISK_CACHE), 376 cache_type_(net::DISK_CACHE),
382 uma_report_(0), 377 uma_report_(0),
383 user_flags_(0), 378 user_flags_(0),
384 init_(false), 379 init_(false),
385 restarted_(false), 380 restarted_(false),
386 unit_test_(false), 381 unit_test_(false),
387 read_only_(false), 382 read_only_(false),
388 new_eviction_(false), 383 new_eviction_(false),
389 first_timer_(true), 384 first_timer_(true),
390 throttle_requests_(false), 385 throttle_requests_(false),
391 net_log_(net_log),
392 done_(true, false), 386 done_(true, false),
393 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)), 387 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)),
394 ALLOW_THIS_IN_INITIALIZER_LIST(ptr_factory_(this)) { 388 ALLOW_THIS_IN_INITIALIZER_LIST(ptr_factory_(this)) {
395 } 389 }
396 390
397 BackendImpl::BackendImpl(const FilePath& path, 391 BackendImpl::BackendImpl(const FilePath& path,
398 uint32 mask, 392 uint32 mask,
399 base::MessageLoopProxy* cache_thread, 393 base::MessageLoopProxy* cache_thread)
400 net::NetLog* net_log)
401 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)), 394 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)),
402 path_(path), 395 path_(path),
403 block_files_(path), 396 block_files_(path),
404 mask_(mask), 397 mask_(mask),
405 max_size_(0), 398 max_size_(0),
406 io_delay_(0), 399 io_delay_(0),
407 cache_type_(net::DISK_CACHE), 400 cache_type_(net::DISK_CACHE),
408 uma_report_(0), 401 uma_report_(0),
409 user_flags_(kMask), 402 user_flags_(kMask),
410 init_(false), 403 init_(false),
411 restarted_(false), 404 restarted_(false),
412 unit_test_(false), 405 unit_test_(false),
413 read_only_(false), 406 read_only_(false),
414 new_eviction_(false), 407 new_eviction_(false),
415 first_timer_(true), 408 first_timer_(true),
416 throttle_requests_(false), 409 throttle_requests_(false),
417 net_log_(net_log),
418 done_(true, false), 410 done_(true, false),
419 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)), 411 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)),
420 ALLOW_THIS_IN_INITIALIZER_LIST(ptr_factory_(this)) { 412 ALLOW_THIS_IN_INITIALIZER_LIST(ptr_factory_(this)) {
421 } 413 }
422 414
423 BackendImpl::~BackendImpl() { 415 BackendImpl::~BackendImpl() {
424 background_queue_.WaitForPendingIO(); 416 background_queue_.WaitForPendingIO();
425 417
426 if (background_queue_.BackgroundIsCurrentThread()) { 418 if (background_queue_.BackgroundIsCurrentThread()) {
427 // Unit tests may use the same thread for everything. 419 // Unit tests may use the same thread for everything.
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 IncreaseNumRefs(); 841 IncreaseNumRefs();
850 842
851 if (!cache_entry->CreateEntry(node_address, key, hash)) { 843 if (!cache_entry->CreateEntry(node_address, key, hash)) {
852 block_files_.DeleteBlock(entry_address, false); 844 block_files_.DeleteBlock(entry_address, false);
853 block_files_.DeleteBlock(node_address, false); 845 block_files_.DeleteBlock(node_address, false);
854 LOG(ERROR) << "Create entry failed " << key.c_str(); 846 LOG(ERROR) << "Create entry failed " << key.c_str();
855 stats_.OnEvent(Stats::CREATE_ERROR); 847 stats_.OnEvent(Stats::CREATE_ERROR);
856 return NULL; 848 return NULL;
857 } 849 }
858 850
859 cache_entry->BeginLogging(net_log_, true);
860
861 // We are not failing the operation; let's add this to the map. 851 // We are not failing the operation; let's add this to the map.
862 open_entries_[entry_address.value()] = cache_entry; 852 open_entries_[entry_address.value()] = cache_entry;
863 853
864 if (parent.get()) 854 if (parent.get())
865 parent->SetNextAddress(entry_address); 855 parent->SetNextAddress(entry_address);
866 856
867 block_files_.GetFile(entry_address)->Store(cache_entry->entry()); 857 block_files_.GetFile(entry_address)->Store(cache_entry->entry());
868 block_files_.GetFile(node_address)->Store(cache_entry->rankings()); 858 block_files_.GetFile(node_address)->Store(cache_entry->rankings());
869 859
870 IncreaseNumEntries(); 860 IncreaseNumEntries();
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 return ERR_INVALID_LINKS; 1530 return ERR_INVALID_LINKS;
1541 1531
1542 if (*dirty) { 1532 if (*dirty) {
1543 Trace("Dirty entry 0x%p 0x%x", reinterpret_cast<void*>(cache_entry.get()), 1533 Trace("Dirty entry 0x%p 0x%x", reinterpret_cast<void*>(cache_entry.get()),
1544 address.value()); 1534 address.value());
1545 } else { 1535 } else {
1546 // We only add clean entries to the map. 1536 // We only add clean entries to the map.
1547 open_entries_[address.value()] = cache_entry; 1537 open_entries_[address.value()] = cache_entry;
1548 } 1538 }
1549 1539
1550 cache_entry->BeginLogging(net_log_, false);
1551 cache_entry.swap(entry); 1540 cache_entry.swap(entry);
1552 return 0; 1541 return 0;
1553 } 1542 }
1554 1543
1555 EntryImpl* BackendImpl::MatchEntry(const std::string& key, uint32 hash, 1544 EntryImpl* BackendImpl::MatchEntry(const std::string& key, uint32 hash,
1556 bool find_parent) { 1545 bool find_parent) {
1557 Addr address(data_->table[hash & mask_]); 1546 Addr address(data_->table[hash & mask_]);
1558 scoped_refptr<EntryImpl> cache_entry, parent_entry; 1547 scoped_refptr<EntryImpl> cache_entry, parent_entry;
1559 EntryImpl* tmp = NULL; 1548 EntryImpl* tmp = NULL;
1560 bool found = false; 1549 bool found = false;
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 if (total_memory > kMaxBuffersSize || total_memory <= 0) 2084 if (total_memory > kMaxBuffersSize || total_memory <= 0)
2096 total_memory = kMaxBuffersSize; 2085 total_memory = kMaxBuffersSize;
2097 2086
2098 done = true; 2087 done = true;
2099 } 2088 }
2100 2089
2101 return static_cast<int>(total_memory); 2090 return static_cast<int>(total_memory);
2102 } 2091 }
2103 2092
2104 } // namespace disk_cache 2093 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/backend_impl.h ('k') | net/disk_cache/backend_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698