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

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

Issue 2881010: Revert 51456 - Disk cache: Switch the disk cache to use the cache_thread.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 5 months 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 | « no previous file | net/disk_cache/backend_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-2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2010 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/file_path.h" 10 #include "base/file_path.h"
11 #include "base/hash_tables.h" 11 #include "base/hash_tables.h"
12 #include "base/timer.h" 12 #include "base/timer.h"
13 #include "net/disk_cache/block_files.h" 13 #include "net/disk_cache/block_files.h"
14 #include "net/disk_cache/disk_cache.h" 14 #include "net/disk_cache/disk_cache.h"
15 #include "net/disk_cache/eviction.h" 15 #include "net/disk_cache/eviction.h"
16 #include "net/disk_cache/in_flight_backend_io.h"
17 #include "net/disk_cache/rankings.h" 16 #include "net/disk_cache/rankings.h"
18 #include "net/disk_cache/stats.h" 17 #include "net/disk_cache/stats.h"
19 #include "net/disk_cache/trace.h" 18 #include "net/disk_cache/trace.h"
20 19
21 namespace disk_cache { 20 namespace disk_cache {
22 21
23 enum BackendFlags { 22 enum BackendFlags {
24 kNone = 0, 23 kNone = 0,
25 kMask = 1, // A mask (for the index table) was specified. 24 kMask = 1, // A mask (for the index table) was specified.
26 kMaxSize = 1 << 1, // A maximum size was provided. 25 kMaxSize = 1 << 1, // A maximum size was provided.
27 kUnitTestMode = 1 << 2, // We are modifying the behavior for testing. 26 kUnitTestMode = 1 << 2, // We are modifying the behavior for testing.
28 kUpgradeMode = 1 << 3, // This is the upgrade tool (dump). 27 kUpgradeMode = 1 << 3, // This is the upgrade tool (dump).
29 kNewEviction = 1 << 4, // Use of new eviction was specified. 28 kNewEviction = 1 << 4, // Use of new eviction was specified.
30 kNoRandom = 1 << 5, // Don't add randomness to the behavior. 29 kNoRandom = 1 << 5, // Don't add randomness to the behavior.
31 kNoLoadProtection = 1 << 6 // Don't act conservatively under load. 30 kNoLoadProtection = 1 << 6 // Don't act conservatively under load.
32 }; 31 };
33 32
34 // This class implements the Backend interface. An object of this 33 // This class implements the Backend interface. An object of this
35 // class handles the operations of the cache for a particular profile. 34 // class handles the operations of the cache for a particular profile.
36 class BackendImpl : public Backend { 35 class BackendImpl : public Backend {
37 friend class Eviction; 36 friend class Eviction;
38 public: 37 public:
39 BackendImpl(const FilePath& path, base::MessageLoopProxy* cache_thread) 38 BackendImpl(const FilePath& path, base::MessageLoopProxy* cache_thread)
40 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)), 39 : path_(path), block_files_(path), mask_(0), max_size_(0),
41 path_(path), block_files_(path), mask_(0), max_size_(0),
42 cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(0), 40 cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(0),
43 init_(false), restarted_(false), unit_test_(false), read_only_(false), 41 init_(false), restarted_(false), unit_test_(false), read_only_(false),
44 new_eviction_(false), first_timer_(true), done_(true, false), 42 new_eviction_(false), first_timer_(true),
45 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} 43 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {}
46 // mask can be used to limit the usable size of the hash table, for testing. 44 // mask can be used to limit the usable size of the hash table, for testing.
47 BackendImpl(const FilePath& path, uint32 mask, 45 BackendImpl(const FilePath& path, uint32 mask,
48 base::MessageLoopProxy* cache_thread) 46 base::MessageLoopProxy* cache_thread)
49 : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)), 47 : path_(path), block_files_(path), mask_(mask), max_size_(0),
50 path_(path), block_files_(path), mask_(mask), max_size_(0),
51 cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(kMask), 48 cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(kMask),
52 init_(false), restarted_(false), unit_test_(false), read_only_(false), 49 init_(false), restarted_(false), unit_test_(false), read_only_(false),
53 new_eviction_(false), first_timer_(true), done_(true, false), 50 new_eviction_(false), first_timer_(true),
54 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {} 51 ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {}
55 ~BackendImpl(); 52 ~BackendImpl();
56 53
57 // Returns a new backend with the desired flags. See the declaration of 54 // Returns a new backend with the desired flags. See the declaration of
58 // CreateCacheBackend(). 55 // CreateCacheBackend().
59 static int CreateBackend(const FilePath& full_path, bool force, 56 static int CreateBackend(const FilePath& full_path, bool force,
60 int max_bytes, net::CacheType type, 57 int max_bytes, net::CacheType type,
61 uint32 flags, base::MessageLoopProxy* thread, 58 uint32 flags, base::MessageLoopProxy* thread,
62 Backend** backend, CompletionCallback* callback); 59 Backend** backend, CompletionCallback* callback);
63 60
64 // Performs general initialization for this current instance of the cache. 61 // Performs general initialization for this current instance of the cache.
65 bool Init(); // Deprecated. 62 bool Init();
66 int Init(CompletionCallback* callback);
67 int SyncInit();
68
69 // Performs final cleanup on destruction.
70 void CleanupCache();
71 63
72 // Backend interface. 64 // Backend interface.
73 virtual int32 GetEntryCount() const; 65 virtual int32 GetEntryCount() const;
74 virtual int OpenEntry(const std::string& key, Entry** entry, 66 virtual int OpenEntry(const std::string& key, Entry** entry,
75 CompletionCallback* callback); 67 CompletionCallback* callback);
76 virtual int CreateEntry(const std::string& key, Entry** entry, 68 virtual int CreateEntry(const std::string& key, Entry** entry,
77 CompletionCallback* callback); 69 CompletionCallback* callback);
78 virtual int DoomEntry(const std::string& key, CompletionCallback* callback); 70 virtual int DoomEntry(const std::string& key, CompletionCallback* callback);
79 virtual int DoomAllEntries(CompletionCallback* callback); 71 virtual int DoomAllEntries(CompletionCallback* callback);
80 virtual int DoomEntriesBetween(const base::Time initial_time, 72 virtual int DoomEntriesBetween(const base::Time initial_time,
81 const base::Time end_time, 73 const base::Time end_time,
82 CompletionCallback* callback); 74 CompletionCallback* callback);
83 virtual int DoomEntriesSince(const base::Time initial_time, 75 virtual int DoomEntriesSince(const base::Time initial_time,
84 CompletionCallback* callback); 76 CompletionCallback* callback);
85 virtual int OpenNextEntry(void** iter, Entry** next_entry, 77 virtual int OpenNextEntry(void** iter, Entry** next_entry,
86 CompletionCallback* callback); 78 CompletionCallback* callback);
87 virtual void EndEnumeration(void** iter); 79 virtual void EndEnumeration(void** iter);
88 virtual void GetStats(StatsItems* stats); 80 virtual void GetStats(StatsItems* stats);
89 81
90 // Synchronous implementation of the asynchronous interface.
91 int SyncOpenEntry(const std::string& key, Entry** entry);
92 int SyncCreateEntry(const std::string& key, Entry** entry);
93 int SyncDoomEntry(const std::string& key);
94 int SyncDoomAllEntries();
95 int SyncDoomEntriesBetween(const base::Time initial_time,
96 const base::Time end_time);
97 int SyncDoomEntriesSince(const base::Time initial_time);
98 int SyncOpenNextEntry(void** iter, Entry** next_entry);
99 void SyncEndEnumeration(void* iter);
100
101 // Sets the maximum size for the total amount of data stored by this instance. 82 // Sets the maximum size for the total amount of data stored by this instance.
102 bool SetMaxSize(int max_bytes); 83 bool SetMaxSize(int max_bytes);
103 84
104 // Sets the cache type for this backend. 85 // Sets the cache type for this backend.
105 void SetType(net::CacheType type); 86 void SetType(net::CacheType type);
106 87
107 // Returns the full name for an external storage file. 88 // Returns the full name for an external storage file.
108 FilePath GetFileName(Addr address) const; 89 FilePath GetFileName(Addr address) const;
109 90
110 // Returns the actual file used to store a given (non-external) address. 91 // Returns the actual file used to store a given (non-external) address.
111 MappedFile* File(Addr address); 92 MappedFile* File(Addr address);
112 93
113 InFlightBackendIO* background_queue() {
114 return &background_queue_;
115 }
116
117 // Creates an external storage file. 94 // Creates an external storage file.
118 bool CreateExternalFile(Addr* address); 95 bool CreateExternalFile(Addr* address);
119 96
120 // Creates a new storage block of size block_count. 97 // Creates a new storage block of size block_count.
121 bool CreateBlock(FileType block_type, int block_count, 98 bool CreateBlock(FileType block_type, int block_count,
122 Addr* block_address); 99 Addr* block_address);
123 100
124 // Deletes a given storage block. deep set to true can be used to zero-fill 101 // Deletes a given storage block. deep set to true can be used to zero-fill
125 // the related storage in addition of releasing the related block. 102 // the related storage in addition of releasing the related block.
126 void DeleteBlock(Addr block_address, bool deep); 103 void DeleteBlock(Addr block_address, bool deep);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 186
210 // Sets the eviction algorithm to version 2. 187 // Sets the eviction algorithm to version 2.
211 void SetNewEviction(); 188 void SetNewEviction();
212 189
213 // Sets an explicit set of BackendFlags. 190 // Sets an explicit set of BackendFlags.
214 void SetFlags(uint32 flags); 191 void SetFlags(uint32 flags);
215 192
216 // Clears the counter of references to test handling of corruptions. 193 // Clears the counter of references to test handling of corruptions.
217 void ClearRefCountForTest(); 194 void ClearRefCountForTest();
218 195
219 // Sends a dummy operation through the operation queue, for unit tests.
220 int FlushQueueForTest(CompletionCallback* callback);
221
222 // Peforms a simple self-check, and returns the number of dirty items 196 // Peforms a simple self-check, and returns the number of dirty items
223 // or an error code (negative value). 197 // or an error code (negative value).
224 int SelfCheck(); 198 int SelfCheck();
225 199
226 // Same bahavior as OpenNextEntry but walks the list from back to front. 200 // Same bahavior as OpenNextEntry but walks the list from back to front.
227 int OpenPrevEntry(void** iter, Entry** prev_entry, 201 bool OpenPrevEntry(void** iter, Entry** prev_entry);
228 CompletionCallback* callback);
229 int SyncOpenPrevEntry(void** iter, Entry** prev_entry);
230 202
231 // Old Backend interface. 203 // Old Backend interface.
232 bool OpenEntry(const std::string& key, Entry** entry); 204 bool OpenEntry(const std::string& key, Entry** entry);
233 bool CreateEntry(const std::string& key, Entry** entry); 205 bool CreateEntry(const std::string& key, Entry** entry);
234 bool DoomEntry(const std::string& key); 206 bool DoomEntry(const std::string& key);
235 bool DoomAllEntries(); 207 bool DoomAllEntries();
236 bool DoomEntriesBetween(const base::Time initial_time, 208 bool DoomEntriesBetween(const base::Time initial_time,
237 const base::Time end_time); 209 const base::Time end_time);
238 bool DoomEntriesSince(const base::Time initial_time); 210 bool DoomEntriesSince(const base::Time initial_time);
211 bool OpenNextEntry(void** iter, Entry** next_entry);
239 212
240 // Open or create an entry for the given |key| or |iter|. 213 // Open or create an entry for the given |key|.
241 EntryImpl* OpenEntryImpl(const std::string& key); 214 EntryImpl* OpenEntryImpl(const std::string& key);
242 EntryImpl* CreateEntryImpl(const std::string& key); 215 EntryImpl* CreateEntryImpl(const std::string& key);
243 EntryImpl* OpenNextEntryImpl(void** iter);
244 EntryImpl* OpenPrevEntryImpl(void** iter);
245 216
246 private: 217 private:
247 typedef base::hash_map<CacheAddr, EntryImpl*> EntriesMap; 218 typedef base::hash_map<CacheAddr, EntryImpl*> EntriesMap;
248 219
249 // Creates a new backing file for the cache index. 220 // Creates a new backing file for the cache index.
250 bool CreateBackingStore(disk_cache::File* file); 221 bool CreateBackingStore(disk_cache::File* file);
251 bool InitBackingStore(bool* file_created); 222 bool InitBackingStore(bool* file_created);
252 void AdjustMaxCacheSize(int table_len); 223 void AdjustMaxCacheSize(int table_len);
253 224
254 // Deletes the cache and starts again. 225 // Deletes the cache and starts again.
255 void RestartCache(); 226 void RestartCache();
256 void PrepareForRestart(); 227 void PrepareForRestart();
257 228
258 // Creates a new entry object and checks to see if it is dirty. Returns zero 229 // Creates a new entry object and checks to see if it is dirty. Returns zero
259 // on success, or a disk_cache error on failure. 230 // on success, or a disk_cache error on failure.
260 int NewEntry(Addr address, EntryImpl** entry, bool* dirty); 231 int NewEntry(Addr address, EntryImpl** entry, bool* dirty);
261 232
262 // Returns a given entry from the cache. The entry to match is determined by 233 // Returns a given entry from the cache. The entry to match is determined by
263 // key and hash, and the returned entry may be the matched one or it's parent 234 // key and hash, and the returned entry may be the matched one or it's parent
264 // on the list of entries with the same hash (or bucket). 235 // on the list of entries with the same hash (or bucket).
265 EntryImpl* MatchEntry(const std::string& key, uint32 hash, bool find_parent); 236 EntryImpl* MatchEntry(const std::string& key, uint32 hash, bool find_parent);
266 237
267 // Opens the next or previous entry on a cache iteration. 238 // Opens the next or previous entry on a cache iteration.
268 EntryImpl* OpenFollowingEntry(bool forward, void** iter); 239 bool OpenFollowingEntry(bool forward, void** iter, Entry** next_entry);
269 240
270 // Opens the next or previous entry on a single list. If successfull, 241 // Opens the next or previous entry on a single list. If successfull,
271 // |from_entry| will be updated to point to the new entry, otherwise it will 242 // |from_entry| will be updated to point to the new entry, otherwise it will
272 // be set to NULL; in other words, it is used as an explicit iterator. 243 // be set to NULL; in other words, it is used as an explicit iterator.
273 bool OpenFollowingEntryFromList(bool forward, Rankings::List list, 244 bool OpenFollowingEntryFromList(bool forward, Rankings::List list,
274 CacheRankingsBlock** from_entry, 245 CacheRankingsBlock** from_entry,
275 EntryImpl** next_entry); 246 EntryImpl** next_entry);
276 247
277 // Returns the entry that is pointed by |next|. If we are trimming the cache, 248 // Returns the entry that is pointed by |next|. If we are trimming the cache,
278 // |to_evict| should be true so that we don't perform extra disk writes. 249 // |to_evict| should be true so that we don't perform extra disk writes.
(...skipping 26 matching lines...) Expand all
305 276
306 // Performs basic checks on the index file. Returns false on failure. 277 // Performs basic checks on the index file. Returns false on failure.
307 bool CheckIndex(); 278 bool CheckIndex();
308 279
309 // Part of the selt test. Returns the number or dirty entries, or an error. 280 // Part of the selt test. Returns the number or dirty entries, or an error.
310 int CheckAllEntries(); 281 int CheckAllEntries();
311 282
312 // Part of the self test. Returns false if the entry is corrupt. 283 // Part of the self test. Returns false if the entry is corrupt.
313 bool CheckEntry(EntryImpl* cache_entry); 284 bool CheckEntry(EntryImpl* cache_entry);
314 285
315 InFlightBackendIO background_queue_; // The controller of pending operations.
316 scoped_refptr<MappedFile> index_; // The main cache index. 286 scoped_refptr<MappedFile> index_; // The main cache index.
317 FilePath path_; // Path to the folder used as backing storage. 287 FilePath path_; // Path to the folder used as backing storage.
318 Index* data_; // Pointer to the index data. 288 Index* data_; // Pointer to the index data.
319 BlockFiles block_files_; // Set of files used to store all data. 289 BlockFiles block_files_; // Set of files used to store all data.
320 Rankings rankings_; // Rankings to be able to trim the cache. 290 Rankings rankings_; // Rankings to be able to trim the cache.
321 uint32 mask_; // Binary mask to map a hash to the hash table. 291 uint32 mask_; // Binary mask to map a hash to the hash table.
322 int32 max_size_; // Maximum data size for this instance. 292 int32 max_size_; // Maximum data size for this instance.
323 Eviction eviction_; // Handler of the eviction algorithm. 293 Eviction eviction_; // Handler of the eviction algorithm.
324 EntriesMap open_entries_; // Map of open entries. 294 EntriesMap open_entries_; // Map of open entries.
325 int num_refs_; // Number of referenced cache entries. 295 int num_refs_; // Number of referenced cache entries.
326 int max_refs_; // Max number of referenced cache entries. 296 int max_refs_; // Max number of referenced cache entries.
327 int num_pending_io_; // Number of pending IO operations. 297 int num_pending_io_; // Number of pending IO operations.
328 net::CacheType cache_type_; 298 net::CacheType cache_type_;
329 int uma_report_; // Controls transmision of UMA data. 299 int uma_report_; // Controls transmision of UMA data.
330 uint32 user_flags_; // Flags set by the user. 300 uint32 user_flags_; // Flags set by the user.
331 bool init_; // controls the initialization of the system. 301 bool init_; // controls the initialization of the system.
332 bool restarted_; 302 bool restarted_;
333 bool unit_test_; 303 bool unit_test_;
334 bool read_only_; // Prevents updates of the rankings data (used by tools). 304 bool read_only_; // Prevents updates of the rankings data (used by tools).
335 bool disabled_; 305 bool disabled_;
336 bool new_eviction_; // What eviction algorithm should be used. 306 bool new_eviction_; // What eviction algorithm should be used.
337 bool first_timer_; // True if the timer has not been called. 307 bool first_timer_; // True if the timer has not been called.
338 308
339 Stats stats_; // Usage statistcs. 309 Stats stats_; // Usage statistcs.
340 base::RepeatingTimer<BackendImpl> timer_; // Usage timer. 310 base::RepeatingTimer<BackendImpl> timer_; // Usage timer.
341 base::WaitableEvent done_; // Signals the end of background work.
342 scoped_refptr<TraceObject> trace_object_; // Inits internal tracing. 311 scoped_refptr<TraceObject> trace_object_; // Inits internal tracing.
343 ScopedRunnableMethodFactory<BackendImpl> factory_; 312 ScopedRunnableMethodFactory<BackendImpl> factory_;
344 313
345 DISALLOW_COPY_AND_ASSIGN(BackendImpl); 314 DISALLOW_COPY_AND_ASSIGN(BackendImpl);
346 }; 315 };
347 316
348 // Returns the prefered max cache size given the available disk space. 317 // Returns the prefered max cache size given the available disk space.
349 int PreferedCacheSize(int64 available); 318 int PreferedCacheSize(int64 available);
350 319
351 } // namespace disk_cache 320 } // namespace disk_cache
352 321
353 #endif // NET_DISK_CACHE_BACKEND_IMPL_H_ 322 #endif // NET_DISK_CACHE_BACKEND_IMPL_H_
OLDNEW
« no previous file with comments | « no previous file | net/disk_cache/backend_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698