OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/renderer_host/backing_store_manager.h" | 5 #include "content/browser/renderer_host/backing_store_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/memory/mru_cache.h" | 9 #include "base/memory/mru_cache.h" |
10 #include "base/sys_info.h" | 10 #include "base/sys_info.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 } | 121 } |
122 | 122 |
123 // TODO(erikkay) 32bpp is not always accurate | 123 // TODO(erikkay) 32bpp is not always accurate |
124 size_t new_mem = backing_store_size.GetArea() * 4; | 124 size_t new_mem = backing_store_size.GetArea() * 4; |
125 size_t current_mem = BackingStoreManager::MemorySize(); | 125 size_t current_mem = BackingStoreManager::MemorySize(); |
126 size_t max_mem = MaxBackingStoreMemory(); | 126 size_t max_mem = MaxBackingStoreMemory(); |
127 DCHECK(new_mem < max_mem); | 127 DCHECK(new_mem < max_mem); |
128 if (current_mem + new_mem > max_mem) { | 128 if (current_mem + new_mem > max_mem) { |
129 // Need to remove old backing stores to make room for the new one. We | 129 // Need to remove old backing stores to make room for the new one. We |
130 // don't want to do this when the backing store is being replace by a new | 130 // don't want to do this when the backing store is being replace by a new |
131 // one for the same tab, but this case won't get called then: we'll have | 131 // one for the same WebContents, but this case won't get called then: we'll |
132 // removed the old one in the RemoveBackingStore above, and the cache | 132 // have removed the old one in the RemoveBackingStore above, and the cache |
133 // won't be over-sized. | 133 // won't be over-sized. |
134 CreateCacheSpace((current_mem + new_mem) - max_mem); | 134 CreateCacheSpace((current_mem + new_mem) - max_mem); |
135 } | 135 } |
136 DCHECK((BackingStoreManager::MemorySize() + new_mem) <= max_mem); | 136 DCHECK((BackingStoreManager::MemorySize() + new_mem) <= max_mem); |
137 | 137 |
138 BackingStoreCache* cache; | 138 BackingStoreCache* cache; |
139 if (new_mem > kSmallThreshold) { | 139 if (new_mem > kSmallThreshold) { |
140 // Limit the number of large backing stores (tabs) to the memory tier number | 140 // Limit the number of large backing stores (tabs) to the memory tier number |
141 // (between 2-5). While we allow a larger amount of memory for people who | 141 // (between 2-5). While we allow a larger amount of memory for people who |
142 // have large windows, this means that those who use small browser windows | 142 // have large windows, this means that those who use small browser windows |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 size_t mem = 0; | 271 size_t mem = 0; |
272 BackingStoreCache::iterator it; | 272 BackingStoreCache::iterator it; |
273 for (it = large_cache->begin(); it != large_cache->end(); ++it) | 273 for (it = large_cache->begin(); it != large_cache->end(); ++it) |
274 mem += it->second->MemorySize(); | 274 mem += it->second->MemorySize(); |
275 | 275 |
276 for (it = small_cache->begin(); it != small_cache->end(); ++it) | 276 for (it = small_cache->begin(); it != small_cache->end(); ++it) |
277 mem += it->second->MemorySize(); | 277 mem += it->second->MemorySize(); |
278 | 278 |
279 return mem; | 279 return mem; |
280 } | 280 } |
OLD | NEW |