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

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

Issue 14141: Disk cache: remove the hard coded list from rankings.cc... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years 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/entry_impl.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) 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/file_util.h" 7 #include "base/file_util.h"
8 #include "base/histogram.h" 8 #include "base/histogram.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 } 348 }
349 349
350 if (parent.get()) 350 if (parent.get())
351 parent->SetNextAddress(entry_address); 351 parent->SetNextAddress(entry_address);
352 352
353 block_files_.GetFile(entry_address)->Store(cache_entry->entry()); 353 block_files_.GetFile(entry_address)->Store(cache_entry->entry());
354 block_files_.GetFile(node_address)->Store(cache_entry->rankings()); 354 block_files_.GetFile(node_address)->Store(cache_entry->rankings());
355 355
356 data_->header.num_entries++; 356 data_->header.num_entries++;
357 DCHECK(data_->header.num_entries > 0); 357 DCHECK(data_->header.num_entries > 0);
358 rankings_.Insert(cache_entry->rankings(), true); 358 rankings_.Insert(cache_entry->rankings(), true, Rankings::NO_USE);
359 if (!parent.get()) 359 if (!parent.get())
360 data_->table[hash & mask_] = entry_address.value(); 360 data_->table[hash & mask_] = entry_address.value();
361 361
362 DCHECK(entry); 362 DCHECK(entry);
363 *entry = NULL; 363 *entry = NULL;
364 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry)); 364 cache_entry.swap(reinterpret_cast<EntryImpl**>(entry));
365 365
366 UMA_HISTOGRAM_TIMES(L"DiskCache.CreateTime", Time::Now() - start); 366 UMA_HISTOGRAM_TIMES(L"DiskCache.CreateTime", Time::Now() - start);
367 stats_.OnEvent(Stats::CREATE_HIT); 367 stats_.OnEvent(Stats::CREATE_HIT);
368 Trace("create entry hit "); 368 Trace("create entry hit ");
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 } 566 }
567 567
568 void BackendImpl::DeleteBlock(Addr block_address, bool deep) { 568 void BackendImpl::DeleteBlock(Addr block_address, bool deep) {
569 block_files_.DeleteBlock(block_address, deep); 569 block_files_.DeleteBlock(block_address, deep);
570 } 570 }
571 571
572 LruData* BackendImpl::GetLruData() { 572 LruData* BackendImpl::GetLruData() {
573 return &data_->header.lru; 573 return &data_->header.lru;
574 } 574 }
575 575
576 void BackendImpl::UpdateRank(CacheRankingsBlock* node, bool modified) { 576 void BackendImpl::UpdateRank(EntryImpl* entry, bool modified) {
577 if (!read_only_) 577 if (!read_only_) {
578 rankings_.UpdateRank(node, modified); 578 rankings_.UpdateRank(entry->rankings(), modified, Rankings::NO_USE);
579 }
579 } 580 }
580 581
581 void BackendImpl::RecoveredEntry(CacheRankingsBlock* rankings) { 582 void BackendImpl::RecoveredEntry(CacheRankingsBlock* rankings) {
582 Addr address(rankings->Data()->contents); 583 Addr address(rankings->Data()->contents);
583 EntryImpl* cache_entry = NULL; 584 EntryImpl* cache_entry = NULL;
584 bool dirty; 585 bool dirty;
585 if (NewEntry(address, &cache_entry, &dirty)) 586 if (NewEntry(address, &cache_entry, &dirty))
586 return; 587 return;
587 588
588 uint32 hash = cache_entry->GetHash(); 589 uint32 hash = cache_entry->GetHash();
589 cache_entry->Release(); 590 cache_entry->Release();
590 591
591 // Anything on the table means that this entry is there. 592 // Anything on the table means that this entry is there.
592 if (data_->table[hash & mask_]) 593 if (data_->table[hash & mask_])
593 return; 594 return;
594 595
595 data_->table[hash & mask_] = address.value(); 596 data_->table[hash & mask_] = address.value();
596 } 597 }
597 598
598 void BackendImpl::InternalDoomEntry(EntryImpl* entry) { 599 void BackendImpl::InternalDoomEntry(EntryImpl* entry) {
599 uint32 hash = entry->GetHash(); 600 uint32 hash = entry->GetHash();
600 std::string key = entry->GetKey(); 601 std::string key = entry->GetKey();
601 EntryImpl* parent_entry = MatchEntry(key, hash, true); 602 EntryImpl* parent_entry = MatchEntry(key, hash, true);
602 CacheAddr child(entry->GetNextAddress()); 603 CacheAddr child(entry->GetNextAddress());
603 604
604 Trace("Doom entry 0x%p", entry); 605 Trace("Doom entry 0x%p", entry);
605 606
606 rankings_.Remove(entry->rankings()); 607 rankings_.Remove(entry->rankings(), Rankings::NO_USE);
607 608
608 entry->InternalDoom(); 609 entry->InternalDoom();
609 610
610 if (parent_entry) { 611 if (parent_entry) {
611 parent_entry->SetNextAddress(Addr(child)); 612 parent_entry->SetNextAddress(Addr(child));
612 parent_entry->Release(); 613 parent_entry->Release();
613 } else { 614 } else {
614 data_->table[hash & mask_] = child; 615 data_->table[hash & mask_] = child;
615 } 616 }
616 617
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 } 965 }
965 966
966 // This is the actual implementation for OpenNextEntry and OpenPrevEntry. 967 // This is the actual implementation for OpenNextEntry and OpenPrevEntry.
967 bool BackendImpl::OpenFollowingEntry(bool forward, void** iter, 968 bool BackendImpl::OpenFollowingEntry(bool forward, void** iter,
968 Entry** next_entry) { 969 Entry** next_entry) {
969 if (disabled_) 970 if (disabled_)
970 return false; 971 return false;
971 972
972 Rankings::ScopedRankingsBlock rankings(&rankings_, 973 Rankings::ScopedRankingsBlock rankings(&rankings_,
973 reinterpret_cast<CacheRankingsBlock*>(*iter)); 974 reinterpret_cast<CacheRankingsBlock*>(*iter));
974 CacheRankingsBlock* next_block = forward ? rankings_.GetNext(rankings.get()) : 975 CacheRankingsBlock* next_block = forward ?
975 rankings_.GetPrev(rankings.get()); 976 rankings_.GetNext(rankings.get(), Rankings::NO_USE) :
977 rankings_.GetPrev(rankings.get(), Rankings::NO_USE);
976 Rankings::ScopedRankingsBlock next(&rankings_, next_block); 978 Rankings::ScopedRankingsBlock next(&rankings_, next_block);
977 *next_entry = NULL; 979 *next_entry = NULL;
978 *iter = NULL; 980 *iter = NULL;
979 if (!next.get()) 981 if (!next.get())
980 return false; 982 return false;
981 983
982 scoped_refptr<EntryImpl> entry; 984 scoped_refptr<EntryImpl> entry;
983 if (next->Data()->pointer) { 985 if (next->Data()->pointer) {
984 entry = reinterpret_cast<EntryImpl*>(next->Data()->pointer); 986 entry = reinterpret_cast<EntryImpl*>(next->Data()->pointer);
985 } else { 987 } else {
(...skipping 25 matching lines...) Expand all
1011 1013
1012 entry.swap(reinterpret_cast<EntryImpl**>(next_entry)); 1014 entry.swap(reinterpret_cast<EntryImpl**>(next_entry));
1013 *iter = next.release(); 1015 *iter = next.release();
1014 return true; 1016 return true;
1015 } 1017 }
1016 1018
1017 void BackendImpl::DestroyInvalidEntry(Addr address, EntryImpl* entry) { 1019 void BackendImpl::DestroyInvalidEntry(Addr address, EntryImpl* entry) {
1018 LOG(WARNING) << "Destroying invalid entry."; 1020 LOG(WARNING) << "Destroying invalid entry.";
1019 Trace("Destroying invalid entry 0x%p", entry); 1021 Trace("Destroying invalid entry 0x%p", entry);
1020 1022
1021 rankings_.Remove(entry->rankings()); 1023 rankings_.Remove(entry->rankings(), Rankings::NO_USE);
1022 entry->SetPointerForInvalidEntry(GetCurrentEntryId()); 1024 entry->SetPointerForInvalidEntry(GetCurrentEntryId());
1023 1025
1024 entry->InternalDoom(); 1026 entry->InternalDoom();
1025 1027
1026 data_->header.num_entries--; 1028 data_->header.num_entries--;
1027 DCHECK(data_->header.num_entries >= 0); 1029 DCHECK(data_->header.num_entries >= 0);
1028 stats_.OnEvent(Stats::INVALID_ENTRY); 1030 stats_.OnEvent(Stats::INVALID_ENTRY);
1029 } 1031 }
1030 1032
1031 void BackendImpl::TrimCache(bool empty) { 1033 void BackendImpl::TrimCache(bool empty) {
1032 Trace("*** Trim Cache ***"); 1034 Trace("*** Trim Cache ***");
1033 if (disabled_) 1035 if (disabled_)
1034 return; 1036 return;
1035 1037
1036 Time start = Time::Now(); 1038 Time start = Time::Now();
1037 Rankings::ScopedRankingsBlock node(&rankings_); 1039 Rankings::ScopedRankingsBlock node(&rankings_);
1038 Rankings::ScopedRankingsBlock next(&rankings_, rankings_.GetPrev(node.get())); 1040 Rankings::ScopedRankingsBlock next(&rankings_,
1041 rankings_.GetPrev(node.get(), Rankings::NO_USE));
1039 DCHECK(next.get()); 1042 DCHECK(next.get());
1040 int target_size = empty ? 0 : LowWaterAdjust(max_size_); 1043 int target_size = empty ? 0 : LowWaterAdjust(max_size_);
1041 int deleted = 0; 1044 int deleted = 0;
1042 while (data_->header.num_bytes > target_size && next.get()) { 1045 while (data_->header.num_bytes > target_size && next.get()) {
1043 node.reset(next.release()); 1046 node.reset(next.release());
1044 next.reset(rankings_.GetPrev(node.get())); 1047 next.reset(rankings_.GetPrev(node.get(), Rankings::NO_USE));
1045 if (!node->Data()->pointer || empty) { 1048 if (!node->Data()->pointer || empty) {
1046 // This entry is not being used by anybody. 1049 // This entry is not being used by anybody.
1047 EntryImpl* entry; 1050 EntryImpl* entry;
1048 bool dirty; 1051 bool dirty;
1049 if (NewEntry(Addr(node->Data()->contents), &entry, &dirty)) { 1052 if (NewEntry(Addr(node->Data()->contents), &entry, &dirty)) {
1050 Trace("NewEntry failed on Trim 0x%x", node->address().value()); 1053 Trace("NewEntry failed on Trim 0x%x", node->address().value());
1051 continue; 1054 continue;
1052 } 1055 }
1053 1056
1054 if (node->Data()->pointer) { 1057 if (node->Data()->pointer) {
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 1207
1205 return num_dirty; 1208 return num_dirty;
1206 } 1209 }
1207 1210
1208 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) { 1211 bool BackendImpl::CheckEntry(EntryImpl* cache_entry) {
1209 RankingsNode* rankings = cache_entry->rankings()->Data(); 1212 RankingsNode* rankings = cache_entry->rankings()->Data();
1210 return !rankings->pointer; 1213 return !rankings->pointer;
1211 } 1214 }
1212 1215
1213 } // namespace disk_cache 1216 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/backend_impl.h ('k') | net/disk_cache/entry_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698