Title: [255298] branches/safari-610.1.1-branch/Source/WebKit
Revision
255298
Author
[email protected]
Date
2020-01-28 13:49:43 -0800 (Tue, 28 Jan 2020)

Log Message

Cherry-pick r255039. rdar://problem/58713379

    Background thread with ITP Database should lock when the network process is suspended
    https://bugs.webkit.org/show_bug.cgi?id=206593
    rdar://problem/58713379

    Reviewed by Chris Dumez.

    This patch adds a function to hang the background queue when the
    NetworkProcess is preparing to suspend.

    * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
    (WebKit::WebResourceLoadStatisticsStore::suspend):
    (WebKit::WebResourceLoadStatisticsStore::resume):
    * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
    * NetworkProcess/NetworkProcess.cpp:
    (WebKit::NetworkProcess::prepareToSuspend):
    (WebKit::NetworkProcess::resume):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255039 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-610.1.1-branch/Source/WebKit/ChangeLog (255297 => 255298)


--- branches/safari-610.1.1-branch/Source/WebKit/ChangeLog	2020-01-28 21:49:41 UTC (rev 255297)
+++ branches/safari-610.1.1-branch/Source/WebKit/ChangeLog	2020-01-28 21:49:43 UTC (rev 255298)
@@ -1,5 +1,48 @@
 2020-01-28  Russell Epstein  <[email protected]>
 
+        Cherry-pick r255039. rdar://problem/58713379
+
+    Background thread with ITP Database should lock when the network process is suspended
+    https://bugs.webkit.org/show_bug.cgi?id=206593
+    rdar://problem/58713379
+    
+    Reviewed by Chris Dumez.
+    
+    This patch adds a function to hang the background queue when the
+    NetworkProcess is preparing to suspend.
+    
+    * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
+    (WebKit::WebResourceLoadStatisticsStore::suspend):
+    (WebKit::WebResourceLoadStatisticsStore::resume):
+    * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
+    * NetworkProcess/NetworkProcess.cpp:
+    (WebKit::NetworkProcess::prepareToSuspend):
+    (WebKit::NetworkProcess::resume):
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2020-01-23  Kate Cheney  <[email protected]>
+
+            Background thread with ITP Database should lock when the network process is suspended
+            https://bugs.webkit.org/show_bug.cgi?id=206593
+            rdar://problem/58713379
+
+            Reviewed by Chris Dumez.
+
+            This patch adds a function to hang the background queue when the
+            NetworkProcess is preparing to suspend.
+
+            * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
+            (WebKit::WebResourceLoadStatisticsStore::suspend):
+            (WebKit::WebResourceLoadStatisticsStore::resume):
+            * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
+            * NetworkProcess/NetworkProcess.cpp:
+            (WebKit::NetworkProcess::prepareToSuspend):
+            (WebKit::NetworkProcess::resume):
+
+2020-01-28  Russell Epstein  <[email protected]>
+
         Cherry-pick r254989. rdar://problem/58764572
 
     [iOS] Camera is lost during WebRTC demo

Modified: branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp (255297 => 255298)


--- branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2020-01-28 21:49:41 UTC (rev 255297)
+++ branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2020-01-28 21:49:43 UTC (rev 255298)
@@ -1154,6 +1154,45 @@
     });
 }
 
+void WebResourceLoadStatisticsStore::suspend(CompletionHandler<void()>&& completionHandler)
+{
+    ASSERT(RunLoop::isMain());
+
+    CompletionHandlerCallingScope completionHandlerCaller(WTFMove(completionHandler));
+    Locker<Lock> stateLocker(m_stateLock);
+    if (m_state != State::Running)
+        return;
+    m_state = State::WillSuspend;
+
+    postTask([this, completionHandler = completionHandlerCaller.release()] () mutable {
+        Locker<Lock> stateLocker(m_stateLock);
+        ASSERT(m_state != State::Suspended);
+
+        if (m_state != State::WillSuspend) {
+            postTaskReply(WTFMove(completionHandler));
+            return;
+        }
+
+        m_state = State::Suspended;
+        postTaskReply(WTFMove(completionHandler));
+
+        while (m_state == State::Suspended)
+            m_stateChangeCondition.wait(m_stateLock);
+        ASSERT(m_state == State::Running);
+    });
+}
+
+void WebResourceLoadStatisticsStore::resume()
+{
+    ASSERT(RunLoop::isMain());
+
+    Locker<Lock> stateLocker(m_stateLock);
+    auto previousState = m_state;
+    m_state = State::Running;
+    if (previousState == State::Suspended)
+        m_stateChangeCondition.notifyOne();
+}
+
 } // namespace WebKit
 
 #endif

Modified: branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h (255297 => 255298)


--- branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2020-01-28 21:49:41 UTC (rev 255297)
+++ branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2020-01-28 21:49:43 UTC (rev 255298)
@@ -287,6 +287,8 @@
     void resourceLoadStatisticsUpdated(Vector<WebCore::ResourceLoadStatistics>&&);
     void requestStorageAccessUnderOpener(DomainInNeedOfStorageAccess&&, WebCore::PageIdentifier openerID, OpenerDomain&&);
     void aggregatedThirdPartyData(CompletionHandler<void(Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&&)>&&);
+    void suspend(CompletionHandler<void()>&&);
+    void resume();
 
 private:
     explicit WebResourceLoadStatisticsStore(NetworkSession&, const String&, ShouldIncludeLocalhost);
@@ -310,6 +312,15 @@
     bool m_hasScheduledProcessStats { false };
 
     bool m_firstNetworkProcessCreated { false };
+    
+    enum class State {
+        Running,
+        WillSuspend,
+        Suspended
+    };
+    State m_state { State::Running };
+    Lock m_stateLock;
+    Condition m_stateChangeCondition;
 };
 
 } // namespace WebKit

Modified: branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp (255297 => 255298)


--- branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-01-28 21:49:41 UTC (rev 255297)
+++ branches/safari-610.1.1-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-01-28 21:49:43 UTC (rev 255298)
@@ -2095,6 +2095,13 @@
         RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend() Process is ready to suspend", this);
         completionHandler();
     });
+    
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+    forEachNetworkSession([&callbackAggregator](auto& networkSession) {
+        if (auto* resourceLoadStatistics = networkSession.resourceLoadStatistics())
+            resourceLoadStatistics->suspend([callbackAggregator] { });
+    });
+#endif
 
     platformPrepareToSuspend([callbackAggregator] { });
     platformSyncAllCookies([callbackAggregator] { });
@@ -2138,6 +2145,13 @@
     for (auto& connection : m_webProcessConnections.values())
         connection->endSuspension();
 
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+    forEachNetworkSession([](auto& networkSession) {
+        if (auto* resourceLoadStatistics = networkSession.resourceLoadStatistics())
+            resourceLoadStatistics->resume();
+    });
+#endif
+    
 #if ENABLE(SERVICE_WORKER)
     for (auto& server : m_swServers.values())
         server->endSuspension();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to