- Revision
- 233822
- Author
- [email protected]
- Date
- 2018-07-13 15:35:48 -0700 (Fri, 13 Jul 2018)
Log Message
WebKit sometimes holds WiFi/BT assertions while the Networking process is suspended
https://bugs.webkit.org/show_bug.cgi?id=187662
<rdar://problem/41999448>
Reviewed by Chris Dumez.
Inform WiFiAssertions when the Networking process is first going into the background,
so it has a chance of dropping its assertions even in cases where the system
suspends the process before we receive prepareToSuspend.
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::processDidTransitionToForeground):
(WebKit::NetworkProcess::processDidTransitionToBackground):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/curl/NetworkProcessCurl.cpp:
(WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
(WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
* NetworkProcess/soup/NetworkProcessSoup.cpp:
(WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
(WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::sendProcessDidTransitionToForeground):
(WebKit::NetworkProcessProxy::sendProcessDidTransitionToBackground):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::updateProcessAssertions):
Plumb the foreground/background transition to NetworkProcess.
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::platformPrepareToSuspend):
(WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
(WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
Make use of SuspensionReason to explain to WiFiAssertions the
difference between prepareToSuspend and didTransitionToBackground,
so that it can adjust the timing of dropping the assertion.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (233821 => 233822)
--- trunk/Source/WebKit/ChangeLog 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/ChangeLog 2018-07-13 22:35:48 UTC (rev 233822)
@@ -1,5 +1,44 @@
2018-07-13 Tim Horton <[email protected]>
+ WebKit sometimes holds WiFi/BT assertions while the Networking process is suspended
+ https://bugs.webkit.org/show_bug.cgi?id=187662
+ <rdar://problem/41999448>
+
+ Reviewed by Chris Dumez.
+
+ Inform WiFiAssertions when the Networking process is first going into the background,
+ so it has a chance of dropping its assertions even in cases where the system
+ suspends the process before we receive prepareToSuspend.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::processDidTransitionToForeground):
+ (WebKit::NetworkProcess::processDidTransitionToBackground):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * NetworkProcess/curl/NetworkProcessCurl.cpp:
+ (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
+ (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
+ * NetworkProcess/soup/NetworkProcessSoup.cpp:
+ (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
+ (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::sendProcessDidTransitionToForeground):
+ (WebKit::NetworkProcessProxy::sendProcessDidTransitionToBackground):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::updateProcessAssertions):
+ Plumb the foreground/background transition to NetworkProcess.
+
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::NetworkProcess::platformPrepareToSuspend):
+ (WebKit::NetworkProcess::platformProcessDidTransitionToBackground):
+ (WebKit::NetworkProcess::platformProcessDidTransitionToForeground):
+ Make use of SuspensionReason to explain to WiFiAssertions the
+ difference between prepareToSuspend and didTransitionToBackground,
+ so that it can adjust the timing of dropping the assertion.
+
+2018-07-13 Tim Horton <[email protected]>
+
REGRESSION (r231676): watchOS WebKit usually doesn't load in the background
https://bugs.webkit.org/show_bug.cgi?id=187663
<rdar://problem/42181185>
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-07-13 22:35:48 UTC (rev 233822)
@@ -798,6 +798,16 @@
ChildProcess::terminate();
}
+void NetworkProcess::processDidTransitionToForeground()
+{
+ platformProcessDidTransitionToForeground();
+}
+
+void NetworkProcess::processDidTransitionToBackground()
+{
+ platformProcessDidTransitionToBackground();
+}
+
// FIXME: We can remove this one by adapting RefCounter.
class TaskCounter : public RefCounted<TaskCounter> {
public:
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-07-13 22:35:48 UTC (rev 233822)
@@ -170,6 +170,11 @@
void platformTerminate();
void lowMemoryHandler(Critical);
+
+ void processDidTransitionToForeground();
+ void processDidTransitionToBackground();
+ void platformProcessDidTransitionToForeground();
+ void platformProcessDidTransitionToBackground();
enum class ShouldAcknowledgeWhenReadyToSuspend { No, Yes };
void actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2018-07-13 22:35:48 UTC (rev 233822)
@@ -69,6 +69,9 @@
ClearCacheForAllOrigins(uint32_t cachesToClear)
SetCacheModel(uint32_t cacheModel);
+ ProcessDidTransitionToBackground()
+ ProcessDidTransitionToForeground()
+
ProcessWillSuspendImminently() -> (bool handled)
PrepareToSuspend()
CancelPrepareToSuspend()
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2018-07-13 22:35:48 UTC (rev 233822)
@@ -214,7 +214,7 @@
void NetworkProcess::platformPrepareToSuspend()
{
#if ENABLE(WIFI_ASSERTIONS)
- suspendWiFiAssertions();
+ suspendWiFiAssertions(SuspensionReason::ProcessSuspending);
#endif
}
@@ -225,4 +225,18 @@
#endif
}
+void NetworkProcess::platformProcessDidTransitionToBackground()
+{
+#if ENABLE(WIFI_ASSERTIONS)
+ suspendWiFiAssertions(SuspensionReason::ProcessBackgrounding);
+#endif
}
+
+void NetworkProcess::platformProcessDidTransitionToForeground()
+{
+#if ENABLE(WIFI_ASSERTIONS)
+ resumeWiFiAssertions();
+#endif
+}
+
+}
Modified: trunk/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp 2018-07-13 22:35:48 UTC (rev 233822)
@@ -79,4 +79,14 @@
notImplemented();
}
+void NetworkProcess::platformProcessDidTransitionToForeground()
+{
+ notImplemented();
+}
+
+void NetworkProcess::platformProcessDidTransitionToBackground()
+{
+ notImplemented();
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp (233821 => 233822)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp 2018-07-13 22:35:48 UTC (rev 233822)
@@ -182,5 +182,14 @@
notImplemented();
}
+void NetworkProcess::platformProcessDidTransitionToForeground()
+{
+ notImplemented();
+}
+void NetworkProcess::platformProcessDidTransitionToBackground()
+{
+ notImplemented();
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (233821 => 233822)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-07-13 22:35:48 UTC (rev 233822)
@@ -646,5 +646,15 @@
m_webUserContentControllerProxies.remove(&proxy);
}
#endif
+
+void NetworkProcessProxy::sendProcessDidTransitionToForeground()
+{
+ send(Messages::NetworkProcess::ProcessDidTransitionToForeground(), 0);
+}
+void NetworkProcessProxy::sendProcessDidTransitionToBackground()
+{
+ send(Messages::NetworkProcess::ProcessDidTransitionToBackground(), 0);
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (233821 => 233822)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-07-13 22:35:48 UTC (rev 233822)
@@ -88,6 +88,9 @@
void writeBlobToFilePath(const WebCore::URL&, const String& path, CompletionHandler<void(bool)>&& callback);
void processReadyToSuspend();
+
+ void sendProcessDidTransitionToForeground();
+ void sendProcessDidTransitionToBackground();
void setIsHoldingLockedFiles(bool);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (233821 => 233822)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-07-13 22:33:35 UTC (rev 233821)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-07-13 22:35:48 UTC (rev 233822)
@@ -2005,15 +2005,21 @@
#endif
auto updateNetworkProcessAssertion = [&] {
+ auto& networkProcess = ensureNetworkProcess();
+
if (m_foregroundWebProcessCounter.value()) {
- if (!m_foregroundTokenForNetworkProcess)
- m_foregroundTokenForNetworkProcess = ensureNetworkProcess().throttler().foregroundActivityToken();
+ if (!m_foregroundTokenForNetworkProcess) {
+ m_foregroundTokenForNetworkProcess = networkProcess.throttler().foregroundActivityToken();
+ networkProcess.sendProcessDidTransitionToForeground();
+ }
m_backgroundTokenForNetworkProcess = nullptr;
return;
}
if (m_backgroundWebProcessCounter.value()) {
- if (!m_backgroundTokenForNetworkProcess)
- m_backgroundTokenForNetworkProcess = ensureNetworkProcess().throttler().backgroundActivityToken();
+ if (!m_backgroundTokenForNetworkProcess) {
+ m_backgroundTokenForNetworkProcess = networkProcess.throttler().backgroundActivityToken();
+ networkProcess.sendProcessDidTransitionToBackground();
+ }
m_foregroundTokenForNetworkProcess = nullptr;
return;
}