| 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_;
|
|
|