Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: Source/core/fetch/MemoryCache.cpp

Issue 217643003: Revert of MemoryCache: make sure that Resources are evicted only when they can be deleted (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | Source/core/fetch/MemoryCacheTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
5 Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 5 Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 size_t targetSize = static_cast<size_t>(capacity * cTargetPrunePercentage); // Cut by a percentage to avoid immediately pruning again. 227 size_t targetSize = static_cast<size_t>(capacity * cTargetPrunePercentage); // Cut by a percentage to avoid immediately pruning again.
228 228
229 int size = m_allResources.size(); 229 int size = m_allResources.size();
230 230
231 // See if we have any purged resources we can evict. 231 // See if we have any purged resources we can evict.
232 for (int i = 0; i < size; i++) { 232 for (int i = 0; i < size; i++) {
233 MemoryCacheEntry* current = m_allResources[i].m_tail; 233 MemoryCacheEntry* current = m_allResources[i].m_tail;
234 while (current) { 234 while (current) {
235 MemoryCacheEntry* previous = current->m_previousInAllResourcesList; 235 MemoryCacheEntry* previous = current->m_previousInAllResourcesList;
236 if (current->m_resource->wasPurged() && current->m_resource->canDele te()) { 236 if (current->m_resource->wasPurged()) {
237 ASSERT(!current->m_resource->hasClients()); 237 ASSERT(!current->m_resource->hasClients());
238 ASSERT(!current->m_resource->isPreloaded()); 238 ASSERT(!current->m_resource->isPreloaded());
239 bool wasEvicted = evict(current); 239 evict(current);
240 ASSERT_UNUSED(wasEvicted, wasEvicted);
241 } 240 }
242 current = previous; 241 current = previous;
243 } 242 }
244 } 243 }
245 if (targetSize && m_deadSize <= targetSize) 244 if (targetSize && m_deadSize <= targetSize)
246 return; 245 return;
247 246
248 bool canShrinkLRULists = true; 247 bool canShrinkLRULists = true;
249 for (int i = size - 1; i >= 0; i--) { 248 for (int i = size - 1; i >= 0; i--) {
250 // Remove from the tail, since this is the least frequently accessed of the objects. 249 // Remove from the tail, since this is the least frequently accessed of the objects.
(...skipping 18 matching lines...) Expand all
269 if (previous && !contains(previous->m_resource.get())) 268 if (previous && !contains(previous->m_resource.get()))
270 break; 269 break;
271 current = previous; 270 current = previous;
272 } 271 }
273 272
274 // Now evict objects from this queue. 273 // Now evict objects from this queue.
275 current = m_allResources[i].m_tail; 274 current = m_allResources[i].m_tail;
276 while (current) { 275 while (current) {
277 MemoryCacheEntry* previous = current->m_previousInAllResourcesList; 276 MemoryCacheEntry* previous = current->m_previousInAllResourcesList;
278 ASSERT(!previous || contains(previous->m_resource.get())); 277 ASSERT(!previous || contains(previous->m_resource.get()));
279 if (!current->m_resource->hasClients() && !current->m_resource->isPr eloaded() 278 if (!current->m_resource->hasClients() && !current->m_resource->isPr eloaded() && !current->m_resource->isCacheValidator()) {
280 && !current->m_resource->isCacheValidator() && current->m_resour ce->canDelete()) { 279 evict(current);
281 bool wasEvicted = evict(current);
282 ASSERT_UNUSED(wasEvicted, wasEvicted);
283 if (targetSize && m_deadSize <= targetSize) 280 if (targetSize && m_deadSize <= targetSize)
284 return; 281 return;
285 } 282 }
286 if (previous && !contains(previous->m_resource.get())) 283 if (previous && !contains(previous->m_resource.get()))
287 break; 284 break;
288 current = previous; 285 current = previous;
289 } 286 }
290 287
291 // Shrink the vector back down so we don't waste time inspecting 288 // Shrink the vector back down so we don't waste time inspecting
292 // empty LRU lists on future prunes. 289 // empty LRU lists on future prunes.
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 printf("(%.1fK, %.1fK, %uA, %dR, %d, %d); ", current->decodedSiz e() / 1024.0f, (current->encodedSize() + current->overheadSize()) / 1024.0f, cur rent->accessCount(), current->hasClients(), current->isPurgeable(), current->was Purged()); 681 printf("(%.1fK, %.1fK, %uA, %dR, %d, %d); ", current->decodedSiz e() / 1024.0f, (current->encodedSize() + current->overheadSize()) / 1024.0f, cur rent->accessCount(), current->hasClients(), current->isPurgeable(), current->was Purged());
685 682
686 current = prev; 683 current = prev;
687 } 684 }
688 } 685 }
689 } 686 }
690 687
691 #endif // MEMORY_CACHE_STATS 688 #endif // MEMORY_CACHE_STATS
692 689
693 } // namespace WebCore 690 } // namespace WebCore
OLDNEW
« no previous file with comments | « no previous file | Source/core/fetch/MemoryCacheTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698