| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ | 5 #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ |
| 6 #define NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ | 6 #define NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 // work is done in the static methods, which are run on the cache thread | 50 // work is done in the static methods, which are run on the cache thread |
| 51 // or in worker threads. Synchronization between methods is the | 51 // or in worker threads. Synchronization between methods is the |
| 52 // responsibility of the caller. | 52 // responsibility of the caller. |
| 53 class NET_EXPORT_PRIVATE SimpleIndexFile { | 53 class NET_EXPORT_PRIVATE SimpleIndexFile { |
| 54 public: | 54 public: |
| 55 class NET_EXPORT_PRIVATE IndexMetadata { | 55 class NET_EXPORT_PRIVATE IndexMetadata { |
| 56 public: | 56 public: |
| 57 IndexMetadata(); | 57 IndexMetadata(); |
| 58 IndexMetadata(uint64 number_of_entries, uint64 cache_size); | 58 IndexMetadata(uint64 number_of_entries, uint64 cache_size); |
| 59 | 59 |
| 60 void Serialize(Pickle* pickle) const; | 60 void Serialize(base::Pickle* pickle) const; |
| 61 bool Deserialize(PickleIterator* it); | 61 bool Deserialize(base::PickleIterator* it); |
| 62 | 62 |
| 63 bool CheckIndexMetadata(); | 63 bool CheckIndexMetadata(); |
| 64 | 64 |
| 65 uint64 GetNumberOfEntries() { return number_of_entries_; } | 65 uint64 GetNumberOfEntries() { return number_of_entries_; } |
| 66 | 66 |
| 67 private: | 67 private: |
| 68 FRIEND_TEST_ALL_PREFIXES(IndexMetadataTest, Basics); | 68 FRIEND_TEST_ALL_PREFIXES(IndexMetadataTest, Basics); |
| 69 FRIEND_TEST_ALL_PREFIXES(IndexMetadataTest, Serialize); | 69 FRIEND_TEST_ALL_PREFIXES(IndexMetadataTest, Serialize); |
| 70 | 70 |
| 71 uint64 magic_number_; | 71 uint64 magic_number_; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 112 |
| 113 // Load the index file from disk returning an EntrySet. | 113 // Load the index file from disk returning an EntrySet. |
| 114 static void SyncLoadFromDisk(const base::FilePath& index_filename, | 114 static void SyncLoadFromDisk(const base::FilePath& index_filename, |
| 115 base::Time* out_last_cache_seen_by_index, | 115 base::Time* out_last_cache_seen_by_index, |
| 116 SimpleIndexLoadResult* out_result); | 116 SimpleIndexLoadResult* out_result); |
| 117 | 117 |
| 118 // Returns a scoped_ptr for a newly allocated Pickle containing the serialized | 118 // Returns a scoped_ptr for a newly allocated Pickle containing the serialized |
| 119 // data to be written to a file. Note: the pickle is not in a consistent state | 119 // data to be written to a file. Note: the pickle is not in a consistent state |
| 120 // immediately after calling this menthod, one needs to call | 120 // immediately after calling this menthod, one needs to call |
| 121 // SerializeFinalData to make it ready to write to a file. | 121 // SerializeFinalData to make it ready to write to a file. |
| 122 static scoped_ptr<Pickle> Serialize( | 122 static scoped_ptr<base::Pickle> Serialize( |
| 123 const SimpleIndexFile::IndexMetadata& index_metadata, | 123 const SimpleIndexFile::IndexMetadata& index_metadata, |
| 124 const SimpleIndex::EntrySet& entries); | 124 const SimpleIndex::EntrySet& entries); |
| 125 | 125 |
| 126 // Appends cache modification time data to the serialized format. This is | 126 // Appends cache modification time data to the serialized format. This is |
| 127 // performed on a thread accessing the disk. It is not combined with the main | 127 // performed on a thread accessing the disk. It is not combined with the main |
| 128 // serialization path to avoid extra thread hops or copying the pickle to the | 128 // serialization path to avoid extra thread hops or copying the pickle to the |
| 129 // worker thread. | 129 // worker thread. |
| 130 static bool SerializeFinalData(base::Time cache_modified, Pickle* pickle); | 130 static bool SerializeFinalData(base::Time cache_modified, |
| 131 base::Pickle* pickle); |
| 131 | 132 |
| 132 // Given the contents of an index file |data| of length |data_len|, returns | 133 // Given the contents of an index file |data| of length |data_len|, returns |
| 133 // the corresponding EntrySet. Returns NULL on error. | 134 // the corresponding EntrySet. Returns NULL on error. |
| 134 static void Deserialize(const char* data, int data_len, | 135 static void Deserialize(const char* data, int data_len, |
| 135 base::Time* out_cache_last_modified, | 136 base::Time* out_cache_last_modified, |
| 136 SimpleIndexLoadResult* out_result); | 137 SimpleIndexLoadResult* out_result); |
| 137 | 138 |
| 138 // Implemented either in simple_index_file_posix.cc or | 139 // Implemented either in simple_index_file_posix.cc or |
| 139 // simple_index_file_win.cc. base::FileEnumerator turned out to be very | 140 // simple_index_file_win.cc. base::FileEnumerator turned out to be very |
| 140 // expensive in terms of memory usage therefore it's used only on non-POSIX | 141 // expensive in terms of memory usage therefore it's used only on non-POSIX |
| 141 // environments for convenience (for now). Returns whether the traversal | 142 // environments for convenience (for now). Returns whether the traversal |
| 142 // succeeded. | 143 // succeeded. |
| 143 static bool TraverseCacheDirectory( | 144 static bool TraverseCacheDirectory( |
| 144 const base::FilePath& cache_path, | 145 const base::FilePath& cache_path, |
| 145 const EntryFileCallback& entry_file_callback); | 146 const EntryFileCallback& entry_file_callback); |
| 146 | 147 |
| 147 // Writes the index file to disk atomically. | 148 // Writes the index file to disk atomically. |
| 148 static void SyncWriteToDisk(net::CacheType cache_type, | 149 static void SyncWriteToDisk(net::CacheType cache_type, |
| 149 const base::FilePath& cache_directory, | 150 const base::FilePath& cache_directory, |
| 150 const base::FilePath& index_filename, | 151 const base::FilePath& index_filename, |
| 151 const base::FilePath& temp_index_filename, | 152 const base::FilePath& temp_index_filename, |
| 152 scoped_ptr<Pickle> pickle, | 153 scoped_ptr<base::Pickle> pickle, |
| 153 const base::TimeTicks& start_time, | 154 const base::TimeTicks& start_time, |
| 154 bool app_on_background); | 155 bool app_on_background); |
| 155 | 156 |
| 156 // Scan the index directory for entries, returning an EntrySet of all entries | 157 // Scan the index directory for entries, returning an EntrySet of all entries |
| 157 // found. | 158 // found. |
| 158 static void SyncRestoreFromDisk(const base::FilePath& cache_directory, | 159 static void SyncRestoreFromDisk(const base::FilePath& cache_directory, |
| 159 const base::FilePath& index_file_path, | 160 const base::FilePath& index_file_path, |
| 160 SimpleIndexLoadResult* out_result); | 161 SimpleIndexLoadResult* out_result); |
| 161 | 162 |
| 162 // Determines if an index file is stale relative to the time of last | 163 // Determines if an index file is stale relative to the time of last |
| 163 // modification of the cache directory. Obsolete, used only for a histogram to | 164 // modification of the cache directory. Obsolete, used only for a histogram to |
| 164 // compare with the new method. | 165 // compare with the new method. |
| 165 // TODO(pasko): remove this method after getting enough data. | 166 // TODO(pasko): remove this method after getting enough data. |
| 166 static bool LegacyIsIndexFileStale(base::Time cache_last_modified, | 167 static bool LegacyIsIndexFileStale(base::Time cache_last_modified, |
| 167 const base::FilePath& index_file_path); | 168 const base::FilePath& index_file_path); |
| 168 | 169 |
| 169 struct PickleHeader : public Pickle::Header { | 170 struct PickleHeader : public base::Pickle::Header { |
| 170 uint32 crc; | 171 uint32 crc; |
| 171 }; | 172 }; |
| 172 | 173 |
| 173 const scoped_refptr<base::SingleThreadTaskRunner> cache_thread_; | 174 const scoped_refptr<base::SingleThreadTaskRunner> cache_thread_; |
| 174 const scoped_refptr<base::TaskRunner> worker_pool_; | 175 const scoped_refptr<base::TaskRunner> worker_pool_; |
| 175 const net::CacheType cache_type_; | 176 const net::CacheType cache_type_; |
| 176 const base::FilePath cache_directory_; | 177 const base::FilePath cache_directory_; |
| 177 const base::FilePath index_file_; | 178 const base::FilePath index_file_; |
| 178 const base::FilePath temp_index_file_; | 179 const base::FilePath temp_index_file_; |
| 179 | 180 |
| 180 static const char kIndexDirectory[]; | 181 static const char kIndexDirectory[]; |
| 181 static const char kIndexFileName[]; | 182 static const char kIndexFileName[]; |
| 182 static const char kTempIndexFileName[]; | 183 static const char kTempIndexFileName[]; |
| 183 | 184 |
| 184 DISALLOW_COPY_AND_ASSIGN(SimpleIndexFile); | 185 DISALLOW_COPY_AND_ASSIGN(SimpleIndexFile); |
| 185 }; | 186 }; |
| 186 | 187 |
| 187 | 188 |
| 188 } // namespace disk_cache | 189 } // namespace disk_cache |
| 189 | 190 |
| 190 #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ | 191 #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_FILE_H_ |
| OLD | NEW |