| Index: net/disk_cache/backend_impl.h
|
| ===================================================================
|
| --- net/disk_cache/backend_impl.h (revision 51874)
|
| +++ net/disk_cache/backend_impl.h (working copy)
|
| @@ -13,6 +13,7 @@
|
| #include "net/disk_cache/block_files.h"
|
| #include "net/disk_cache/disk_cache.h"
|
| #include "net/disk_cache/eviction.h"
|
| +#include "net/disk_cache/in_flight_backend_io.h"
|
| #include "net/disk_cache/rankings.h"
|
| #include "net/disk_cache/stats.h"
|
| #include "net/disk_cache/trace.h"
|
| @@ -36,18 +37,20 @@
|
| friend class Eviction;
|
| public:
|
| BackendImpl(const FilePath& path, base::MessageLoopProxy* cache_thread)
|
| - : path_(path), block_files_(path), mask_(0), max_size_(0),
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)),
|
| + path_(path), block_files_(path), mask_(0), max_size_(0),
|
| cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(0),
|
| init_(false), restarted_(false), unit_test_(false), read_only_(false),
|
| - new_eviction_(false), first_timer_(true),
|
| + new_eviction_(false), first_timer_(true), done_(true, false),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {}
|
| // mask can be used to limit the usable size of the hash table, for testing.
|
| BackendImpl(const FilePath& path, uint32 mask,
|
| base::MessageLoopProxy* cache_thread)
|
| - : path_(path), block_files_(path), mask_(mask), max_size_(0),
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(background_queue_(this, cache_thread)),
|
| + path_(path), block_files_(path), mask_(mask), max_size_(0),
|
| cache_type_(net::DISK_CACHE), uma_report_(0), user_flags_(kMask),
|
| init_(false), restarted_(false), unit_test_(false), read_only_(false),
|
| - new_eviction_(false), first_timer_(true),
|
| + new_eviction_(false), first_timer_(true), done_(true, false),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {}
|
| ~BackendImpl();
|
|
|
| @@ -59,8 +62,13 @@
|
| Backend** backend, CompletionCallback* callback);
|
|
|
| // Performs general initialization for this current instance of the cache.
|
| - bool Init();
|
| + bool Init(); // Deprecated.
|
| + int Init(CompletionCallback* callback);
|
| + int SyncInit();
|
|
|
| + // Performs final cleanup on destruction.
|
| + void CleanupCache();
|
| +
|
| // Backend interface.
|
| virtual int32 GetEntryCount() const;
|
| virtual int OpenEntry(const std::string& key, Entry** entry,
|
| @@ -79,6 +87,17 @@
|
| virtual void EndEnumeration(void** iter);
|
| virtual void GetStats(StatsItems* stats);
|
|
|
| + // Synchronous implementation of the asynchronous interface.
|
| + int SyncOpenEntry(const std::string& key, Entry** entry);
|
| + int SyncCreateEntry(const std::string& key, Entry** entry);
|
| + int SyncDoomEntry(const std::string& key);
|
| + int SyncDoomAllEntries();
|
| + int SyncDoomEntriesBetween(const base::Time initial_time,
|
| + const base::Time end_time);
|
| + int SyncDoomEntriesSince(const base::Time initial_time);
|
| + int SyncOpenNextEntry(void** iter, Entry** next_entry);
|
| + void SyncEndEnumeration(void* iter);
|
| +
|
| // Sets the maximum size for the total amount of data stored by this instance.
|
| bool SetMaxSize(int max_bytes);
|
|
|
| @@ -91,6 +110,10 @@
|
| // Returns the actual file used to store a given (non-external) address.
|
| MappedFile* File(Addr address);
|
|
|
| + InFlightBackendIO* background_queue() {
|
| + return &background_queue_;
|
| + }
|
| +
|
| // Creates an external storage file.
|
| bool CreateExternalFile(Addr* address);
|
|
|
| @@ -193,12 +216,17 @@
|
| // Clears the counter of references to test handling of corruptions.
|
| void ClearRefCountForTest();
|
|
|
| + // Sends a dummy operation through the operation queue, for unit tests.
|
| + int FlushQueueForTest(CompletionCallback* callback);
|
| +
|
| // Peforms a simple self-check, and returns the number of dirty items
|
| // or an error code (negative value).
|
| int SelfCheck();
|
|
|
| // Same bahavior as OpenNextEntry but walks the list from back to front.
|
| - bool OpenPrevEntry(void** iter, Entry** prev_entry);
|
| + int OpenPrevEntry(void** iter, Entry** prev_entry,
|
| + CompletionCallback* callback);
|
| + int SyncOpenPrevEntry(void** iter, Entry** prev_entry);
|
|
|
| // Old Backend interface.
|
| bool OpenEntry(const std::string& key, Entry** entry);
|
| @@ -208,11 +236,12 @@
|
| bool DoomEntriesBetween(const base::Time initial_time,
|
| const base::Time end_time);
|
| bool DoomEntriesSince(const base::Time initial_time);
|
| - bool OpenNextEntry(void** iter, Entry** next_entry);
|
|
|
| - // Open or create an entry for the given |key|.
|
| + // Open or create an entry for the given |key| or |iter|.
|
| EntryImpl* OpenEntryImpl(const std::string& key);
|
| EntryImpl* CreateEntryImpl(const std::string& key);
|
| + EntryImpl* OpenNextEntryImpl(void** iter);
|
| + EntryImpl* OpenPrevEntryImpl(void** iter);
|
|
|
| private:
|
| typedef base::hash_map<CacheAddr, EntryImpl*> EntriesMap;
|
| @@ -236,7 +265,7 @@
|
| EntryImpl* MatchEntry(const std::string& key, uint32 hash, bool find_parent);
|
|
|
| // Opens the next or previous entry on a cache iteration.
|
| - bool OpenFollowingEntry(bool forward, void** iter, Entry** next_entry);
|
| + EntryImpl* OpenFollowingEntry(bool forward, void** iter);
|
|
|
| // Opens the next or previous entry on a single list. If successfull,
|
| // |from_entry| will be updated to point to the new entry, otherwise it will
|
| @@ -283,6 +312,7 @@
|
| // Part of the self test. Returns false if the entry is corrupt.
|
| bool CheckEntry(EntryImpl* cache_entry);
|
|
|
| + InFlightBackendIO background_queue_; // The controller of pending operations.
|
| scoped_refptr<MappedFile> index_; // The main cache index.
|
| FilePath path_; // Path to the folder used as backing storage.
|
| Index* data_; // Pointer to the index data.
|
| @@ -308,6 +338,7 @@
|
|
|
| Stats stats_; // Usage statistcs.
|
| base::RepeatingTimer<BackendImpl> timer_; // Usage timer.
|
| + base::WaitableEvent done_; // Signals the end of background work.
|
| scoped_refptr<TraceObject> trace_object_; // Inits internal tracing.
|
| ScopedRunnableMethodFactory<BackendImpl> factory_;
|
|
|
|
|