Chromium Code Reviews| Index: net/disk_cache/simple/simple_index.h |
| diff --git a/net/disk_cache/simple/simple_index.h b/net/disk_cache/simple/simple_index.h |
| index 65f5ff330d5df7f4a0bc58e506b3a88e0b23a6c3..67eb6ddfdb5e7b083fe0ca641dbeb7a04b5182f5 100644 |
| --- a/net/disk_cache/simple/simple_index.h |
| +++ b/net/disk_cache/simple/simple_index.h |
| @@ -29,12 +29,12 @@ class SimpleIndex |
| public: |
| SimpleIndex( |
| const scoped_refptr<base::TaskRunner>& cache_thread, |
| + const scoped_refptr<base::TaskRunner>& io_thread, |
| const base::FilePath& path); |
| virtual ~SimpleIndex(); |
| - // Should be called on CacheThread. |
| - bool Initialize(); |
| + void Initialize(); |
| void Insert(const std::string& key); |
| void Remove(const std::string& key); |
| @@ -45,7 +45,7 @@ class SimpleIndex |
| // iff the entry exist in the index. |
| bool UseIfExists(const std::string& key); |
| - void Cleanup(); |
| + void WriteToDisk(); |
| // Update the size (in bytes) of an entry, in the metadata stored in the |
| // index. This should be the total disk-file size including all streams of the |
| @@ -59,10 +59,26 @@ class SimpleIndex |
| // EntryMetadata itself. |
| typedef base::hash_map<std::string, SimpleIndexFile::EntryMetadata> EntrySet; |
| - void InsertInternal(const SimpleIndexFile::EntryMetadata& entry_metadata); |
| + typedef base::Callback<void(scoped_ptr<EntrySet>)> MergeCallback; |
| + |
| + static void InsertInternal( |
| + EntrySet* entry_set, |
| + const SimpleIndexFile::EntryMetadata& entry_metadata); |
| + |
| + // Load index from disk. If it is corrupted, call RestoreFromDisk(). |
| + static void LoadFromDisk( |
| + const base::FilePath& index_filename, |
| + const scoped_refptr<base::TaskRunner>& io_thread, |
| + const MergeCallback& merge_callback); |
| // Enumerates all entries' files on disk and regenerates the index. |
| - bool RestoreFromDisk(); |
| + static void RestoreFromDisk( |
| + const base::FilePath& index_filename, |
| + const scoped_refptr<base::TaskRunner>& io_thread, |
| + const MergeCallback& merge_callback); |
| + |
| + // Must run on IO Thread. |
| + void MergeInitializingSet(scoped_ptr<EntrySet> initializing_set); |
| // |out_buffer| needs to be pre-allocated. The serialized index is stored in |
| // |out_buffer|. |
| @@ -75,18 +91,22 @@ class SimpleIndex |
| const base::FilePath& temp_filename, |
| scoped_ptr<std::string> buffer); |
| - const base::FilePath path_; |
| - |
| EntrySet entries_set_; |
| uint64 cache_size_; // Total cache storage size in bytes. |
| + // This stores all the hash_key of entries that are removed during |
| + // initialization. |
| + base::hash_set<std::string> removals_set_; |
|
gavinp
2013/04/11 09:56:32
I like: removed_entries_ better for a name.
felipeg
2013/04/11 11:25:45
Done.
|
| + bool initialized_; |
| + |
| base::FilePath index_filename_; |
| - base::PlatformFile index_file_; |
| - // We keep the thread from where Initialize() method has been called so that |
| - // we run the Cleanup method in the same thread. Usually that should be the |
| - // CacheThread. |
| scoped_refptr<base::TaskRunner> cache_thread_; |
| + scoped_refptr<base::TaskRunner> io_thread_; |
| + |
| + // All nonstatic SimpleEntryImpl methods should always be called on the IO |
| + // thread, in all cases. |io_thread_checker_| documents and enforces this. |
| + base::ThreadChecker io_thread_checker_; |
| }; |
| } // namespace disk_cache |