Title: [218944] trunk/Source/WebCore
- Revision
- 218944
- Author
- [email protected]
- Date
- 2017-06-29 10:58:30 -0700 (Thu, 29 Jun 2017)
Log Message
Avoid copying ResourceLoadStatistics objects
https://bugs.webkit.org/show_bug.cgi?id=173972
Reviewed by Geoffrey Garen.
Avoid copying ResourceLoadStatistics objects given that they are big. Make the type move-only
to avoid such mistakes in the future.
* loader/ResourceLoadObserver.cpp:
(WebCore::ResourceLoadObserver::logFrameNavigation):
* loader/ResourceLoadStatistics.h:
(WebCore::ResourceLoadStatistics::ResourceLoadStatistics):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (218943 => 218944)
--- trunk/Source/WebCore/ChangeLog 2017-06-29 17:54:32 UTC (rev 218943)
+++ trunk/Source/WebCore/ChangeLog 2017-06-29 17:58:30 UTC (rev 218944)
@@ -1,3 +1,18 @@
+2017-06-29 Chris Dumez <[email protected]>
+
+ Avoid copying ResourceLoadStatistics objects
+ https://bugs.webkit.org/show_bug.cgi?id=173972
+
+ Reviewed by Geoffrey Garen.
+
+ Avoid copying ResourceLoadStatistics objects given that they are big. Make the type move-only
+ to avoid such mistakes in the future.
+
+ * loader/ResourceLoadObserver.cpp:
+ (WebCore::ResourceLoadObserver::logFrameNavigation):
+ * loader/ResourceLoadStatistics.h:
+ (WebCore::ResourceLoadStatistics::ResourceLoadStatistics):
+
2017-06-29 Antoine Quint <[email protected]>
Full stop shows to the right of the picture-in-picture localised string in Hebrew
Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.cpp (218943 => 218944)
--- trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2017-06-29 17:54:32 UTC (rev 218943)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2017-06-29 17:58:30 UTC (rev 218944)
@@ -150,59 +150,58 @@
bool shouldFireDataModificationHandler = false;
{
- auto locker = holdLock(m_store->statisticsLock());
- // We must make a copy here, because later calls to 'ensureResourceStatisticsForPrimaryDomain' will invalidate the returned reference:
- auto targetStatistics = m_store->ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);
+ auto locker = holdLock(m_store->statisticsLock());
+ ResourceLoadStatistics targetStatistics(targetPrimaryDomain);
- // Always fire if we have previously removed data records for this domain
- shouldFireDataModificationHandler = targetStatistics.dataRecordsRemoved > 0;
+ // Always fire if we have previously removed data records for this domain
+ shouldFireDataModificationHandler = targetStatistics.dataRecordsRemoved > 0;
- if (isMainFrame)
- targetStatistics.topFrameHasBeenNavigatedToBefore = true;
- else {
- targetStatistics.subframeHasBeenLoadedBefore = true;
+ if (isMainFrame)
+ targetStatistics.topFrameHasBeenNavigatedToBefore = true;
+ else {
+ targetStatistics.subframeHasBeenLoadedBefore = true;
- auto subframeUnderTopFrameOriginsResult = targetStatistics.subframeUnderTopFrameOrigins.add(mainFramePrimaryDomain);
- if (subframeUnderTopFrameOriginsResult.isNewEntry)
- shouldFireDataModificationHandler = true;
- }
-
- if (isRedirect) {
- auto& redirectingOriginResourceStatistics = m_store->ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
-
- if (m_store->isPrevalentResource(targetPrimaryDomain))
- redirectingOriginResourceStatistics.redirectedToOtherPrevalentResourceOrigins.add(targetPrimaryDomain);
-
- if (isMainFrame) {
- ++targetStatistics.topFrameHasBeenRedirectedTo;
- ++redirectingOriginResourceStatistics.topFrameHasBeenRedirectedFrom;
- } else {
- ++targetStatistics.subframeHasBeenRedirectedTo;
- ++redirectingOriginResourceStatistics.subframeHasBeenRedirectedFrom;
- redirectingOriginResourceStatistics.subframeUniqueRedirectsTo.add(targetPrimaryDomain);
-
- ++targetStatistics.subframeSubResourceCount;
+ auto subframeUnderTopFrameOriginsResult = targetStatistics.subframeUnderTopFrameOrigins.add(mainFramePrimaryDomain);
+ if (subframeUnderTopFrameOriginsResult.isNewEntry)
+ shouldFireDataModificationHandler = true;
}
- } else {
- if (sourcePrimaryDomain.isNull() || sourcePrimaryDomain.isEmpty() || sourcePrimaryDomain == "nullOrigin") {
- if (isMainFrame)
- ++targetStatistics.topFrameInitialLoadCount;
- else
- ++targetStatistics.subframeSubResourceCount;
- } else {
- auto& sourceOriginResourceStatistics = m_store->ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
+ if (isRedirect) {
+ auto& redirectingOriginResourceStatistics = m_store->ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
+
+ if (m_store->isPrevalentResource(targetPrimaryDomain))
+ redirectingOriginResourceStatistics.redirectedToOtherPrevalentResourceOrigins.add(targetPrimaryDomain);
+
if (isMainFrame) {
- ++sourceOriginResourceStatistics.topFrameHasBeenNavigatedFrom;
- ++targetStatistics.topFrameHasBeenNavigatedTo;
+ ++targetStatistics.topFrameHasBeenRedirectedTo;
+ ++redirectingOriginResourceStatistics.topFrameHasBeenRedirectedFrom;
} else {
- ++sourceOriginResourceStatistics.subframeHasBeenNavigatedFrom;
- ++targetStatistics.subframeHasBeenNavigatedTo;
+ ++targetStatistics.subframeHasBeenRedirectedTo;
+ ++redirectingOriginResourceStatistics.subframeHasBeenRedirectedFrom;
+ redirectingOriginResourceStatistics.subframeUniqueRedirectsTo.add(targetPrimaryDomain);
+
+ ++targetStatistics.subframeSubResourceCount;
}
+ } else {
+ if (sourcePrimaryDomain.isNull() || sourcePrimaryDomain.isEmpty() || sourcePrimaryDomain == "nullOrigin") {
+ if (isMainFrame)
+ ++targetStatistics.topFrameInitialLoadCount;
+ else
+ ++targetStatistics.subframeSubResourceCount;
+ } else {
+ auto& sourceOriginResourceStatistics = m_store->ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);
+
+ if (isMainFrame) {
+ ++sourceOriginResourceStatistics.topFrameHasBeenNavigatedFrom;
+ ++targetStatistics.topFrameHasBeenNavigatedTo;
+ } else {
+ ++sourceOriginResourceStatistics.subframeHasBeenNavigatedFrom;
+ ++targetStatistics.subframeHasBeenNavigatedTo;
+ }
+ }
}
- }
-
- m_store->setResourceStatisticsForPrimaryDomain(targetPrimaryDomain, WTFMove(targetStatistics));
+
+ m_store->setResourceStatisticsForPrimaryDomain(targetPrimaryDomain, WTFMove(targetStatistics));
} // Release lock
if (shouldFireDataModificationHandler)
Modified: trunk/Source/WebCore/loader/ResourceLoadStatistics.h (218943 => 218944)
--- trunk/Source/WebCore/loader/ResourceLoadStatistics.h 2017-06-29 17:54:32 UTC (rev 218943)
+++ trunk/Source/WebCore/loader/ResourceLoadStatistics.h 2017-06-29 17:58:30 UTC (rev 218944)
@@ -36,7 +36,7 @@
class KeyedEncoder;
struct ResourceLoadStatistics {
- ResourceLoadStatistics(const String& primaryDomain)
+ explicit ResourceLoadStatistics(const String& primaryDomain)
: highLevelDomain(primaryDomain)
{
}
@@ -43,6 +43,11 @@
ResourceLoadStatistics() = default;
+ ResourceLoadStatistics(const ResourceLoadStatistics&) = delete;
+ ResourceLoadStatistics& operator=(const ResourceLoadStatistics&) = delete;
+ ResourceLoadStatistics(ResourceLoadStatistics&&) = default;
+ ResourceLoadStatistics& operator=(ResourceLoadStatistics&&) = default;
+
void encode(KeyedEncoder&) const;
bool decode(KeyedDecoder&, unsigned version);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes