OLD | NEW |
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 of the cache. | 5 // See net/disk_cache/disk_cache.h for the public interface of the cache. |
6 | 6 |
7 #ifndef NET_DISK_CACHE_BACKEND_IMPL_H__ | 7 #ifndef NET_DISK_CACHE_BACKEND_IMPL_H__ |
8 #define NET_DISK_CACHE_BACKEND_IMPL_H__ | 8 #define NET_DISK_CACHE_BACKEND_IMPL_H__ |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
11 #include "base/timer.h" | 11 #include "base/timer.h" |
12 #include "net/disk_cache/block_files.h" | 12 #include "net/disk_cache/block_files.h" |
13 #include "net/disk_cache/disk_cache.h" | 13 #include "net/disk_cache/disk_cache.h" |
14 #include "net/disk_cache/rankings.h" | 14 #include "net/disk_cache/rankings.h" |
15 #include "net/disk_cache/stats.h" | 15 #include "net/disk_cache/stats.h" |
16 #include "net/disk_cache/trace.h" | 16 #include "net/disk_cache/trace.h" |
17 | 17 |
18 namespace disk_cache { | 18 namespace disk_cache { |
19 | 19 |
20 // This class implements the Backend interface. An object of this | 20 // This class implements the Backend interface. An object of this |
21 // class handles the operations of the cache for a particular profile. | 21 // class handles the operations of the cache for a particular profile. |
22 class BackendImpl : public Backend { | 22 class BackendImpl : public Backend { |
23 public: | 23 public: |
24 explicit BackendImpl(const std::wstring& path) | 24 explicit BackendImpl(const std::wstring& path) |
25 : path_(path), block_files_(path), mask_(0), max_size_(0), | 25 : path_(path), block_files_(path), mask_(0), max_size_(0), |
26 init_(false), restarted_(false), unit_test_(false), | 26 init_(false), restarted_(false), unit_test_(false), read_only_(false), |
27 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} | 27 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} |
28 // mask can be used to limit the usable size of the hash table, for testing. | 28 // mask can be used to limit the usable size of the hash table, for testing. |
29 BackendImpl(const std::wstring& path, uint32 mask) | 29 BackendImpl(const std::wstring& path, uint32 mask) |
30 : path_(path), block_files_(path), mask_(mask), max_size_(0), | 30 : path_(path), block_files_(path), mask_(mask), max_size_(0), |
31 init_(false), restarted_(false), unit_test_(false), | 31 init_(false), restarted_(false), unit_test_(false), read_only_(false), |
32 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} | 32 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} |
33 ~BackendImpl(); | 33 ~BackendImpl(); |
34 | 34 |
35 // Performs general initialization for this current instance of the cache. | 35 // Performs general initialization for this current instance of the cache. |
36 bool Init(); | 36 bool Init(); |
37 | 37 |
38 // Backend interface. | 38 // Backend interface. |
39 virtual int32 GetEntryCount() const; | 39 virtual int32 GetEntryCount() const; |
40 virtual bool OpenEntry(const std::string& key, Entry** entry); | 40 virtual bool OpenEntry(const std::string& key, Entry** entry); |
41 virtual bool CreateEntry(const std::string& key, Entry** entry); | 41 virtual bool CreateEntry(const std::string& key, Entry** entry); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // Timer callback to calculate usage statistics. | 102 // Timer callback to calculate usage statistics. |
103 void OnStatsTimer(); | 103 void OnStatsTimer(); |
104 | 104 |
105 // Handles the pending asynchronous IO count. | 105 // Handles the pending asynchronous IO count. |
106 void IncrementIoCount(); | 106 void IncrementIoCount(); |
107 void DecrementIoCount(); | 107 void DecrementIoCount(); |
108 | 108 |
109 // Sets internal parameters to enable unit testing mode. | 109 // Sets internal parameters to enable unit testing mode. |
110 void SetUnitTestMode(); | 110 void SetUnitTestMode(); |
111 | 111 |
| 112 // Sets internal parameters to enable upgrade mode (for internal tools). |
| 113 void SetUpgradeMode(); |
| 114 |
112 // Clears the counter of references to test handling of corruptions. | 115 // Clears the counter of references to test handling of corruptions. |
113 void ClearRefCountForTest(); | 116 void ClearRefCountForTest(); |
114 | 117 |
115 // Peforms a simple self-check, and returns the number of dirty items | 118 // Peforms a simple self-check, and returns the number of dirty items |
116 // or an error code (negative value). | 119 // or an error code (negative value). |
117 int SelfCheck(); | 120 int SelfCheck(); |
118 | 121 |
| 122 // Same bahavior as OpenNextEntry but walks the list from back to front. |
| 123 bool OpenPrevEntry(void** iter, Entry** prev_entry); |
| 124 |
119 private: | 125 private: |
120 // Creates a new backing file for the cache index. | 126 // Creates a new backing file for the cache index. |
121 bool CreateBackingStore(disk_cache::File* file); | 127 bool CreateBackingStore(disk_cache::File* file); |
122 bool InitBackingStore(bool* file_created); | 128 bool InitBackingStore(bool* file_created); |
123 void AdjustMaxCacheSize(int table_len); | 129 void AdjustMaxCacheSize(int table_len); |
124 | 130 |
125 // Deletes the cache and starts again. | 131 // Deletes the cache and starts again. |
126 void RestartCache(); | 132 void RestartCache(); |
127 | 133 |
128 // Creates a new entry object and checks to see if it is dirty. Returns zero | 134 // Creates a new entry object and checks to see if it is dirty. Returns zero |
129 // on success, or a disk_cache error on failure. | 135 // on success, or a disk_cache error on failure. |
130 int NewEntry(Addr address, EntryImpl** entry, bool* dirty); | 136 int NewEntry(Addr address, EntryImpl** entry, bool* dirty); |
131 | 137 |
132 // Returns a given entry from the cache. The entry to match is determined by | 138 // Returns a given entry from the cache. The entry to match is determined by |
133 // key and hash, and the returned entry may be the matched one or it's parent | 139 // key and hash, and the returned entry may be the matched one or it's parent |
134 // on the list of entries with the same hash (or bucket). | 140 // on the list of entries with the same hash (or bucket). |
135 EntryImpl* MatchEntry(const std::string& key, uint32 hash, | 141 EntryImpl* MatchEntry(const std::string& key, uint32 hash, |
136 bool find_parent); | 142 bool find_parent); |
137 | 143 |
| 144 // Opens the next or previous entry on a cache iteration. |
| 145 bool OpenFollowingEntry(bool forward, void** iter, Entry** next_entry); |
| 146 |
138 void DestroyInvalidEntry(Addr address, EntryImpl* entry); | 147 void DestroyInvalidEntry(Addr address, EntryImpl* entry); |
139 | 148 |
140 // Deletes entries from the cache until the current size is below the limit. | 149 // Deletes entries from the cache until the current size is below the limit. |
141 // If empty is true, the whole cache will be trimmed, regardless of being in | 150 // If empty is true, the whole cache will be trimmed, regardless of being in |
142 // use. | 151 // use. |
143 void TrimCache(bool empty); | 152 void TrimCache(bool empty); |
144 | 153 |
145 // Handles the used storage count. | 154 // Handles the used storage count. |
146 void AddStorageSize(int32 bytes); | 155 void AddStorageSize(int32 bytes); |
147 void SubstractStorageSize(int32 bytes); | 156 void SubstractStorageSize(int32 bytes); |
(...skipping 20 matching lines...) Expand all Loading... |
168 BlockFiles block_files_; // Set of files used to store all data. | 177 BlockFiles block_files_; // Set of files used to store all data. |
169 Rankings rankings_; // Rankings to be able to trim the cache. | 178 Rankings rankings_; // Rankings to be able to trim the cache. |
170 uint32 mask_; // Binary mask to map a hash to the hash table. | 179 uint32 mask_; // Binary mask to map a hash to the hash table. |
171 int32 max_size_; // Maximum data size for this instance. | 180 int32 max_size_; // Maximum data size for this instance. |
172 int num_refs_; // Number of referenced cache entries. | 181 int num_refs_; // Number of referenced cache entries. |
173 int max_refs_; // Max number of eferenced cache entries. | 182 int max_refs_; // Max number of eferenced cache entries. |
174 int num_pending_io_; // Number of pending IO operations; | 183 int num_pending_io_; // Number of pending IO operations; |
175 bool init_; // controls the initialization of the system. | 184 bool init_; // controls the initialization of the system. |
176 bool restarted_; | 185 bool restarted_; |
177 bool unit_test_; | 186 bool unit_test_; |
| 187 bool read_only_; // Prevents updates of the rankings data (used by tools). |
178 bool disabled_; | 188 bool disabled_; |
179 | 189 |
180 Stats stats_; // Usage statistcs. | 190 Stats stats_; // Usage statistcs. |
181 base::RepeatingTimer<BackendImpl> timer_; // Usage timer. | 191 base::RepeatingTimer<BackendImpl> timer_; // Usage timer. |
182 TraceObject trace_object_; // Inits and destroys internal tracing. | 192 TraceObject trace_object_; // Inits and destroys internal tracing. |
183 ScopedRunnableMethodFactory<BackendImpl> factory_; | 193 ScopedRunnableMethodFactory<BackendImpl> factory_; |
184 | 194 |
185 DISALLOW_EVIL_CONSTRUCTORS(BackendImpl); | 195 DISALLOW_EVIL_CONSTRUCTORS(BackendImpl); |
186 }; | 196 }; |
187 | 197 |
188 } // namespace disk_cache | 198 } // namespace disk_cache |
189 | 199 |
190 #endif // NET_DISK_CACHE_BACKEND_IMPL_H__ | 200 #endif // NET_DISK_CACHE_BACKEND_IMPL_H__ |
191 | 201 |
OLD | NEW |