| OLD | NEW |
| 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 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 // Destroy our decoded data. This will remove us from | 340 // Destroy our decoded data. This will remove us from |
| 341 // m_liveDecodedResources, and possibly move us to a different | 341 // m_liveDecodedResources, and possibly move us to a different |
| 342 // LRU list in m_allResources. | 342 // LRU list in m_allResources. |
| 343 current->m_resource->prune(); | 343 current->m_resource->prune(); |
| 344 | 344 |
| 345 if (targetSize && m_deadSize <= targetSize) | 345 if (targetSize && m_deadSize <= targetSize) |
| 346 return; | 346 return; |
| 347 } | 347 } |
| 348 // Decoded data may reference other resources. Stop iterating if 'pr
evious' somehow got | 348 // Decoded data may reference other resources. Stop iterating if 'pr
evious' somehow got |
| 349 // kicked out of cache during destroyDecodedData(). | 349 // kicked out of cache during destroyDecodedData(). |
| 350 if (!previous || !previous->m_resource || !contains(previous->m_reso
urce.get())) | 350 if (previous && !contains(previous->m_resource.get())) |
| 351 break; | 351 break; |
| 352 current = previous; | 352 current = previous; |
| 353 } | 353 } |
| 354 | 354 |
| 355 // Now evict objects from this queue. | 355 // Now evict objects from this queue. |
| 356 current = m_allResources[i].m_tail; | 356 current = m_allResources[i].m_tail; |
| 357 while (current) { | 357 while (current) { |
| 358 MemoryCacheEntry* previous = current->m_previousInAllResourcesList; | 358 MemoryCacheEntry* previous = current->m_previousInAllResourcesList; |
| 359 if (previous) { | 359 if (previous) { |
| 360 // These release assertions are for investigating crashes and | 360 // These release assertions are for investigating crashes and |
| 361 // should be removed shortly. | 361 // should be removed shortly. |
| 362 RELEASE_ASSERT(previous->m_resource); | 362 RELEASE_ASSERT(previous->m_resource); |
| 363 RELEASE_ASSERT(contains(previous->m_resource.get())); | 363 RELEASE_ASSERT(contains(previous->m_resource.get())); |
| 364 } | 364 } |
| 365 if (!current->m_resource->hasClients() && !current->m_resource->isPr
eloaded() | 365 if (!current->m_resource->hasClients() && !current->m_resource->isPr
eloaded() |
| 366 && !current->m_resource->isCacheValidator() && current->m_resour
ce->canDelete() | 366 && !current->m_resource->isCacheValidator() && current->m_resour
ce->canDelete() |
| 367 && current->m_resource->type() != Resource::MainResource) { | 367 && current->m_resource->type() != Resource::MainResource) { |
| 368 // Main Resources in the cache are only substitue data that was | 368 // Main Resources in the cache are only substitue data that was |
| 369 // precached and should not be evicted. | 369 // precached and should not be evicted. |
| 370 bool wasEvicted = evict(current); | 370 bool wasEvicted = evict(current); |
| 371 ASSERT_UNUSED(wasEvicted, wasEvicted); | 371 ASSERT_UNUSED(wasEvicted, wasEvicted); |
| 372 if (targetSize && m_deadSize <= targetSize) | 372 if (targetSize && m_deadSize <= targetSize) |
| 373 return; | 373 return; |
| 374 } | 374 } |
| 375 if (!previous || !previous->m_resource || !contains(previous->m_reso
urce.get())) | 375 if (previous && !contains(previous->m_resource.get())) |
| 376 break; | 376 break; |
| 377 current = previous; | 377 current = previous; |
| 378 } | 378 } |
| 379 | 379 |
| 380 // Shrink the vector back down so we don't waste time inspecting | 380 // Shrink the vector back down so we don't waste time inspecting |
| 381 // empty LRU lists on future prunes. | 381 // empty LRU lists on future prunes. |
| 382 if (m_allResources[i].m_head) | 382 if (m_allResources[i].m_head) |
| 383 canShrinkLRULists = false; | 383 canShrinkLRULists = false; |
| 384 else if (canShrinkLRULists) | 384 else if (canShrinkLRULists) |
| 385 m_allResources.resize(i); | 385 m_allResources.resize(i); |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 void MemoryCache::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProc
essMemoryDump* memoryDump) | 784 void MemoryCache::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProc
essMemoryDump* memoryDump) |
| 785 { | 785 { |
| 786 for (const auto& resourceMapIter : m_resourceMaps) { | 786 for (const auto& resourceMapIter : m_resourceMaps) { |
| 787 for (const auto& resourceIter : *resourceMapIter.value) { | 787 for (const auto& resourceIter : *resourceMapIter.value) { |
| 788 Resource* resource = resourceIter.value->m_resource.get(); | 788 Resource* resource = resourceIter.value->m_resource.get(); |
| 789 resource->onMemoryDump(levelOfDetail, memoryDump); | 789 resource->onMemoryDump(levelOfDetail, memoryDump); |
| 790 } | 790 } |
| 791 } | 791 } |
| 792 } | 792 } |
| 793 | 793 |
| 794 bool MemoryCache::isInSameLRUListForTest(const Resource* x, const Resource* y) | |
| 795 { | |
| 796 MemoryCacheEntry* ex = getEntryForResource(x); | |
| 797 MemoryCacheEntry* ey = getEntryForResource(y); | |
| 798 ASSERT(ex); | |
| 799 ASSERT(ey); | |
| 800 return lruListFor(ex->m_accessCount, x->size()) == lruListFor(ey->m_accessCo
unt, y->size()); | |
| 801 } | |
| 802 | |
| 803 void MemoryCache::registerLiveResource(Resource& resource) | 794 void MemoryCache::registerLiveResource(Resource& resource) |
| 804 { | 795 { |
| 805 #if ENABLE(OILPAN) | 796 #if ENABLE(OILPAN) |
| 806 ASSERT(!m_liveResources.contains(&resource)); | 797 ASSERT(!m_liveResources.contains(&resource)); |
| 807 m_liveResources.add(&resource); | 798 m_liveResources.add(&resource); |
| 808 #endif | 799 #endif |
| 809 } | 800 } |
| 810 | 801 |
| 811 void MemoryCache::unregisterLiveResource(Resource& resource) | 802 void MemoryCache::unregisterLiveResource(Resource& resource) |
| 812 { | 803 { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 printf("(%.1fK, %.1fK, %uA, %dR, %d, %d); ", currentResource->de
codedSize() / 1024.0f, (currentResource->encodedSize() + currentResource->overhe
adSize()) / 1024.0f, current->m_accessCount, currentResource->hasClients(), curr
entResource->isPurgeable(), currentResource->wasPurged()); | 845 printf("(%.1fK, %.1fK, %uA, %dR, %d, %d); ", currentResource->de
codedSize() / 1024.0f, (currentResource->encodedSize() + currentResource->overhe
adSize()) / 1024.0f, current->m_accessCount, currentResource->hasClients(), curr
entResource->isPurgeable(), currentResource->wasPurged()); |
| 855 | 846 |
| 856 current = current->m_previousInAllResourcesList; | 847 current = current->m_previousInAllResourcesList; |
| 857 } | 848 } |
| 858 } | 849 } |
| 859 } | 850 } |
| 860 | 851 |
| 861 #endif // MEMORY_CACHE_STATS | 852 #endif // MEMORY_CACHE_STATS |
| 862 | 853 |
| 863 } // namespace blink | 854 } // namespace blink |
| OLD | NEW |