simple_index.h revision bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <list> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/gtest_prod_util.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/weak_ptr.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/single_thread_task_runner.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/threading/thread_checker.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/completion_callback.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/net_export.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/activity_status.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Pickle; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PickleIterator; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace disk_cache { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class SimpleIndexFile; 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NET_EXPORT_PRIVATE EntryMetadata { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntryMetadata(); 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EntryMetadata(base::Time last_used_time, uint64 entry_size); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time GetLastUsedTime() const; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLastUsedTime(const base::Time& last_used_time); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 GetEntrySize() const { return entry_size_; } 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetEntrySize(uint64 entry_size) { entry_size_ = entry_size; } 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Serialize the data into the provided pickle. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Serialize(Pickle* pickle) const; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool Deserialize(PickleIterator* it); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class SimpleIndexFileTest; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When adding new members here, you should update the Serialize() and 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Deserialize() methods. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is the serialized format from Time::ToInternalValue(). 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If you want to make calculations/comparisons, you should use the 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // base::Time() class. Use the GetLastUsedTime() method above. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(felipeg): Use Time() here. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 last_used_time_; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 entry_size_; // Storage size in bytes. 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class is not Thread-safe. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NET_EXPORT_PRIVATE SimpleIndex 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public base::SupportsWeakPtr<SimpleIndex> { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::vector<uint64> HashList; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SimpleIndex(base::SingleThreadTaskRunner* io_thread, 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& cache_directory, 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<SimpleIndexFile> simple_index_file); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SimpleIndex(); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch void Initialize(base::Time cache_mtime); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool SetMaxSize(int max_bytes); 83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int max_size() const { return max_size_; } 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Insert(const std::string& key); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Remove(const std::string& key); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check whether the index has the entry given the hash of its key. 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool Has(uint64 hash) const; 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update the last used time of the entry with the given key and return true 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // iff the entry exist in the index. 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool UseIfExists(const std::string& key); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void WriteToDisk(); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update the size (in bytes) of an entry, in the metadata stored in the 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // index. This should be the total disk-file size including all streams of the 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry. 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool UpdateEntrySize(const std::string& key, uint64 entry_size); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef base::hash_map<uint64, EntryMetadata> EntrySet; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static void InsertInEntrySet(uint64 hash_key, 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const EntryMetadata& entry_metadata, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntrySet* entry_set); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Executes the |callback| when the index is ready. Allows multiple callbacks. 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int ExecuteWhenReady(const net::CompletionCallback& callback); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Takes out entries from the index that have last accessed time matching the 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // range between |initial_time| and |end_time| where open intervals are 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // possible according to the definition given in |DoomEntriesBetween()| in the 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // disk cache backend interface. Returns the set of hashes taken out. 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<HashList> RemoveEntriesBetween(const base::Time initial_time, 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::Time end_time); 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns the list of all entries key hash. 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<HashList> GetAllHashes(); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns number of indexed entries. 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32 GetEntryCount() const; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class SimpleIndexTest; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, IndexSizeCorrectOnMerge); 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWriteQueued); 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWriteExecuted); 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWritePostponed); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void StartEvictionIfNeeded(); 132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void EvictionDone(int result); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void PostponeWritingToDisk(); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void UpdateEntryIteratorSize(EntrySet::iterator* it, uint64 entry_size); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Must run on IO Thread. 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void MergeInitializingSet(scoped_ptr<EntrySet> index_file_entries, 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool force_index_flush); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnActivityStateChange(base::android::ActivityState state); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::android::ActivityStatus::Listener> activity_status_listener_; 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<HashList> ExtractEntriesBetween(const base::Time initial_time, 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::Time end_time, 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool delete_entries); 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntrySet entries_set_; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 cache_size_; // Total cache storage size in bytes. 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 max_size_; 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 high_watermark_; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 low_watermark_; 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool eviction_in_progress_; 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeTicks eviction_start_time_; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This stores all the hash_key of entries that are removed during 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // initialization. 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::hash_set<uint64> removed_entries_; 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool initialized_; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& cache_directory_; 167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<SimpleIndexFile> index_file_; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> io_thread_; 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // All nonstatic SimpleEntryImpl methods should always be called on the IO 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // thread, in all cases. |io_thread_checker_| documents and enforces this. 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ThreadChecker io_thread_checker_; 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Timestamp of the last time we wrote the index to disk. 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PostponeWritingToDisk() may give up postponing and allow the write if it 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // has been a while since last time we wrote. 178b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::TimeTicks last_write_to_disk_; 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::OneShotTimer<SimpleIndex> write_to_disk_timer_; 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Closure write_to_disk_cb_; 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::list<net::CompletionCallback> CallbackList; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallbackList to_run_when_initialized_; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set to true when the app is on the background. When the app is in the 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // background we can write the index much more frequently, to insure fresh 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // index on next startup. 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool app_on_background_; 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The time in milliseconds for the index to be idle before it gets flushed to 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // the disk. When the app is on foreground the delay is different from the 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // background state. 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int foreground_flush_delay_; 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int background_flush_delay_; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace disk_cache 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 201