Title: [218955] trunk/Source/WebCore
Revision
218955
Author
[email protected]
Date
2017-06-29 12:24:52 -0700 (Thu, 29 Jun 2017)

Log Message

Unreviewed, rolling out r218944.

Optimization is incorrect

Reverted changeset:

"Avoid copying ResourceLoadStatistics objects"
https://bugs.webkit.org/show_bug.cgi?id=173972
http://trac.webkit.org/changeset/218944

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (218954 => 218955)


--- trunk/Source/WebCore/ChangeLog	2017-06-29 19:19:17 UTC (rev 218954)
+++ trunk/Source/WebCore/ChangeLog	2017-06-29 19:24:52 UTC (rev 218955)
@@ -1,3 +1,15 @@
+2017-06-29  Chris Dumez  <[email protected]>
+
+        Unreviewed, rolling out r218944.
+
+        Optimization is incorrect
+
+        Reverted changeset:
+
+        "Avoid copying ResourceLoadStatistics objects"
+        https://bugs.webkit.org/show_bug.cgi?id=173972
+        http://trac.webkit.org/changeset/218944
+
 2017-06-29  Carlos Garcia Campos  <[email protected]>
 
         REGRESSION(r218896): ASSERT in WebPageProxy::dataCallback

Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.cpp (218954 => 218955)


--- trunk/Source/WebCore/loader/ResourceLoadObserver.cpp	2017-06-29 19:19:17 UTC (rev 218954)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.cpp	2017-06-29 19:24:52 UTC (rev 218955)
@@ -149,58 +149,59 @@
         bool shouldFireDataModificationHandler = false;
         
         {
-            auto locker = holdLock(m_store->statisticsLock());
-            ResourceLoadStatistics targetStatistics(targetPrimaryDomain);
+        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);
 
-            // 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;
+            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;
             }
+        } 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) {
-                    ++targetStatistics.topFrameHasBeenRedirectedTo;
-                    ++redirectingOriginResourceStatistics.topFrameHasBeenRedirectedFrom;
+                    ++sourceOriginResourceStatistics.topFrameHasBeenNavigatedFrom;
+                    ++targetStatistics.topFrameHasBeenNavigatedTo;
                 } else {
-                    ++targetStatistics.subframeHasBeenRedirectedTo;
-                    ++redirectingOriginResourceStatistics.subframeHasBeenRedirectedFrom;
-                    redirectingOriginResourceStatistics.subframeUniqueRedirectsTo.add(targetPrimaryDomain);
-
-                    ++targetStatistics.subframeSubResourceCount;
+                    ++sourceOriginResourceStatistics.subframeHasBeenNavigatedFrom;
+                    ++targetStatistics.subframeHasBeenNavigatedTo;
                 }
-            } 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 (218954 => 218955)


--- trunk/Source/WebCore/loader/ResourceLoadStatistics.h	2017-06-29 19:19:17 UTC (rev 218954)
+++ trunk/Source/WebCore/loader/ResourceLoadStatistics.h	2017-06-29 19:24:52 UTC (rev 218955)
@@ -36,7 +36,7 @@
 class KeyedEncoder;
 
 struct ResourceLoadStatistics {
-    explicit ResourceLoadStatistics(const String& primaryDomain)
+    ResourceLoadStatistics(const String& primaryDomain)
         : highLevelDomain(primaryDomain)
     {
     }
@@ -43,11 +43,6 @@
 
     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

Reply via email to