Title: [233822] trunk/Source/WebKit
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;
         }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to