Index: net/disk_cache/rankings.h |
=================================================================== |
--- net/disk_cache/rankings.h (revision 6843) |
+++ net/disk_cache/rankings.h (working copy) |
@@ -48,6 +48,15 @@ |
// This class handles the ranking information for the cache. |
class Rankings { |
public: |
+ // Possible lists of entries. |
+ enum List { |
+ NO_USE = 0, // List of entries that have not been reused. |
+ LOW_USE, // List of entries with low reuse. |
+ HIGH_USE, // List of entries with high reuse. |
+ DELETED, // List of recently deleted or doomed entries. |
+ LAST_ELEMENT |
+ }; |
+ |
// This class provides a specialized version of scoped_ptr, that calls |
// Rankings whenever a CacheRankingsBlock is deleted, to keep track of cache |
// iterators that may go stale. |
@@ -73,8 +82,7 @@ |
DISALLOW_EVIL_CONSTRUCTORS(ScopedRankingsBlock); |
}; |
- Rankings() |
- : init_(false), head_(0), tail_(0) {} |
+ Rankings() : init_(false) {} |
~Rankings() {} |
bool Init(BackendImpl* backend); |
@@ -83,20 +91,20 @@ |
void Reset(); |
// Inserts a given entry at the head of the queue. |
- void Insert(CacheRankingsBlock* node, bool modified); |
+ void Insert(CacheRankingsBlock* node, bool modified, List list); |
// Removes a given entry from the LRU list. |
- void Remove(CacheRankingsBlock* node); |
+ void Remove(CacheRankingsBlock* node, List list); |
// Moves a given entry to the head. |
- void UpdateRank(CacheRankingsBlock* node, bool modified); |
+ void UpdateRank(CacheRankingsBlock* node, bool modified, List list); |
// Iterates through the list. |
- CacheRankingsBlock* GetNext(CacheRankingsBlock* node); |
- CacheRankingsBlock* GetPrev(CacheRankingsBlock* node); |
+ CacheRankingsBlock* GetNext(CacheRankingsBlock* node, List list); |
+ CacheRankingsBlock* GetPrev(CacheRankingsBlock* node, List list); |
void FreeRankingsBlock(CacheRankingsBlock* node); |
- // Peforms a simple self-check of the list, and returns the number of items |
+ // Peforms a simple self-check of the lists, and returns the number of items |
// or an error code (negative value). |
int SelfCheck(); |
@@ -108,10 +116,10 @@ |
typedef std::pair<CacheAddr, CacheRankingsBlock*> IteratorPair; |
typedef std::list<IteratorPair> IteratorList; |
- Addr ReadHead(); |
- Addr ReadTail(); |
- void WriteHead(); |
- void WriteTail(); |
+ void ReadHeads(); |
+ void ReadTails(); |
+ void WriteHead(List list); |
+ void WriteTail(List list); |
// Gets the rankings information for a given rankings node. |
bool GetRanking(CacheRankingsBlock* rankings); |
@@ -127,11 +135,19 @@ |
// Returns false if node is not properly linked. |
bool CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev, |
- CacheRankingsBlock* next); |
+ CacheRankingsBlock* next, List list); |
// Checks the links between two consecutive nodes. |
bool CheckSingleLink(CacheRankingsBlock* prev, CacheRankingsBlock* next); |
+ // Peforms a simple check of the list, and returns the number of items or an |
+ // error code (negative value). |
+ int CheckList(List list); |
+ |
+ // Returns true if addr is the head or tail of any list. |
+ bool IsHead(CacheAddr addr); |
+ bool IsTail(CacheAddr addr); |
+ |
// Controls tracking of nodes used for enumerations. |
void TrackRankingsBlock(CacheRankingsBlock* node, bool start_tracking); |
@@ -139,8 +155,8 @@ |
void UpdateIterators(CacheRankingsBlock* node); |
bool init_; |
- Addr head_; |
- Addr tail_; |
+ Addr heads_[LAST_ELEMENT]; |
+ Addr tails_[LAST_ELEMENT]; |
BackendImpl* backend_; |
LruData* control_data_; // Data related to the LRU lists. |
IteratorList iterators_; |