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