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

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

Issue 547513002: Remove disk_cache::BackendImpl::OpenPrevEntry() and all users. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: narrower Created 6 years, 3 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/blockfile/backend_impl.h" 5 #include "net/disk_cache/blockfile/backend_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 321 }
322 block_files_.CloseFiles(); 322 block_files_.CloseFiles();
323 FlushIndex(); 323 FlushIndex();
324 index_ = NULL; 324 index_ = NULL;
325 ptr_factory_.InvalidateWeakPtrs(); 325 ptr_factory_.InvalidateWeakPtrs();
326 done_.Signal(); 326 done_.Signal();
327 } 327 }
328 328
329 // ------------------------------------------------------------------------ 329 // ------------------------------------------------------------------------
330 330
331 int BackendImpl::OpenPrevEntry(void** iter, Entry** prev_entry,
332 const CompletionCallback& callback) {
333 DCHECK(!callback.is_null());
334 background_queue_.OpenPrevEntry(iter, prev_entry, callback);
335 return net::ERR_IO_PENDING;
336 }
337
338 int BackendImpl::SyncOpenEntry(const std::string& key, Entry** entry) { 331 int BackendImpl::SyncOpenEntry(const std::string& key, Entry** entry) {
339 DCHECK(entry); 332 DCHECK(entry);
340 *entry = OpenEntryImpl(key); 333 *entry = OpenEntryImpl(key);
341 return (*entry) ? net::OK : net::ERR_FAILED; 334 return (*entry) ? net::OK : net::ERR_FAILED;
342 } 335 }
343 336
344 int BackendImpl::SyncCreateEntry(const std::string& key, Entry** entry) { 337 int BackendImpl::SyncCreateEntry(const std::string& key, Entry** entry) {
345 DCHECK(entry); 338 DCHECK(entry);
346 *entry = CreateEntryImpl(key); 339 *entry = CreateEntryImpl(key);
347 return (*entry) ? net::OK : net::ERR_FAILED; 340 return (*entry) ? net::OK : net::ERR_FAILED;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 entry->Release(); 430 entry->Release();
438 SyncEndEnumeration(iter); // Dooming the entry invalidates the iterator. 431 SyncEndEnumeration(iter); // Dooming the entry invalidates the iterator.
439 } 432 }
440 } 433 }
441 434
442 int BackendImpl::SyncOpenNextEntry(void** iter, Entry** next_entry) { 435 int BackendImpl::SyncOpenNextEntry(void** iter, Entry** next_entry) {
443 *next_entry = OpenNextEntryImpl(iter); 436 *next_entry = OpenNextEntryImpl(iter);
444 return (*next_entry) ? net::OK : net::ERR_FAILED; 437 return (*next_entry) ? net::OK : net::ERR_FAILED;
445 } 438 }
446 439
447 int BackendImpl::SyncOpenPrevEntry(void** iter, Entry** prev_entry) {
448 *prev_entry = OpenPrevEntryImpl(iter);
449 return (*prev_entry) ? net::OK : net::ERR_FAILED;
450 }
451
452 void BackendImpl::SyncEndEnumeration(void* iter) { 440 void BackendImpl::SyncEndEnumeration(void* iter) {
453 scoped_ptr<Rankings::Iterator> iterator( 441 scoped_ptr<Rankings::Iterator> iterator(
454 reinterpret_cast<Rankings::Iterator*>(iter)); 442 reinterpret_cast<Rankings::Iterator*>(iter));
455 } 443 }
456 444
457 void BackendImpl::SyncOnExternalCacheHit(const std::string& key) { 445 void BackendImpl::SyncOnExternalCacheHit(const std::string& key) {
458 if (disabled_) 446 if (disabled_)
459 return; 447 return;
460 448
461 uint32 hash = base::Hash(key); 449 uint32 hash = base::Hash(key);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 CACHE_UMA(AGE_MS, "CreateTime", 0, start); 598 CACHE_UMA(AGE_MS, "CreateTime", 0, start);
611 stats_.OnEvent(Stats::CREATE_HIT); 599 stats_.OnEvent(Stats::CREATE_HIT);
612 SIMPLE_STATS_COUNTER("disk_cache.miss"); 600 SIMPLE_STATS_COUNTER("disk_cache.miss");
613 Trace("create entry hit "); 601 Trace("create entry hit ");
614 FlushIndex(); 602 FlushIndex();
615 cache_entry->AddRef(); 603 cache_entry->AddRef();
616 return cache_entry.get(); 604 return cache_entry.get();
617 } 605 }
618 606
619 EntryImpl* BackendImpl::OpenNextEntryImpl(void** iter) { 607 EntryImpl* BackendImpl::OpenNextEntryImpl(void** iter) {
620 return OpenFollowingEntry(true, iter); 608 if (disabled_)
621 } 609 return NULL;
622 610
623 EntryImpl* BackendImpl::OpenPrevEntryImpl(void** iter) { 611 DCHECK(iter);
624 return OpenFollowingEntry(false, iter); 612
613 const int kListsToSearch = 3;
614 scoped_refptr<EntryImpl> entries[kListsToSearch];
615 scoped_ptr<Rankings::Iterator> iterator(
616 reinterpret_cast<Rankings::Iterator*>(*iter));
617 *iter = NULL;
618
619 if (!iterator.get()) {
620 iterator.reset(new Rankings::Iterator(&rankings_));
621 bool ret = false;
622
623 // Get an entry from each list.
624 for (int i = 0; i < kListsToSearch; i++) {
625 EntryImpl* temp = NULL;
626 ret |= OpenFollowingEntryFromList(static_cast<Rankings::List>(i),
627 &iterator->nodes[i], &temp);
628 entries[i].swap(&temp); // The entry was already addref'd.
629 }
630 if (!ret)
631 return NULL;
632 } else {
633 // Get the next entry from the last list, and the actual entries for the
634 // elements on the other lists.
635 for (int i = 0; i < kListsToSearch; i++) {
636 EntryImpl* temp = NULL;
637 if (iterator->list == i) {
638 OpenFollowingEntryFromList(
639 iterator->list, &iterator->nodes[i], &temp);
640 } else {
641 temp = GetEnumeratedEntry(iterator->nodes[i],
642 static_cast<Rankings::List>(i));
643 }
644
645 entries[i].swap(&temp); // The entry was already addref'd.
646 }
647 }
648
649 int newest = -1;
650 int oldest = -1;
651 Time access_times[kListsToSearch];
652 for (int i = 0; i < kListsToSearch; i++) {
653 if (entries[i].get()) {
654 access_times[i] = entries[i]->GetLastUsed();
655 if (newest < 0) {
656 DCHECK_LT(oldest, 0);
657 newest = oldest = i;
658 continue;
659 }
660 if (access_times[i] > access_times[newest])
661 newest = i;
662 if (access_times[i] < access_times[oldest])
663 oldest = i;
664 }
665 }
666
667 if (newest < 0 || oldest < 0)
668 return NULL;
669
670 EntryImpl* next_entry;
671 next_entry = entries[newest].get();
672 iterator->list = static_cast<Rankings::List>(newest);
673 *iter = iterator.release();
674 next_entry->AddRef();
675 return next_entry;
625 } 676 }
626 677
627 bool BackendImpl::SetMaxSize(int max_bytes) { 678 bool BackendImpl::SetMaxSize(int max_bytes) {
628 COMPILE_ASSERT(sizeof(max_bytes) == sizeof(max_size_), unsupported_int_model); 679 COMPILE_ASSERT(sizeof(max_bytes) == sizeof(max_size_), unsupported_int_model);
629 if (max_bytes < 0) 680 if (max_bytes < 0)
630 return false; 681 return false;
631 682
632 // Zero size means use the default. 683 // Zero size means use the default.
633 if (!max_bytes) 684 if (!max_bytes)
634 return true; 685 return true;
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 } 1663 }
1613 1664
1614 if (cache_entry.get() && (find_parent || !found)) 1665 if (cache_entry.get() && (find_parent || !found))
1615 cache_entry = NULL; 1666 cache_entry = NULL;
1616 1667
1617 find_parent ? parent_entry.swap(&tmp) : cache_entry.swap(&tmp); 1668 find_parent ? parent_entry.swap(&tmp) : cache_entry.swap(&tmp);
1618 FlushIndex(); 1669 FlushIndex();
1619 return tmp; 1670 return tmp;
1620 } 1671 }
1621 1672
1622 // This is the actual implementation for OpenNextEntry and OpenPrevEntry. 1673 bool BackendImpl::OpenFollowingEntryFromList(Rankings::List list,
1623 EntryImpl* BackendImpl::OpenFollowingEntry(bool forward, void** iter) {
1624 if (disabled_)
1625 return NULL;
1626
1627 DCHECK(iter);
1628
1629 const int kListsToSearch = 3;
1630 scoped_refptr<EntryImpl> entries[kListsToSearch];
1631 scoped_ptr<Rankings::Iterator> iterator(
1632 reinterpret_cast<Rankings::Iterator*>(*iter));
1633 *iter = NULL;
1634
1635 if (!iterator.get()) {
1636 iterator.reset(new Rankings::Iterator(&rankings_));
1637 bool ret = false;
1638
1639 // Get an entry from each list.
1640 for (int i = 0; i < kListsToSearch; i++) {
1641 EntryImpl* temp = NULL;
1642 ret |= OpenFollowingEntryFromList(forward, static_cast<Rankings::List>(i),
1643 &iterator->nodes[i], &temp);
1644 entries[i].swap(&temp); // The entry was already addref'd.
1645 }
1646 if (!ret)
1647 return NULL;
1648 } else {
1649 // Get the next entry from the last list, and the actual entries for the
1650 // elements on the other lists.
1651 for (int i = 0; i < kListsToSearch; i++) {
1652 EntryImpl* temp = NULL;
1653 if (iterator->list == i) {
1654 OpenFollowingEntryFromList(forward, iterator->list,
1655 &iterator->nodes[i], &temp);
1656 } else {
1657 temp = GetEnumeratedEntry(iterator->nodes[i],
1658 static_cast<Rankings::List>(i));
1659 }
1660
1661 entries[i].swap(&temp); // The entry was already addref'd.
1662 }
1663 }
1664
1665 int newest = -1;
1666 int oldest = -1;
1667 Time access_times[kListsToSearch];
1668 for (int i = 0; i < kListsToSearch; i++) {
1669 if (entries[i].get()) {
1670 access_times[i] = entries[i]->GetLastUsed();
1671 if (newest < 0) {
1672 DCHECK_LT(oldest, 0);
1673 newest = oldest = i;
1674 continue;
1675 }
1676 if (access_times[i] > access_times[newest])
1677 newest = i;
1678 if (access_times[i] < access_times[oldest])
1679 oldest = i;
1680 }
1681 }
1682
1683 if (newest < 0 || oldest < 0)
1684 return NULL;
1685
1686 EntryImpl* next_entry;
1687 if (forward) {
1688 next_entry = entries[newest].get();
1689 iterator->list = static_cast<Rankings::List>(newest);
1690 } else {
1691 next_entry = entries[oldest].get();
1692 iterator->list = static_cast<Rankings::List>(oldest);
1693 }
1694
1695 *iter = iterator.release();
1696 next_entry->AddRef();
1697 return next_entry;
1698 }
1699
1700 bool BackendImpl::OpenFollowingEntryFromList(bool forward, Rankings::List list,
1701 CacheRankingsBlock** from_entry, 1674 CacheRankingsBlock** from_entry,
1702 EntryImpl** next_entry) { 1675 EntryImpl** next_entry) {
1703 if (disabled_) 1676 if (disabled_)
1704 return false; 1677 return false;
1705 1678
1706 if (!new_eviction_ && Rankings::NO_USE != list) 1679 if (!new_eviction_ && Rankings::NO_USE != list)
1707 return false; 1680 return false;
1708 1681
1709 Rankings::ScopedRankingsBlock rankings(&rankings_, *from_entry); 1682 Rankings::ScopedRankingsBlock rankings(&rankings_, *from_entry);
1710 CacheRankingsBlock* next_block = forward ? 1683 CacheRankingsBlock* next_block = rankings_.GetNext(rankings.get(), list);
1711 rankings_.GetNext(rankings.get(), list) :
1712 rankings_.GetPrev(rankings.get(), list);
1713 Rankings::ScopedRankingsBlock next(&rankings_, next_block); 1684 Rankings::ScopedRankingsBlock next(&rankings_, next_block);
1714 *from_entry = NULL; 1685 *from_entry = NULL;
1715 1686
1716 *next_entry = GetEnumeratedEntry(next.get(), list); 1687 *next_entry = GetEnumeratedEntry(next.get(), list);
1717 if (!*next_entry) 1688 if (!*next_entry)
1718 return false; 1689 return false;
1719 1690
1720 *from_entry = next.release(); 1691 *from_entry = next.release();
1721 return true; 1692 return true;
1722 } 1693 }
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 if (total_memory > kMaxBuffersSize || total_memory <= 0) 2066 if (total_memory > kMaxBuffersSize || total_memory <= 0)
2096 total_memory = kMaxBuffersSize; 2067 total_memory = kMaxBuffersSize;
2097 2068
2098 done = true; 2069 done = true;
2099 } 2070 }
2100 2071
2101 return static_cast<int>(total_memory); 2072 return static_cast<int>(total_memory);
2102 } 2073 }
2103 2074
2104 } // namespace disk_cache 2075 } // namespace disk_cache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698