| Index: third_party/WebKit/Source/core/fetch/MemoryCache.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/MemoryCache.cpp b/third_party/WebKit/Source/core/fetch/MemoryCache.cpp
|
| index 8aad84ef9bff434fae49d13d63ca1421cd1fa296..dade33621c1c86616ba772536871ae2abe19f339 100644
|
| --- a/third_party/WebKit/Source/core/fetch/MemoryCache.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/MemoryCache.cpp
|
| @@ -23,7 +23,6 @@
|
| #include "core/fetch/MemoryCache.h"
|
|
|
| #include "platform/Logging.h"
|
| -#include "platform/RuntimeEnabledFeatures.h"
|
| #include "platform/TraceEvent.h"
|
| #include "platform/weborigin/SecurityOrigin.h"
|
| #include "platform/weborigin/SecurityOriginHash.h"
|
| @@ -61,25 +60,9 @@ MemoryCache* replaceMemoryCacheForTesting(MemoryCache* cache)
|
| return oldCache;
|
| }
|
|
|
| -MemoryCacheEntry::MemoryCacheEntry(Resource* resource)
|
| - : m_inLiveDecodedResourcesList(false)
|
| - , m_accessCount(0)
|
| - , m_lastDecodedAccessTime(0.0)
|
| - , m_previousInLiveResourcesList(nullptr)
|
| - , m_nextInLiveResourcesList(nullptr)
|
| - , m_previousInAllResourcesList(nullptr)
|
| - , m_nextInAllResourcesList(nullptr)
|
| -{
|
| - if (RuntimeEnabledFeatures::weakMemoryCacheEnabled())
|
| - m_resourceWeak = resource;
|
| - else
|
| - m_resource = resource;
|
| -}
|
| -
|
| DEFINE_TRACE(MemoryCacheEntry)
|
| {
|
| visitor->trace(m_resource);
|
| - visitor->trace(m_resourceWeak);
|
| visitor->trace(m_previousInLiveResourcesList);
|
| visitor->trace(m_nextInLiveResourcesList);
|
| visitor->trace(m_previousInAllResourcesList);
|
| @@ -89,13 +72,10 @@ DEFINE_TRACE(MemoryCacheEntry)
|
| void MemoryCacheEntry::dispose()
|
| {
|
| m_resource.clear();
|
| - m_resourceWeak.clear();
|
| }
|
|
|
| Resource* MemoryCacheEntry::resource()
|
| {
|
| - if (RuntimeEnabledFeatures::weakMemoryCacheEnabled())
|
| - return m_resourceWeak.get();
|
| return m_resource.get();
|
| }
|
|
|
| @@ -183,7 +163,7 @@ void MemoryCache::add(Resource* resource)
|
| ASSERT(resource->url().isValid());
|
| ResourceMap* resources = ensureResourceMap(resource->cacheIdentifier());
|
| KURL url = removeFragmentIdentifierIfNeeded(resource->url());
|
| - RELEASE_ASSERT(!contains(resource));
|
| + RELEASE_ASSERT(!resources->contains(url));
|
| resources->set(url, MemoryCacheEntry::create(resource));
|
| update(resource, 0, resource->size(), true);
|
|
|
| @@ -233,11 +213,8 @@ HeapVector<Member<Resource>> MemoryCache::resourcesForURL(const KURL& resourceUR
|
| KURL url = removeFragmentIdentifierIfNeeded(resourceURL);
|
| HeapVector<Member<Resource>> results;
|
| for (const auto& resourceMapIter : m_resourceMaps) {
|
| - if (MemoryCacheEntry* entry = resourceMapIter.value->get(url)) {
|
| - Resource* resource = entry->resource();
|
| - if (resource)
|
| - results.append(resource);
|
| - }
|
| + if (MemoryCacheEntry* entry = resourceMapIter.value->get(url))
|
| + results.append(entry->resource());
|
| }
|
| return results;
|
| }
|
| @@ -282,10 +259,6 @@ void MemoryCache::pruneLiveResources(PruneStrategy strategy)
|
| while (current) {
|
| Resource* resource = current->resource();
|
| MemoryCacheEntry* previous = current->m_previousInLiveResourcesList;
|
| - if (!resource) {
|
| - current = previous;
|
| - continue;
|
| - }
|
| ASSERT(resource->hasClientsOrObservers());
|
|
|
| if (resource->isLoaded() && resource->decodedSize()) {
|
| @@ -392,7 +365,6 @@ void MemoryCache::evict(MemoryCacheEntry* entry)
|
| ASSERT(WTF::isMainThread());
|
|
|
| Resource* resource = entry->resource();
|
| - DCHECK(resource);
|
| WTF_LOG(ResourceLoading, "Evicting resource %p for '%s' from cache", resource, resource->url().getString().latin1().data());
|
| // The resource may have already been removed by someone other than our caller,
|
| // who needed a fresh copy for a reload. See <http://bugs.webkit.org/show_bug.cgi?id=12479#c6>.
|
| @@ -413,7 +385,7 @@ void MemoryCache::evict(MemoryCacheEntry* entry)
|
|
|
| MemoryCacheEntry* MemoryCache::getEntryForResource(const Resource* resource) const
|
| {
|
| - if (!resource || resource->url().isNull() || resource->url().isEmpty())
|
| + if (resource->url().isNull() || resource->url().isEmpty())
|
| return nullptr;
|
| ResourceMap* resources = m_resourceMaps.get(resource->cacheIdentifier());
|
| if (!resources)
|
| @@ -626,8 +598,6 @@ MemoryCache::Statistics MemoryCache::getStatistics()
|
| for (const auto& resourceMapIter : m_resourceMaps) {
|
| for (const auto& resourceIter : *resourceMapIter.value) {
|
| Resource* resource = resourceIter.value->resource();
|
| - if (!resource)
|
| - continue;
|
| switch (resource->getType()) {
|
| case Resource::Image:
|
| stats.images.addResource(resource);
|
| @@ -664,10 +634,7 @@ void MemoryCache::evictResources()
|
| ResourceMap::iterator resourceIter = resources->begin();
|
| if (resourceIter == resources->end())
|
| break;
|
| - if (resourceIter->value->resource())
|
| - evict(resourceIter->value.get());
|
| - else
|
| - resources->remove(resourceIter);
|
| + evict(resourceIter->value.get());
|
| }
|
| m_resourceMaps.remove(resourceMapIter);
|
| }
|
| @@ -761,8 +728,7 @@ bool MemoryCache::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProc
|
| for (const auto& resourceMapIter : m_resourceMaps) {
|
| for (const auto& resourceIter : *resourceMapIter.value) {
|
| Resource* resource = resourceIter.value->resource();
|
| - if (resource)
|
| - resource->onMemoryDump(levelOfDetail, memoryDump);
|
| + resource->onMemoryDump(levelOfDetail, memoryDump);
|
| }
|
| }
|
| return true;
|
| @@ -811,7 +777,7 @@ void MemoryCache::dumpLRULists(bool includeLive) const
|
| MemoryCacheEntry* current = m_allResources[i].m_tail;
|
| while (current) {
|
| Resource* currentResource = current->resource();
|
| - if (currentResource && (includeLive || !currentResource->hasClientsOrObservers()))
|
| + if (includeLive || !currentResource->hasClientsOrObservers())
|
| printf("(%.1fK, %.1fK, %uA, %dR, %d); ", currentResource->decodedSize() / 1024.0f, (currentResource->encodedSize() + currentResource->overheadSize()) / 1024.0f, current->m_accessCount, currentResource->hasClientsOrObservers(), currentResource->isPurgeable());
|
|
|
| current = current->m_previousInAllResourcesList;
|
|
|