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

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

Issue 355028: Disk Cache: New interface that enables asynchronous completion... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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/disk_cache.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/field_trial.h" 7 #include "base/field_trial.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/histogram.h" 10 #include "base/histogram.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/rand_util.h" 12 #include "base/rand_util.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/sys_info.h" 14 #include "base/sys_info.h"
15 #include "base/timer.h" 15 #include "base/timer.h"
16 #include "base/worker_pool.h" 16 #include "base/worker_pool.h"
17 #include "net/base/net_errors.h"
17 #include "net/disk_cache/cache_util.h" 18 #include "net/disk_cache/cache_util.h"
18 #include "net/disk_cache/entry_impl.h" 19 #include "net/disk_cache/entry_impl.h"
19 #include "net/disk_cache/errors.h" 20 #include "net/disk_cache/errors.h"
20 #include "net/disk_cache/hash.h" 21 #include "net/disk_cache/hash.h"
21 #include "net/disk_cache/file.h" 22 #include "net/disk_cache/file.h"
22 23
23 // This has to be defined before including histogram_macros.h from this file. 24 // This has to be defined before including histogram_macros.h from this file.
24 #define NET_DISK_CACHE_BACKEND_IMPL_CC_ 25 #define NET_DISK_CACHE_BACKEND_IMPL_CC_
25 #include "net/disk_cache/histogram_macros.h" 26 #include "net/disk_cache/histogram_macros.h"
26 27
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 373
373 eviction_.OnOpenEntry(cache_entry); 374 eviction_.OnOpenEntry(cache_entry);
374 DCHECK(entry); 375 DCHECK(entry);
375 *entry = cache_entry; 376 *entry = cache_entry;
376 377
377 CACHE_UMA(AGE_MS, "OpenTime", GetSizeGroup(), start); 378 CACHE_UMA(AGE_MS, "OpenTime", GetSizeGroup(), start);
378 stats_.OnEvent(Stats::OPEN_HIT); 379 stats_.OnEvent(Stats::OPEN_HIT);
379 return true; 380 return true;
380 } 381 }
381 382
383 int BackendImpl::OpenEntry(const std::string& key, Entry** entry,
384 CompletionCallback* callback) {
385 if (OpenEntry(key, entry))
386 return net::OK;
387
388 return net::ERR_FAILED;
389 }
390
382 bool BackendImpl::CreateEntry(const std::string& key, Entry** entry) { 391 bool BackendImpl::CreateEntry(const std::string& key, Entry** entry) {
383 if (disabled_ || key.empty()) 392 if (disabled_ || key.empty())
384 return false; 393 return false;
385 394
386 DCHECK(entry); 395 DCHECK(entry);
387 *entry = NULL; 396 *entry = NULL;
388 397
389 Time start = Time::Now(); 398 Time start = Time::Now();
390 uint32 hash = Hash(key); 399 uint32 hash = Hash(key);
391 400
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 data_->table[hash & mask_] = entry_address.value(); 463 data_->table[hash & mask_] = entry_address.value();
455 464
456 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry)); 465 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry));
457 466
458 CACHE_UMA(AGE_MS, "CreateTime", GetSizeGroup(), start); 467 CACHE_UMA(AGE_MS, "CreateTime", GetSizeGroup(), start);
459 stats_.OnEvent(Stats::CREATE_HIT); 468 stats_.OnEvent(Stats::CREATE_HIT);
460 Trace("create entry hit "); 469 Trace("create entry hit ");
461 return true; 470 return true;
462 } 471 }
463 472
473 int BackendImpl::CreateEntry(const std::string& key, Entry** entry,
474 CompletionCallback* callback) {
475 if (CreateEntry(key, entry))
476 return net::OK;
477
478 return net::ERR_FAILED;
479 }
480
464 bool BackendImpl::DoomEntry(const std::string& key) { 481 bool BackendImpl::DoomEntry(const std::string& key) {
465 if (disabled_) 482 if (disabled_)
466 return false; 483 return false;
467 484
468 Entry* entry; 485 Entry* entry;
469 if (!OpenEntry(key, &entry)) 486 if (!OpenEntry(key, &entry))
470 return false; 487 return false;
471 488
472 // Note that you'd think you could just pass &entry_impl to OpenEntry, 489 // Note that you'd think you could just pass &entry_impl to OpenEntry,
473 // but that triggers strict aliasing problems with gcc. 490 // but that triggers strict aliasing problems with gcc.
(...skipping 11 matching lines...) Expand all
485 } else { 502 } else {
486 if (disabled_) 503 if (disabled_)
487 return false; 504 return false;
488 505
489 eviction_.TrimCache(true); 506 eviction_.TrimCache(true);
490 stats_.OnEvent(Stats::DOOM_CACHE); 507 stats_.OnEvent(Stats::DOOM_CACHE);
491 return true; 508 return true;
492 } 509 }
493 } 510 }
494 511
512 int BackendImpl::DoomAllEntries(CompletionCallback* callback) {
513 if (DoomAllEntries())
514 return net::OK;
515
516 return net::ERR_FAILED;
517 }
518
495 bool BackendImpl::DoomEntriesBetween(const Time initial_time, 519 bool BackendImpl::DoomEntriesBetween(const Time initial_time,
496 const Time end_time) { 520 const Time end_time) {
497 if (end_time.is_null()) 521 if (end_time.is_null())
498 return DoomEntriesSince(initial_time); 522 return DoomEntriesSince(initial_time);
499 523
500 DCHECK(end_time >= initial_time); 524 DCHECK(end_time >= initial_time);
501 525
502 if (disabled_) 526 if (disabled_)
503 return false; 527 return false;
504 528
(...skipping 16 matching lines...) Expand all
521 next = NULL; 545 next = NULL;
522 EndEnumeration(&iter); 546 EndEnumeration(&iter);
523 } 547 }
524 548
525 node->Close(); 549 node->Close();
526 } 550 }
527 551
528 return true; 552 return true;
529 } 553 }
530 554
555 int BackendImpl::DoomEntriesBetween(const base::Time initial_time,
556 const base::Time end_time,
557 CompletionCallback* callback) {
558 if (DoomEntriesBetween(initial_time, end_time))
559 return net::OK;
560
561 return net::ERR_FAILED;
562 }
563
531 // We use OpenNextEntry to retrieve elements from the cache, until we get 564 // We use OpenNextEntry to retrieve elements from the cache, until we get
532 // entries that are too old. 565 // entries that are too old.
533 bool BackendImpl::DoomEntriesSince(const Time initial_time) { 566 bool BackendImpl::DoomEntriesSince(const Time initial_time) {
534 if (disabled_) 567 if (disabled_)
535 return false; 568 return false;
536 569
537 for (;;) { 570 for (;;) {
538 Entry* entry; 571 Entry* entry;
539 void* iter = NULL; 572 void* iter = NULL;
540 if (!OpenNextEntry(&iter, &entry)) 573 if (!OpenNextEntry(&iter, &entry))
541 return true; 574 return true;
542 575
543 if (initial_time > entry->GetLastUsed()) { 576 if (initial_time > entry->GetLastUsed()) {
544 entry->Close(); 577 entry->Close();
545 EndEnumeration(&iter); 578 EndEnumeration(&iter);
546 return true; 579 return true;
547 } 580 }
548 581
549 entry->Doom(); 582 entry->Doom();
550 entry->Close(); 583 entry->Close();
551 EndEnumeration(&iter); // Dooming the entry invalidates the iterator. 584 EndEnumeration(&iter); // Dooming the entry invalidates the iterator.
552 } 585 }
553 } 586 }
554 587
588 int BackendImpl::DoomEntriesSince(const base::Time initial_time,
589 CompletionCallback* callback) {
590 if (DoomEntriesSince(initial_time))
591 return net::OK;
592
593 return net::ERR_FAILED;
594 }
595
555 bool BackendImpl::OpenNextEntry(void** iter, Entry** next_entry) { 596 bool BackendImpl::OpenNextEntry(void** iter, Entry** next_entry) {
556 return OpenFollowingEntry(true, iter, next_entry); 597 return OpenFollowingEntry(true, iter, next_entry);
557 } 598 }
558 599
600 int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
601 CompletionCallback* callback) {
602 if (OpenNextEntry(iter, next_entry))
603 return net::OK;
604
605 return net::ERR_FAILED;
606 }
607
559 void BackendImpl::EndEnumeration(void** iter) { 608 void BackendImpl::EndEnumeration(void** iter) {
560 scoped_ptr<Rankings::Iterator> iterator( 609 scoped_ptr<Rankings::Iterator> iterator(
561 reinterpret_cast<Rankings::Iterator*>(*iter)); 610 reinterpret_cast<Rankings::Iterator*>(*iter));
562 *iter = NULL; 611 *iter = NULL;
563 } 612 }
564 613
565 void BackendImpl::GetStats(StatsItems* stats) { 614 void BackendImpl::GetStats(StatsItems* stats) {
566 if (disabled_) 615 if (disabled_)
567 return; 616 return;
568 617
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 1667
1619 return num_dirty; 1668 return num_dirty;
1620 } 1669 }
1621 1670
1622 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) { 1671 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) {
1623 RankingsNode* rankings = cache_entry->rankings()->Data(); 1672 RankingsNode* rankings = cache_entry->rankings()->Data();
1624 return !rankings->dummy; 1673 return !rankings->dummy;
1625 } 1674 }
1626 1675
1627 } // namespace disk_cache 1676 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/backend_impl.h ('k') | net/disk_cache/disk_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698