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

Side by Side Diff: Source/core/fetch/Resource.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, 8 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 | « Source/core/fetch/Resource.h ('k') | Source/core/fetch/ResourceFetcher.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) 2006 Samuel Weinig (sam.weinig@gmail.com) 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
6 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 6 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 if (!m_data->isLocked()) 357 if (!m_data->isLocked())
358 return true; 358 return true;
359 359
360 if (!memoryCache()->contains(this) || hasClients() || m_handleCount > 1 || m _proxyResource || m_resourceToRevalidate || !m_loadFinishTime || !isSafeToUnlock ()) 360 if (!memoryCache()->contains(this) || hasClients() || m_handleCount > 1 || m _proxyResource || m_resourceToRevalidate || !m_loadFinishTime || !isSafeToUnlock ())
361 return false; 361 return false;
362 362
363 m_data->unlock(); 363 m_data->unlock();
364 return true; 364 return true;
365 } 365 }
366 366
367 bool Resource::hasRightHandleCountApartFromCache(unsigned targetCount) const
368 {
369 return m_handleCount == targetCount + memoryCache()->contains(this);
370 }
371
372 void Resource::responseReceived(const ResourceResponse& response) 367 void Resource::responseReceived(const ResourceResponse& response)
373 { 368 {
374 setResponse(response); 369 setResponse(response);
375 m_responseTimestamp = currentTime(); 370 m_responseTimestamp = currentTime();
376 String encoding = response.textEncodingName(); 371 String encoding = response.textEncodingName();
377 if (!encoding.isNull()) 372 if (!encoding.isNull())
378 setEncoding(encoding); 373 setEncoding(encoding);
379 374
380 if (!m_resourceToRevalidate) 375 if (!m_resourceToRevalidate)
381 return; 376 return;
(...skipping 19 matching lines...) Expand all
401 // Currently, only one type of cached metadata per resource is supported. 396 // Currently, only one type of cached metadata per resource is supported.
402 // If the need arises for multiple types of metadata per resource this could 397 // If the need arises for multiple types of metadata per resource this could
403 // be enhanced to store types of metadata in a map. 398 // be enhanced to store types of metadata in a map.
404 ASSERT(!m_cachedMetadata); 399 ASSERT(!m_cachedMetadata);
405 400
406 m_cachedMetadata = CachedMetadata::create(dataTypeID, data, size); 401 m_cachedMetadata = CachedMetadata::create(dataTypeID, data, size);
407 const Vector<char>& serializedData = m_cachedMetadata->serialize(); 402 const Vector<char>& serializedData = m_cachedMetadata->serialize();
408 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.respo nseTime(), serializedData.data(), serializedData.size()); 403 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.respo nseTime(), serializedData.data(), serializedData.size());
409 } 404 }
410 405
411 bool Resource::canDelete() const
412 {
413 return !hasClients() && !m_loader && !m_preloadCount && hasRightHandleCountA partFromCache(0)
414 && !m_protectorCount && !m_resourceToRevalidate && !m_proxyResource;
415 }
416
417 bool Resource::hasOneHandleApartFromCache() const
418 {
419 return hasRightHandleCountApartFromCache(1);
420 }
421
422 CachedMetadata* Resource::cachedMetadata(unsigned dataTypeID) const 406 CachedMetadata* Resource::cachedMetadata(unsigned dataTypeID) const
423 { 407 {
424 if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID) 408 if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID)
425 return 0; 409 return 0;
426 return m_cachedMetadata.get(); 410 return m_cachedMetadata.get();
427 } 411 }
428 412
429 void Resource::setCacheLiveResourcePriority(CacheLiveResourcePriority priority) 413 void Resource::setCacheLiveResourcePriority(CacheLiveResourcePriority priority)
430 { 414 {
431 if (memoryCache()->contains(this) && memoryCache()->isInLiveDecodedResources List(this) && cacheLiveResourcePriority() != static_cast<unsigned>(priority)) { 415 if (memoryCache()->contains(this) && memoryCache()->isInLiveDecodedResources List(this) && cacheLiveResourcePriority() != static_cast<unsigned>(priority)) {
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 764
781 if (m_resourceToRevalidate) 765 if (m_resourceToRevalidate)
782 m_handlesToRevalidate.remove(h); 766 m_handlesToRevalidate.remove(h);
783 767
784 if (!m_handleCount) { 768 if (!m_handleCount) {
785 if (deleteIfPossible()) 769 if (deleteIfPossible())
786 return; 770 return;
787 unlock(); 771 unlock();
788 } else if (m_handleCount == 1 && memoryCache()->contains(this)) { 772 } else if (m_handleCount == 1 && memoryCache()->contains(this)) {
789 unlock(); 773 unlock();
790 if (!hasClients())
791 memoryCache()->prune(this);
792 } 774 }
793 } 775 }
794 776
795 bool Resource::canReuseRedirectChain() const 777 bool Resource::canReuseRedirectChain() const
796 { 778 {
797 for (size_t i = 0; i < m_redirectChain.size(); ++i) { 779 for (size_t i = 0; i < m_redirectChain.size(); ++i) {
798 if (!canUseResponse(m_redirectChain[i].m_redirectResponse, m_responseTim estamp)) 780 if (!canUseResponse(m_redirectChain[i].m_redirectResponse, m_responseTim estamp))
799 return false; 781 return false;
800 } 782 }
801 return true; 783 return true;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 return "Shader"; 974 return "Shader";
993 case Resource::ImportResource: 975 case Resource::ImportResource:
994 return "ImportResource"; 976 return "ImportResource";
995 } 977 }
996 ASSERT_NOT_REACHED(); 978 ASSERT_NOT_REACHED();
997 return "Unknown"; 979 return "Unknown";
998 } 980 }
999 #endif // !LOG_DISABLED 981 #endif // !LOG_DISABLED
1000 982
1001 } 983 }
OLDNEW
« no previous file with comments | « Source/core/fetch/Resource.h ('k') | Source/core/fetch/ResourceFetcher.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698