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

Side by Side Diff: third_party/WebKit/Source/core/fetch/Resource.cpp

Issue 2253853002: Remove SharedBuffer::unlock() and keep Resource's SharedBuffer always locked (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 4 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
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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 m_response = response; 549 m_response = response;
550 if (m_response.wasFetchedViaServiceWorker()) 550 if (m_response.wasFetchedViaServiceWorker())
551 m_cacheHandler = ServiceWorkerResponseCachedMetadataHandler::create(this , m_fetcherSecurityOrigin.get()); 551 m_cacheHandler = ServiceWorkerResponseCachedMetadataHandler::create(this , m_fetcherSecurityOrigin.get());
552 } 552 }
553 553
554 bool Resource::unlock() 554 bool Resource::unlock()
555 { 555 {
556 if (!m_data) 556 if (!m_data)
557 return false; 557 return false;
558 558
559 if (!m_data->isLocked())
560 return true;
561
562 if (!memoryCache()->contains(this) || hasClientsOrObservers() || !isLoaded() || !isSafeToUnlock()) 559 if (!memoryCache()->contains(this) || hasClientsOrObservers() || !isLoaded() || !isSafeToUnlock())
563 return false; 560 return false;
564 561
565 if (RuntimeEnabledFeatures::doNotUnlockSharedBufferEnabled()) 562 memoryCache()->remove(this);
haraken 2016/08/17 08:13:31 Would you help me understand why you need to proac
hiroshige 2016/08/17 09:02:38 Because the Resource is not expected to be reused
haraken 2016/08/17 09:10:25 Makes sense. I'm feeling that whether we call mem
566 return false;
567
568 DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, unlockHistogram, new E numerationHistogram("Blink.SharedBuffer.Unlock", kLastResourceType));
569 unlockHistogram.count(getType());
570
571 m_data->unlock();
572 return true; 563 return true;
573 } 564 }
574 565
575 void Resource::responseReceived(const ResourceResponse& response, std::unique_pt r<WebDataConsumerHandle>) 566 void Resource::responseReceived(const ResourceResponse& response, std::unique_pt r<WebDataConsumerHandle>)
576 { 567 {
577 m_responseTimestamp = currentTime(); 568 m_responseTimestamp = currentTime();
578 if (m_preloadDiscoveryTime) { 569 if (m_preloadDiscoveryTime) {
579 int timeSinceDiscovery = static_cast<int>(1000 * (monotonicallyIncreasin gTime() - m_preloadDiscoveryTime)); 570 int timeSinceDiscovery = static_cast<int>(1000 * (monotonicallyIncreasin gTime() - m_preloadDiscoveryTime));
580 DEFINE_STATIC_LOCAL(CustomCountHistogram, preloadDiscoveryToFirstByteHis togram, ("PreloadScanner.TTFB", 0, 10000, 50)); 571 DEFINE_STATIC_LOCAL(CustomCountHistogram, preloadDiscoveryToFirstByteHis togram, ("PreloadScanner.TTFB", 0, 10000, 50));
581 preloadDiscoveryToFirstByteHistogram.count(timeSinceDiscovery); 572 preloadDiscoveryToFirstByteHistogram.count(timeSinceDiscovery);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 return true; 660 return true;
670 if (type == Resource::Script) 661 if (type == Resource::Script)
671 return true; 662 return true;
672 if (type == Resource::Font) 663 if (type == Resource::Font)
673 return true; 664 return true;
674 return false; 665 return false;
675 } 666 }
676 667
677 void Resource::willAddClientOrObserver() 668 void Resource::willAddClientOrObserver()
678 { 669 {
679 ASSERT(!isPurgeable());
680 if (m_preloadResult == PreloadNotReferenced) { 670 if (m_preloadResult == PreloadNotReferenced) {
681 if (isLoaded()) 671 if (isLoaded())
682 m_preloadResult = PreloadReferencedWhileComplete; 672 m_preloadResult = PreloadReferencedWhileComplete;
683 else if (isLoading()) 673 else if (isLoading())
684 m_preloadResult = PreloadReferencedWhileLoading; 674 m_preloadResult = PreloadReferencedWhileLoading;
685 else 675 else
686 m_preloadResult = PreloadReferenced; 676 m_preloadResult = PreloadReferenced;
687 677
688 if (m_preloadDiscoveryTime) { 678 if (m_preloadDiscoveryTime) {
689 int timeSinceDiscovery = static_cast<int>(1000 * (monotonicallyIncre asingTime() - m_preloadDiscoveryTime)); 679 int timeSinceDiscovery = static_cast<int>(1000 * (monotonicallyIncre asingTime() - m_preloadDiscoveryTime));
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 } 826 }
837 827
838 void Resource::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProcess MemoryDump* memoryDump) const 828 void Resource::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProcess MemoryDump* memoryDump) const
839 { 829 {
840 static const size_t kMaxURLReportLength = 128; 830 static const size_t kMaxURLReportLength = 128;
841 static const int kMaxResourceClientToShowInMemoryInfra = 10; 831 static const int kMaxResourceClientToShowInMemoryInfra = 10;
842 832
843 const String dumpName = getMemoryDumpName(); 833 const String dumpName = getMemoryDumpName();
844 WebMemoryAllocatorDump* dump = memoryDump->createMemoryAllocatorDump(dumpNam e); 834 WebMemoryAllocatorDump* dump = memoryDump->createMemoryAllocatorDump(dumpNam e);
845 dump->addScalar("encoded_size", "bytes", m_encodedSize); 835 dump->addScalar("encoded_size", "bytes", m_encodedSize);
846 if (m_data && m_data->isLocked()) 836 if (m_data)
847 dump->addScalar("live_size", "bytes", m_encodedSize); 837 dump->addScalar("live_size", "bytes", m_encodedSize);
848 else 838 else
849 dump->addScalar("dead_size", "bytes", m_encodedSize); 839 dump->addScalar("dead_size", "bytes", m_encodedSize);
850 840
851 if (m_data) { 841 if (m_data) {
852 dump->addScalar("purgeable_size", "bytes", isPurgeable() ? encodedSize() + overheadSize() : 0);
853 m_data->onMemoryDump(dumpName, memoryDump); 842 m_data->onMemoryDump(dumpName, memoryDump);
854 } 843 }
855 844
856 if (levelOfDetail == WebMemoryDumpLevelOfDetail::Detailed) { 845 if (levelOfDetail == WebMemoryDumpLevelOfDetail::Detailed) {
857 String urlToReport = url().getString(); 846 String urlToReport = url().getString();
858 if (urlToReport.length() > kMaxURLReportLength) { 847 if (urlToReport.length() > kMaxURLReportLength) {
859 urlToReport.truncate(kMaxURLReportLength); 848 urlToReport.truncate(kMaxURLReportLength);
860 urlToReport = urlToReport + "..."; 849 urlToReport = urlToReport + "...";
861 } 850 }
862 dump->addString("url", "", urlToReport); 851 dump->addString("url", "", urlToReport);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 if (hasCacheControlNoStoreHeader()) 965 if (hasCacheControlNoStoreHeader())
977 return false; 966 return false;
978 967
979 // Do not revalidate Resource with redirects. https://crbug.com/613971 968 // Do not revalidate Resource with redirects. https://crbug.com/613971
980 if (!redirectChain().isEmpty()) 969 if (!redirectChain().isEmpty())
981 return false; 970 return false;
982 971
983 return m_response.hasCacheValidatorFields() || m_resourceRequest.hasCacheVal idatorFields(); 972 return m_response.hasCacheValidatorFields() || m_resourceRequest.hasCacheVal idatorFields();
984 } 973 }
985 974
986 bool Resource::isPurgeable() const
987 {
988 return m_data && !m_data->isLocked();
989 }
990
991 bool Resource::lock()
992 {
993 if (!m_data)
994 return true;
995 if (m_data->isLocked())
996 return true;
997
998 ASSERT(!hasClientsOrObservers());
999
1000 // If locking fails, our buffer has been purged. There's no point
1001 // in leaving a purged resource in MemoryCache.
1002 if (!m_data->lock()) {
1003 DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, failedLockHistogra m, new EnumerationHistogram("Blink.SharedBuffer.FailedLock", kLastResourceType)) ;
1004 failedLockHistogram.count(getType());
1005
1006 m_data.clear();
1007 setEncodedSize(0);
1008 memoryCache()->remove(this);
1009 return false;
1010 }
1011
1012 DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, successfulLockHistogra m, new EnumerationHistogram("Blink.SharedBuffer.SuccessfulLock", kLastResourceTy pe));
1013 successfulLockHistogram.count(getType());
1014
1015 return true;
1016 }
1017
1018 size_t Resource::calculateOverheadSize() const 975 size_t Resource::calculateOverheadSize() const
1019 { 976 {
1020 static const int kAverageClientsHashMapSize = 384; 977 static const int kAverageClientsHashMapSize = 384;
1021 return sizeof(Resource) + m_response.memoryUsage() + kAverageClientsHashMapS ize + m_resourceRequest.url().getString().length() * 2; 978 return sizeof(Resource) + m_response.memoryUsage() + kAverageClientsHashMapS ize + m_resourceRequest.url().getString().length() * 2;
1022 } 979 }
1023 980
1024 void Resource::didChangePriority(ResourceLoadPriority loadPriority, int intraPri orityValue) 981 void Resource::didChangePriority(ResourceLoadPriority loadPriority, int intraPri orityValue)
1025 { 982 {
1026 m_resourceRequest.setPriority(loadPriority, intraPriorityValue); 983 m_resourceRequest.setPriority(loadPriority, intraPriorityValue);
1027 if (m_loader) 984 if (m_loader)
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 case Resource::TextTrack: 1068 case Resource::TextTrack:
1112 case Resource::Media: 1069 case Resource::Media:
1113 case Resource::Manifest: 1070 case Resource::Manifest:
1114 return false; 1071 return false;
1115 } 1072 }
1116 ASSERT_NOT_REACHED(); 1073 ASSERT_NOT_REACHED();
1117 return false; 1074 return false;
1118 } 1075 }
1119 1076
1120 } // namespace blink 1077 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698