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

Side by Side Diff: net/disk_cache/rankings.h

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/entry_impl.cc ('k') | net/disk_cache/rankings.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 // See net/disk_cache/disk_cache.h for the public interface. 5 // See net/disk_cache/disk_cache.h for the public interface.
6 6
7 #ifndef NET_DISK_CACHE_RANKINGS_H_ 7 #ifndef NET_DISK_CACHE_RANKINGS_H_
8 #define NET_DISK_CACHE_RANKINGS_H_ 8 #define NET_DISK_CACHE_RANKINGS_H_
9 9
10 #include <list> 10 #include <list>
(...skipping 30 matching lines...) Expand all
41 REMOVE_TAIL_3, 41 REMOVE_TAIL_3,
42 REMOVE_LOAD_1, 42 REMOVE_LOAD_1,
43 REMOVE_LOAD_2, 43 REMOVE_LOAD_2,
44 REMOVE_LOAD_3, 44 REMOVE_LOAD_3,
45 MAX_CRASH 45 MAX_CRASH
46 }; 46 };
47 47
48 // This class handles the ranking information for the cache. 48 // This class handles the ranking information for the cache.
49 class Rankings { 49 class Rankings {
50 public: 50 public:
51 // Possible lists of entries.
52 enum List {
53 NO_USE = 0, // List of entries that have not been reused.
54 LOW_USE, // List of entries with low reuse.
55 HIGH_USE, // List of entries with high reuse.
56 DELETED, // List of recently deleted or doomed entries.
57 LAST_ELEMENT
58 };
59
51 // This class provides a specialized version of scoped_ptr, that calls 60 // This class provides a specialized version of scoped_ptr, that calls
52 // Rankings whenever a CacheRankingsBlock is deleted, to keep track of cache 61 // Rankings whenever a CacheRankingsBlock is deleted, to keep track of cache
53 // iterators that may go stale. 62 // iterators that may go stale.
54 class ScopedRankingsBlock : public scoped_ptr<CacheRankingsBlock> { 63 class ScopedRankingsBlock : public scoped_ptr<CacheRankingsBlock> {
55 public: 64 public:
56 explicit ScopedRankingsBlock(Rankings* rankings) : rankings_(rankings) {} 65 explicit ScopedRankingsBlock(Rankings* rankings) : rankings_(rankings) {}
57 ScopedRankingsBlock(Rankings* rankings, CacheRankingsBlock* node) 66 ScopedRankingsBlock(Rankings* rankings, CacheRankingsBlock* node)
58 : scoped_ptr<CacheRankingsBlock>(node), rankings_(rankings) {} 67 : scoped_ptr<CacheRankingsBlock>(node), rankings_(rankings) {}
59 68
60 ~ScopedRankingsBlock() { 69 ~ScopedRankingsBlock() {
61 rankings_->FreeRankingsBlock(get()); 70 rankings_->FreeRankingsBlock(get());
62 } 71 }
63 72
64 // scoped_ptr::reset will delete the object. 73 // scoped_ptr::reset will delete the object.
65 void reset(CacheRankingsBlock* p = NULL) { 74 void reset(CacheRankingsBlock* p = NULL) {
66 if (p != get()) 75 if (p != get())
67 rankings_->FreeRankingsBlock(get()); 76 rankings_->FreeRankingsBlock(get());
68 scoped_ptr<CacheRankingsBlock>::reset(p); 77 scoped_ptr<CacheRankingsBlock>::reset(p);
69 } 78 }
70 79
71 private: 80 private:
72 Rankings* rankings_; 81 Rankings* rankings_;
73 DISALLOW_EVIL_CONSTRUCTORS(ScopedRankingsBlock); 82 DISALLOW_EVIL_CONSTRUCTORS(ScopedRankingsBlock);
74 }; 83 };
75 84
76 Rankings() 85 Rankings() : init_(false) {}
77 : init_(false), head_(0), tail_(0) {}
78 ~Rankings() {} 86 ~Rankings() {}
79 87
80 bool Init(BackendImpl* backend); 88 bool Init(BackendImpl* backend);
81 89
82 // Restores original state, leaving the object ready for initialization. 90 // Restores original state, leaving the object ready for initialization.
83 void Reset(); 91 void Reset();
84 92
85 // Inserts a given entry at the head of the queue. 93 // Inserts a given entry at the head of the queue.
86 void Insert(CacheRankingsBlock* node, bool modified); 94 void Insert(CacheRankingsBlock* node, bool modified, List list);
87 95
88 // Removes a given entry from the LRU list. 96 // Removes a given entry from the LRU list.
89 void Remove(CacheRankingsBlock* node); 97 void Remove(CacheRankingsBlock* node, List list);
90 98
91 // Moves a given entry to the head. 99 // Moves a given entry to the head.
92 void UpdateRank(CacheRankingsBlock* node, bool modified); 100 void UpdateRank(CacheRankingsBlock* node, bool modified, List list);
93 101
94 // Iterates through the list. 102 // Iterates through the list.
95 CacheRankingsBlock* GetNext(CacheRankingsBlock* node); 103 CacheRankingsBlock* GetNext(CacheRankingsBlock* node, List list);
96 CacheRankingsBlock* GetPrev(CacheRankingsBlock* node); 104 CacheRankingsBlock* GetPrev(CacheRankingsBlock* node, List list);
97 void FreeRankingsBlock(CacheRankingsBlock* node); 105 void FreeRankingsBlock(CacheRankingsBlock* node);
98 106
99 // Peforms a simple self-check of the list, and returns the number of items 107 // Peforms a simple self-check of the lists, and returns the number of items
100 // or an error code (negative value). 108 // or an error code (negative value).
101 int SelfCheck(); 109 int SelfCheck();
102 110
103 // Returns false if the entry is clearly invalid. from_list is true if the 111 // Returns false if the entry is clearly invalid. from_list is true if the
104 // node comes from the LRU list. 112 // node comes from the LRU list.
105 bool SanityCheck(CacheRankingsBlock* node, bool from_list); 113 bool SanityCheck(CacheRankingsBlock* node, bool from_list);
106 114
107 private: 115 private:
108 typedef std::pair<CacheAddr, CacheRankingsBlock*> IteratorPair; 116 typedef std::pair<CacheAddr, CacheRankingsBlock*> IteratorPair;
109 typedef std::list<IteratorPair> IteratorList; 117 typedef std::list<IteratorPair> IteratorList;
110 118
111 Addr ReadHead(); 119 void ReadHeads();
112 Addr ReadTail(); 120 void ReadTails();
113 void WriteHead(); 121 void WriteHead(List list);
114 void WriteTail(); 122 void WriteTail(List list);
115 123
116 // Gets the rankings information for a given rankings node. 124 // Gets the rankings information for a given rankings node.
117 bool GetRanking(CacheRankingsBlock* rankings); 125 bool GetRanking(CacheRankingsBlock* rankings);
118 126
119 // Finishes a list modification after a crash. 127 // Finishes a list modification after a crash.
120 void CompleteTransaction(); 128 void CompleteTransaction();
121 void FinishInsert(CacheRankingsBlock* rankings); 129 void FinishInsert(CacheRankingsBlock* rankings);
122 void RevertRemove(CacheRankingsBlock* rankings); 130 void RevertRemove(CacheRankingsBlock* rankings);
123 131
124 // Returns false if this entry will not be recognized as dirty (called during 132 // Returns false if this entry will not be recognized as dirty (called during
125 // selfcheck). 133 // selfcheck).
126 bool CheckEntry(CacheRankingsBlock* rankings); 134 bool CheckEntry(CacheRankingsBlock* rankings);
127 135
128 // Returns false if node is not properly linked. 136 // Returns false if node is not properly linked.
129 bool CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev, 137 bool CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev,
130 CacheRankingsBlock* next); 138 CacheRankingsBlock* next, List list);
131 139
132 // Checks the links between two consecutive nodes. 140 // Checks the links between two consecutive nodes.
133 bool CheckSingleLink(CacheRankingsBlock* prev, CacheRankingsBlock* next); 141 bool CheckSingleLink(CacheRankingsBlock* prev, CacheRankingsBlock* next);
134 142
143 // Peforms a simple check of the list, and returns the number of items or an
144 // error code (negative value).
145 int CheckList(List list);
146
147 // Returns true if addr is the head or tail of any list.
148 bool IsHead(CacheAddr addr);
149 bool IsTail(CacheAddr addr);
150
135 // Controls tracking of nodes used for enumerations. 151 // Controls tracking of nodes used for enumerations.
136 void TrackRankingsBlock(CacheRankingsBlock* node, bool start_tracking); 152 void TrackRankingsBlock(CacheRankingsBlock* node, bool start_tracking);
137 153
138 // Updates the iterators whenever node is being changed. 154 // Updates the iterators whenever node is being changed.
139 void UpdateIterators(CacheRankingsBlock* node); 155 void UpdateIterators(CacheRankingsBlock* node);
140 156
141 bool init_; 157 bool init_;
142 Addr head_; 158 Addr heads_[LAST_ELEMENT];
143 Addr tail_; 159 Addr tails_[LAST_ELEMENT];
144 BackendImpl* backend_; 160 BackendImpl* backend_;
145 LruData* control_data_; // Data related to the LRU lists. 161 LruData* control_data_; // Data related to the LRU lists.
146 IteratorList iterators_; 162 IteratorList iterators_;
147 163
148 DISALLOW_COPY_AND_ASSIGN(Rankings); 164 DISALLOW_COPY_AND_ASSIGN(Rankings);
149 }; 165 };
150 166
151 } // namespace disk_cache 167 } // namespace disk_cache
152 168
153 #endif // NET_DISK_CACHE_RANKINGS_H_ 169 #endif // NET_DISK_CACHE_RANKINGS_H_
154 170
OLDNEW
« no previous file with comments | « net/disk_cache/entry_impl.cc ('k') | net/disk_cache/rankings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698