OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // This is the browser side of the cache manager, it tracks the activity of the | 5 // This is the browser side of the cache manager, it tracks the activity of the |
6 // render processes and allocates available memory cache resources. | 6 // render processes and allocates available memory cache resources. |
7 | 7 |
8 #ifndef COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ | 8 #ifndef COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ |
9 #define COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ | 9 #define COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ |
10 | 10 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 // cache resources. | 77 // cache resources. |
78 // | 78 // |
79 // When a renderer moves from being inactive to being active, the cache | 79 // When a renderer moves from being inactive to being active, the cache |
80 // manager may decide to adjust its resource allocation, but it will delay | 80 // manager may decide to adjust its resource allocation, but it will delay |
81 // the recalculation, allowing ObserveActivity to return quickly. | 81 // the recalculation, allowing ObserveActivity to return quickly. |
82 void ObserveActivity(int renderer_id); | 82 void ObserveActivity(int renderer_id); |
83 | 83 |
84 // Periodically, renderers should inform the cache manager of their current | 84 // Periodically, renderers should inform the cache manager of their current |
85 // statistics. The more up-to-date the cache manager's statistics, the | 85 // statistics. The more up-to-date the cache manager's statistics, the |
86 // better it can allocate cache resources. | 86 // better it can allocate cache resources. |
87 void ObserveStats(int renderer_id, | 87 void ObserveStats(int renderer_id, uint64_t capacity, uint64_t size); |
88 uint64_t min_dead_capacity, | |
89 uint64_t max_dead_capacity, | |
90 uint64_t capacity, | |
91 uint64_t live_size, | |
92 uint64_t dead_size); | |
93 | 88 |
94 // The global limit on the number of bytes in all the in-memory caches. | 89 // The global limit on the number of bytes in all the in-memory caches. |
95 uint64_t global_size_limit() const { return global_size_limit_; } | 90 uint64_t global_size_limit() const { return global_size_limit_; } |
96 | 91 |
97 // Sets the global size limit, forcing a recalculation of cache allocations. | 92 // Sets the global size limit, forcing a recalculation of cache allocations. |
98 void SetGlobalSizeLimit(uint64_t bytes); | 93 void SetGlobalSizeLimit(uint64_t bytes); |
99 | 94 |
100 // Clears all in-memory caches. | 95 // Clears all in-memory caches. |
101 void ClearCache(); | 96 void ClearCache(); |
102 | 97 |
(...skipping 15 matching lines...) Expand all Loading... |
118 static uint64_t GetDefaultGlobalSizeLimit(); | 113 static uint64_t GetDefaultGlobalSizeLimit(); |
119 | 114 |
120 protected: | 115 protected: |
121 // The amount of idle time before we consider a tab to be "inactive" | 116 // The amount of idle time before we consider a tab to be "inactive" |
122 static const int kRendererInactiveThresholdMinutes = 5; | 117 static const int kRendererInactiveThresholdMinutes = 5; |
123 | 118 |
124 // Keep track of some renderer information. | 119 // Keep track of some renderer information. |
125 struct RendererInfo { | 120 struct RendererInfo { |
126 // The access time for this renderer. | 121 // The access time for this renderer. |
127 base::Time access; | 122 base::Time access; |
128 uint64_t min_dead_capacity; | |
129 uint64_t max_dead_capacity; | |
130 uint64_t capacity; | 123 uint64_t capacity; |
131 uint64_t live_size; | 124 uint64_t size; |
132 uint64_t dead_size; | |
133 }; | 125 }; |
134 | 126 |
135 typedef std::map<int, RendererInfo> StatsMap; | 127 typedef std::map<int, RendererInfo> StatsMap; |
136 | 128 |
137 // An allocation is the number of bytes a specific renderer should use for | 129 // An allocation is the number of bytes a specific renderer should use for |
138 // its cache. | 130 // its cache. |
139 typedef std::pair<int,uint64_t> Allocation; | 131 typedef std::pair<int,uint64_t> Allocation; |
140 | 132 |
141 // An allocation strategy is a list of allocations specifying the resources | 133 // An allocation strategy is a list of allocations specifying the resources |
142 // each renderer is permitted to consume for its cache. | 134 // each renderer is permitted to consume for its cache. |
(...skipping 27 matching lines...) Expand all Loading... |
170 // Ignore cache statistics and divide resources equally among the given | 162 // Ignore cache statistics and divide resources equally among the given |
171 // set of caches. | 163 // set of caches. |
172 DIVIDE_EVENLY, | 164 DIVIDE_EVENLY, |
173 | 165 |
174 // Allow each renderer to keep its current set of cached resources, with | 166 // Allow each renderer to keep its current set of cached resources, with |
175 // some extra allocation to store new objects. | 167 // some extra allocation to store new objects. |
176 KEEP_CURRENT_WITH_HEADROOM, | 168 KEEP_CURRENT_WITH_HEADROOM, |
177 | 169 |
178 // Allow each renderer to keep its current set of cached resources. | 170 // Allow each renderer to keep its current set of cached resources. |
179 KEEP_CURRENT, | 171 KEEP_CURRENT, |
180 | |
181 // Allow each renderer to keep cache resources it believes are currently | |
182 // being used, with some extra allocation to store new objects. | |
183 KEEP_LIVE_WITH_HEADROOM, | |
184 | |
185 // Allow each renderer to keep cache resources it believes are currently | |
186 // being used, but instruct the renderer to discard all other data. | |
187 KEEP_LIVE, | |
188 }; | 172 }; |
189 | 173 |
190 // Helper functions for devising an allocation strategy | 174 // Helper functions for devising an allocation strategy |
191 | 175 |
192 // Add up all the stats from the given set of renderers and place the result | 176 // Add up all the stats from the given set of renderers and place the result |
193 // in the given parameters. | 177 // in the given parameters. |
194 void GatherStats(const std::set<int>& renderers, | 178 void GatherStats(const std::set<int>& renderers, |
195 uint64_t* capacity, | 179 uint64_t* capacity, |
196 uint64_t* live_size, | 180 uint64_t* size); |
197 uint64_t* dead_size); | |
198 | 181 |
199 // Get the amount of memory that would be required to implement |tactic| | 182 // Get the amount of memory that would be required to implement |tactic| |
200 // using the specified allocation tactic. This function defines the | 183 // using the specified allocation tactic. This function defines the |
201 // semantics for each of the tactics. | 184 // semantics for each of the tactics. |
202 static uint64_t GetSize(AllocationTactic tactic, | 185 static uint64_t GetSize(AllocationTactic tactic, uint64_t size); |
203 uint64_t live_size, | |
204 uint64_t dead_size); | |
205 | 186 |
206 // Attempt to use the specified tactics to compute an allocation strategy | 187 // Attempt to use the specified tactics to compute an allocation strategy |
207 // and place the result in |strategy|. |active_stats| and |inactive_stats| | 188 // and place the result in |strategy|. |active_stats| and |inactive_stats| |
208 // are the aggregate statistics for |active_renderers_| and | 189 // are the aggregate statistics for |active_renderers_| and |
209 // |inactive_renderers_|, respectively. | 190 // |inactive_renderers_|, respectively. |
210 // | 191 // |
211 // Returns |true| on success and |false| on failure. Does not modify | 192 // Returns |true| on success and |false| on failure. Does not modify |
212 // |strategy| on failure. | 193 // |strategy| on failure. |
213 bool AttemptTactic(AllocationTactic active_tactic, | 194 bool AttemptTactic(AllocationTactic active_tactic, |
214 uint64_t active_live_size, | 195 uint64_t active_size, |
215 uint64_t active_dead_size, | |
216 AllocationTactic inactive_tactic, | 196 AllocationTactic inactive_tactic, |
217 uint64_t inactive_live_size, | 197 uint64_t inactive_size, |
218 uint64_t inactive_dead_size, | |
219 AllocationStrategy* strategy); | 198 AllocationStrategy* strategy); |
220 | 199 |
221 // For each renderer in |renderers|, computes its allocation according to | 200 // For each renderer in |renderers|, computes its allocation according to |
222 // |tactic| and add the result to |strategy|. Any |extra_bytes_to_allocate| | 201 // |tactic| and add the result to |strategy|. Any |extra_bytes_to_allocate| |
223 // is divided evenly among the renderers. | 202 // is divided evenly among the renderers. |
224 void AddToStrategy(const std::set<int>& renderers, | 203 void AddToStrategy(const std::set<int>& renderers, |
225 AllocationTactic tactic, | 204 AllocationTactic tactic, |
226 uint64_t extra_bytes_to_allocate, | 205 uint64_t extra_bytes_to_allocate, |
227 AllocationStrategy* strategy); | 206 AllocationStrategy* strategy); |
228 | 207 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 WebCacheServicesMap web_cache_services_; | 245 WebCacheServicesMap web_cache_services_; |
267 | 246 |
268 base::WeakPtrFactory<WebCacheManager> weak_factory_; | 247 base::WeakPtrFactory<WebCacheManager> weak_factory_; |
269 | 248 |
270 DISALLOW_COPY_AND_ASSIGN(WebCacheManager); | 249 DISALLOW_COPY_AND_ASSIGN(WebCacheManager); |
271 }; | 250 }; |
272 | 251 |
273 } // namespace web_cache | 252 } // namespace web_cache |
274 | 253 |
275 #endif // COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ | 254 #endif // COMPONENTS_WEB_CACHE_BROWSER_WEB_CACHE_MANAGER_H_ |
OLD | NEW |