Title: [292970] trunk
Revision
292970
Author
[email protected]
Date
2022-04-18 14:20:22 -0700 (Mon, 18 Apr 2022)

Log Message

Allow C API clients to get the WKProcessTerminationReason in processDidCrash functions, and use in WebKitTestRunner
https://bugs.webkit.org/show_bug.cgi?id=239400

Reviewed by Sam Weinig.

Source/WebKit:

Introduce WKContextClientV4 with "did crash" functions that take a ProcessID and WKProcessTerminationReason.
WebContextClient will call the new functions if registered, otherwise the old ones.

Have WebProcessPool::networkProcessDidTerminate() and WebProcessPool::gpuProcessExited() call
the client for more types of reasons; ExceededMemoryLimit and ExceededCPULimit only apply
to the web process, so the behavior change here is to call m_client.networkProcessDidCrash()
for ProcessTerminationReason::Unresponsive.

* UIProcess/API/C/WKContext.h:
* UIProcess/WebContextClient.cpp:
(WebKit::WebContextClient::networkProcessDidCrash):
(WebKit::WebContextClient::serviceWorkerProcessDidCrash):
(WebKit::WebContextClient::gpuProcessDidCrash):
* UIProcess/WebContextClient.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::shouldReportAuxiliaryProcessCrash):
(WebKit::WebProcessPool::networkProcessDidTerminate):
(WebKit::WebProcessPool::serviceWorkerProcessCrashed):
(WebKit::WebProcessPool::gpuProcessExited):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

Tools:

Standardize the "didCrash" callbacks to use the WKContextClientV4 "with details" versions,
and use them to print out crash reasons.

* WebKitTestRunner/TestController.cpp:
(WTR::TestController::generatePageConfiguration):
(WTR::TestController::networkProcessDidCrashWithDetails):
(WTR::TestController::serviceWorkerProcessDidCrashWithDetails):
(WTR::TestController::gpuProcessDidCrashWithDetails):
(WTR::terminationReasonToString):
(WTR::TestController::networkProcessDidCrash):
(WTR::TestController::serviceWorkerProcessDidCrash):
(WTR::TestController::gpuProcessDidCrash):
(WTR::TestController::webProcessDidTerminate):
* WebKitTestRunner/TestController.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (292969 => 292970)


--- trunk/Source/WebKit/ChangeLog	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/ChangeLog	2022-04-18 21:20:22 UTC (rev 292970)
@@ -1,3 +1,33 @@
+2022-04-18  Simon Fraser  <[email protected]>
+
+        Allow C API clients to get the WKProcessTerminationReason in processDidCrash functions, and use in WebKitTestRunner
+        https://bugs.webkit.org/show_bug.cgi?id=239400
+
+        Reviewed by Sam Weinig.
+
+        Introduce WKContextClientV4 with "did crash" functions that take a ProcessID and WKProcessTerminationReason.
+        WebContextClient will call the new functions if registered, otherwise the old ones.
+
+        Have WebProcessPool::networkProcessDidTerminate() and WebProcessPool::gpuProcessExited() call
+        the client for more types of reasons; ExceededMemoryLimit and ExceededCPULimit only apply
+        to the web process, so the behavior change here is to call m_client.networkProcessDidCrash()
+        for ProcessTerminationReason::Unresponsive.
+
+        * UIProcess/API/C/WKContext.h:
+        * UIProcess/WebContextClient.cpp:
+        (WebKit::WebContextClient::networkProcessDidCrash):
+        (WebKit::WebContextClient::serviceWorkerProcessDidCrash):
+        (WebKit::WebContextClient::gpuProcessDidCrash):
+        * UIProcess/WebContextClient.h:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::shouldReportAuxiliaryProcessCrash):
+        (WebKit::WebProcessPool::networkProcessDidTerminate):
+        (WebKit::WebProcessPool::serviceWorkerProcessCrashed):
+        (WebKit::WebProcessPool::gpuProcessExited):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):
+
 2022-04-18  Said Abou-Hallawa  <[email protected]>
 
         REGRESSION(r288847): GPU Process crash under GPUProcess::canExitUnderMemoryPressure()

Modified: trunk/Source/WebKit/UIProcess/API/C/WKContext.h (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/API/C/WKContext.h	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContext.h	2022-04-18 21:20:22 UTC (rev 292970)
@@ -32,6 +32,7 @@
 #include <WebKit/WKContextHistoryClient.h>
 #include <WebKit/WKContextInjectedBundleClient.h>
 #include <WebKit/WKDeprecated.h>
+#include <WebKit/WKProcessTerminationReason.h>
 
 #if defined(WIN32) || defined(_WIN32)
 typedef int WKProcessID;
@@ -60,6 +61,7 @@
 typedef WKContextChildProcessDidCrashCallback WKContextNetworkProcessDidCrashCallback;
 
 typedef void (*WKContextChildProcessWithPIDDidCrashCallback)(WKContextRef context, WKProcessID processID, const void *clientInfo);
+typedef void (*WKContextChildProcessDidCrashWithDetailsCallback)(WKContextRef context, WKProcessID processID, WKProcessTerminationReason reason, const void *clientInfo);
 
 typedef struct WKContextClientBase {
     int                                                                 version;
@@ -87,6 +89,7 @@
     void                                                                (*copyWebCryptoMasterKey_unavailable)(void);
 } WKContextClientV1;
 
+// WKContextClientV1 and WKContextClientV2 are identical.
 typedef struct WKContextClientV2 {
     WKContextClientBase                                                 base;
 
@@ -97,7 +100,6 @@
 
     // Version 1.
     void                                                                (*copyWebCryptoMasterKey_unavailable)(void);
-
 } WKContextClientV2;
 
 typedef struct WKContextClientV3 {
@@ -111,11 +113,33 @@
     // Version 1.
     void                                                                (*copyWebCryptoMasterKey_unavailable)(void);
 
-    // Version2.
+    // Version 3.
     WKContextChildProcessWithPIDDidCrashCallback                        serviceWorkerProcessDidCrash;
     WKContextChildProcessWithPIDDidCrashCallback                        gpuProcessDidCrash;
 } WKContextClientV3;
 
+typedef struct WKContextClientV4 {
+    WKContextClientBase                                                 base;
+
+    // Version 0.
+    WKContextPlugInAutoStartOriginHashesChangedCallback                 plugInAutoStartOriginHashesChanged;
+    WKContextNetworkProcessDidCrashCallback                             networkProcessDidCrash;
+    WKContextPlugInInformationBecameAvailableCallback                   plugInInformationBecameAvailable;
+
+    // Version 1.
+    void                                                                (*copyWebCryptoMasterKey_unavailable)(void);
+
+    // Version 3.
+    WKContextChildProcessWithPIDDidCrashCallback                        serviceWorkerProcessDidCrash;
+    WKContextChildProcessWithPIDDidCrashCallback                        gpuProcessDidCrash;
+    
+    // Version 4.
+    WKContextChildProcessDidCrashWithDetailsCallback                    networkProcessDidCrashWithDetails;
+    WKContextChildProcessDidCrashWithDetailsCallback                    serviceWorkerProcessDidCrashWithDetails;
+    WKContextChildProcessDidCrashWithDetailsCallback                    gpuProcessDidCrashWithDetails;
+} WKContextClientV4;
+
+
 // FIXME: Remove these once support for Mavericks has been dropped.
 enum {
     kWKProcessModelSharedSecondaryProcess = 0,

Modified: trunk/Source/WebKit/UIProcess/WebContextClient.cpp (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/WebContextClient.cpp	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/WebContextClient.cpp	2022-04-18 21:20:22 UTC (rev 292970)
@@ -38,28 +38,37 @@
     m_client.plugInAutoStartOriginHashesChanged(toAPI(processPool), m_client.base.clientInfo);
 }
 
-void WebContextClient::networkProcessDidCrash(WebProcessPool* processPool)
+void WebContextClient::networkProcessDidCrash(WebProcessPool* processPool, ProcessID processID, ProcessTerminationReason reason)
 {
-    if (!m_client.networkProcessDidCrash)
+    if (m_client.networkProcessDidCrashWithDetails) {
+        m_client.networkProcessDidCrashWithDetails(toAPI(processPool), processID, toAPI(reason), m_client.base.clientInfo);
         return;
+    }
 
-    m_client.networkProcessDidCrash(toAPI(processPool), m_client.base.clientInfo);
+    if (m_client.networkProcessDidCrash)
+        m_client.networkProcessDidCrash(toAPI(processPool), m_client.base.clientInfo);
 }
 
-void WebContextClient::serviceWorkerProcessDidCrash(WebProcessPool* processPool, ProcessID processID)
+void WebContextClient::serviceWorkerProcessDidCrash(WebProcessPool* processPool, ProcessID processID, ProcessTerminationReason reason)
 {
-    if (!m_client.serviceWorkerProcessDidCrash)
+    if (m_client.serviceWorkerProcessDidCrashWithDetails) {
+        m_client.serviceWorkerProcessDidCrashWithDetails(toAPI(processPool), processID, toAPI(reason), m_client.base.clientInfo);
         return;
+    }
 
-    m_client.serviceWorkerProcessDidCrash(toAPI(processPool), processID, m_client.base.clientInfo);
+    if (m_client.serviceWorkerProcessDidCrash)
+        m_client.serviceWorkerProcessDidCrash(toAPI(processPool), processID, m_client.base.clientInfo);
 }
 
-void WebContextClient::gpuProcessDidCrash(WebProcessPool* processPool, ProcessID processID)
+void WebContextClient::gpuProcessDidCrash(WebProcessPool* processPool, ProcessID processID, ProcessTerminationReason reason)
 {
-    if (!m_client.gpuProcessDidCrash)
+    if (m_client.gpuProcessDidCrashWithDetails) {
+        m_client.gpuProcessDidCrashWithDetails(toAPI(processPool), processID, toAPI(reason), m_client.base.clientInfo);
         return;
+    }
 
-    m_client.gpuProcessDidCrash(toAPI(processPool), processID, m_client.base.clientInfo);
+    if (m_client.gpuProcessDidCrash)
+        m_client.gpuProcessDidCrash(toAPI(processPool), processID, m_client.base.clientInfo);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/WebContextClient.h (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/WebContextClient.h	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/WebContextClient.h	2022-04-18 21:20:22 UTC (rev 292970)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebContextClient_h
-#define WebContextClient_h
+#pragma once
 
 #include "APIClient.h"
 #include "APIData.h"
@@ -33,7 +32,7 @@
 
 namespace API {
 template<> struct ClientTraits<WKContextClientBase> {
-    typedef std::tuple<WKContextClientV0, WKContextClientV1, WKContextClientV2, WKContextClientV3> Versions;
+    typedef std::tuple<WKContextClientV0, WKContextClientV1, WKContextClientV2, WKContextClientV3, WKContextClientV4> Versions;
 };
 }
 
@@ -41,15 +40,14 @@
 namespace WebKit {
 
 class WebProcessPool;
+enum class ProcessTerminationReason;
 
 class WebContextClient : public API::Client<WKContextClientBase> {
 public:
     void plugInAutoStartOriginHashesChanged(WebProcessPool*);
-    void networkProcessDidCrash(WebProcessPool*);
-    void serviceWorkerProcessDidCrash(WebProcessPool*, ProcessID);
-    void gpuProcessDidCrash(WebProcessPool*, ProcessID);
+    void networkProcessDidCrash(WebProcessPool*, ProcessID, ProcessTerminationReason);
+    void serviceWorkerProcessDidCrash(WebProcessPool*, ProcessID, ProcessTerminationReason);
+    void gpuProcessDidCrash(WebProcessPool*, ProcessID, ProcessTerminationReason);
 };
 
 } // namespace WebKit
-
-#endif // WebContextClient_h

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2022-04-18 21:20:22 UTC (rev 292970)
@@ -428,10 +428,30 @@
 #endif
 }
 
+static bool shouldReportAuxiliaryProcessCrash(ProcessTerminationReason reason)
+{
+    switch (reason) {
+    case ProcessTerminationReason::ExceededMemoryLimit:
+    case ProcessTerminationReason::ExceededCPULimit:
+    case ProcessTerminationReason::Unresponsive:
+    case ProcessTerminationReason::Crash:
+        return true;
+    case ProcessTerminationReason::RequestedByClient:
+    case ProcessTerminationReason::IdleExit:
+    case ProcessTerminationReason::ExceededProcessCountLimit:
+    case ProcessTerminationReason::NavigationSwap:
+    case ProcessTerminationReason::RequestedByNetworkProcess:
+    case ProcessTerminationReason::RequestedByGPUProcess:
+        return false;
+    }
+
+    return false;
+}
+
 void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, ProcessTerminationReason reason)
 {
-    if (reason == ProcessTerminationReason::Crash)
-        m_client.networkProcessDidCrash(this);
+    if (shouldReportAuxiliaryProcessCrash(reason))
+        m_client.networkProcessDidCrash(this, networkProcessProxy.processIdentifier(), reason);
 
     if (m_automationSession)
         m_automationSession->terminate();
@@ -439,10 +459,10 @@
     terminateServiceWorkers();
 }
 
-void WebProcessPool::serviceWorkerProcessCrashed(WebProcessProxy& proxy)
+void WebProcessPool::serviceWorkerProcessCrashed(WebProcessProxy& proxy, ProcessTerminationReason reason)
 {
 #if ENABLE(SERVICE_WORKER)
-    m_client.serviceWorkerProcessDidCrash(this, proxy.processIdentifier());
+    m_client.serviceWorkerProcessDidCrash(this, proxy.processIdentifier(), reason);
 #endif
 }
 
@@ -471,8 +491,8 @@
     WEBPROCESSPOOL_RELEASE_LOG(Process, "gpuProcessDidExit: PID=%d, reason=reason=%{public}s", identifier, processTerminationReasonToString(reason));
     m_gpuProcess = nullptr;
 
-    if (reason == ProcessTerminationReason::Crash || reason == ProcessTerminationReason::Unresponsive)
-        m_client.gpuProcessDidCrash(this, identifier);
+    if (shouldReportAuxiliaryProcessCrash(reason))
+        m_client.gpuProcessDidCrash(this, identifier, reason);
 
     Vector<Ref<WebProcessProxy>> processes = m_processes;
     for (auto& process : processes)

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2022-04-18 21:20:22 UTC (rev 292970)
@@ -379,7 +379,7 @@
     bool hasServiceWorkerForegroundActivityForTesting() const;
     bool hasServiceWorkerBackgroundActivityForTesting() const;
 #endif
-    void serviceWorkerProcessCrashed(WebProcessProxy&);
+    void serviceWorkerProcessCrashed(WebProcessProxy&, ProcessTerminationReason);
 
     void updateRemoteWorkerUserAgent(const String& userAgent);
     UserContentControllerIdentifier userContentControllerIdentifierForRemoteWorkers();

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (292969 => 292970)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2022-04-18 21:20:22 UTC (rev 292970)
@@ -916,11 +916,12 @@
         callback(false);
 
     if (isStandaloneServiceWorkerProcess())
-        processPool().serviceWorkerProcessCrashed(*this);
+        processPool().serviceWorkerProcessCrashed(*this, reason);
 
     shutDown();
 
 #if ENABLE(PUBLIC_SUFFIX_LIST)
+    // FIXME: Perhaps this should consider ProcessTerminationReasons ExceededMemoryLimit, ExceededCPULimit, Unresponsive as well.
     if (pages.size() == 1 && reason == ProcessTerminationReason::Crash) {
         auto& page = *pages[0];
         String domain = topPrivatelyControlledDomain(URL({ }, page.currentURL()).host().toString());

Modified: trunk/Tools/ChangeLog (292969 => 292970)


--- trunk/Tools/ChangeLog	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Tools/ChangeLog	2022-04-18 21:20:22 UTC (rev 292970)
@@ -1,3 +1,25 @@
+2022-04-18  Simon Fraser  <[email protected]>
+
+        Allow C API clients to get the WKProcessTerminationReason in processDidCrash functions, and use in WebKitTestRunner
+        https://bugs.webkit.org/show_bug.cgi?id=239400
+
+        Reviewed by Sam Weinig.
+
+        Standardize the "didCrash" callbacks to use the WKContextClientV4 "with details" versions,
+        and use them to print out crash reasons.
+
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::generatePageConfiguration):
+        (WTR::TestController::networkProcessDidCrashWithDetails):
+        (WTR::TestController::serviceWorkerProcessDidCrashWithDetails):
+        (WTR::TestController::gpuProcessDidCrashWithDetails):
+        (WTR::terminationReasonToString):
+        (WTR::TestController::networkProcessDidCrash):
+        (WTR::TestController::serviceWorkerProcessDidCrash):
+        (WTR::TestController::gpuProcessDidCrash):
+        (WTR::TestController::webProcessDidTerminate):
+        * WebKitTestRunner/TestController.h:
+
 2022-04-15  Jonathan Bedard  <[email protected]>
 
         [ews.webkit.org] Reduce status updates

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (292969 => 292970)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2022-04-18 21:20:22 UTC (rev 292970)
@@ -685,14 +685,17 @@
     };
     WKContextSetInjectedBundleClient(m_context.get(), &injectedBundleClient.base);
 
-    WKContextClientV3 contextClient = {
-        { 3, this },
+    WKContextClientV4 contextClient = {
+        { 4, this },
         0, // plugInAutoStartOriginHashesChanged
-        networkProcessDidCrash,
+        0, // networkProcessDidCrash,
         0, // plugInInformationBecameAvailable
         0, // copyWebCryptoMasterKey
-        serviceWorkerProcessDidCrash,
-        gpuProcessDidCrash
+        0, // serviceWorkerProcessDidCrash,
+        0, // gpuProcessDidCrash
+        networkProcessDidCrashWithDetails,
+        serviceWorkerProcessDidCrashWithDetails,
+        gpuProcessDidCrashWithDetails,
     };
     WKContextSetClient(m_context.get(), &contextClient.base);
 
@@ -1670,19 +1673,19 @@
     static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody, listener);
 }
 
-void TestController::networkProcessDidCrash(WKContextRef context, const void *clientInfo)
+void TestController::networkProcessDidCrashWithDetails(WKContextRef context, WKProcessID processID, WKProcessTerminationReason reason, const void *clientInfo)
 {
-    static_cast<TestController*>(const_cast<void*>(clientInfo))->networkProcessDidCrash();
+    static_cast<TestController*>(const_cast<void*>(clientInfo))->networkProcessDidCrash(processID, reason);
 }
 
-void TestController::serviceWorkerProcessDidCrash(WKContextRef context, WKProcessID processID, const void *clientInfo)
+void TestController::serviceWorkerProcessDidCrashWithDetails(WKContextRef context, WKProcessID processID, WKProcessTerminationReason reason, const void *clientInfo)
 {
-    static_cast<TestController*>(const_cast<void*>(clientInfo))->serviceWorkerProcessDidCrash(processID);
+    static_cast<TestController*>(const_cast<void*>(clientInfo))->serviceWorkerProcessDidCrash(processID, reason);
 }
 
-void TestController::gpuProcessDidCrash(WKContextRef context, WKProcessID processID, const void *clientInfo)
+void TestController::gpuProcessDidCrashWithDetails(WKContextRef context, WKProcessID processID, WKProcessTerminationReason reason, const void *clientInfo)
 {
-    static_cast<TestController*>(const_cast<void*>(clientInfo))->gpuProcessDidCrash(processID);
+    static_cast<TestController*>(const_cast<void*>(clientInfo))->gpuProcessDidCrash(processID, reason);
 }
 
 void TestController::didReceiveKeyDownMessageFromInjectedBundle(WKDictionaryRef dictionary, bool synchronous)
@@ -2001,24 +2004,46 @@
 
 // WKContextClient
 
-void TestController::networkProcessDidCrash()
+static const char* terminationReasonToString(WKProcessTerminationReason reason)
 {
-    pid_t pid = WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore());
-    fprintf(stderr, "#CRASHED - %s (pid %ld)\n", networkProcessName(), static_cast<long>(pid));
-    exit(1);
+    switch (reason) {
+    case kWKProcessTerminationReasonExceededMemoryLimit:
+        return "exceeded memory limit";
+    case kWKProcessTerminationReasonExceededCPULimit:
+        return "exceeded cpu limit";
+        break;
+    case kWKProcessTerminationReasonRequestedByClient:
+        return "requested by client";
+    case kWKProcessTerminationReasonCrash:
+        return "crash";
+    default:
+        break;
+    }
+    ASSERT_NOT_REACHED();
+    return "unknown reason";
 }
 
-void TestController::serviceWorkerProcessDidCrash(WKProcessID processID)
+void TestController::networkProcessDidCrash(WKProcessID processID, WKProcessTerminationReason reason)
 {
+    fprintf(stderr, "%s terminated (pid %ld) for reason: %s\n", networkProcessName(), static_cast<long>(processID), terminationReasonToString(reason));
+    fprintf(stderr, "#CRASHED - %s (pid %ld)\n", networkProcessName(), static_cast<long>(processID));
+    if (m_shouldExitWhenAuxiliaryProcessCrashes)
+        exit(1);
+}
+
+void TestController::serviceWorkerProcessDidCrash(WKProcessID processID, WKProcessTerminationReason reason)
+{
+    fprintf(stderr, "%s terminated (pid %ld) for reason: %s\n", "ServiceWorkerProcess", static_cast<long>(processID), terminationReasonToString(reason));
     fprintf(stderr, "#CRASHED - ServiceWorkerProcess (pid %ld)\n", static_cast<long>(processID));
-    if (m_shouldExitWhenWebProcessCrashes)
+    if (m_shouldExitWhenAuxiliaryProcessCrashes)
         exit(1);
 }
 
-void TestController::gpuProcessDidCrash(WKProcessID processID)
+void TestController::gpuProcessDidCrash(WKProcessID processID, WKProcessTerminationReason reason)
 {
-    fprintf(stderr, "#CRASHED - GPUProcess (pid %ld)\n", static_cast<long>(processID));
-    if (m_shouldExitWhenWebProcessCrashes)
+    fprintf(stderr, "%s terminated (pid %ld) for reason: %s\n", gpuProcessName(), static_cast<long>(processID), terminationReasonToString(reason));
+    fprintf(stderr, "#CRASHED - %s (pid %ld)\n", gpuProcessName(), static_cast<long>(processID));
+    if (m_shouldExitWhenAuxiliaryProcessCrashes)
         exit(1);
 }
 
@@ -2362,24 +2387,7 @@
     // ensure we only print the crashed message once.
     if (!m_didPrintWebProcessCrashedMessage) {
         pid_t pid = WKPageGetProcessIdentifier(m_mainWebView->page());
-        fprintf(stderr, "%s terminated (pid %ld) ", webProcessName(), static_cast<long>(pid));
-        switch (reason) {
-        case kWKProcessTerminationReasonExceededMemoryLimit:
-            fprintf(stderr, "because the memory limit was exceeded\n");
-            break;
-        case kWKProcessTerminationReasonExceededCPULimit:
-            fprintf(stderr, "because the cpu limit was exceeded\n");
-            break;
-        case kWKProcessTerminationReasonRequestedByClient:
-            fprintf(stderr, "because the client requested\n");
-            break;
-        case kWKProcessTerminationReasonCrash:
-            fprintf(stderr, "because the process crashed\n");
-            break;
-        default:
-            fprintf(stderr, "for an unknown reason\n");
-        }
-
+        fprintf(stderr, "%s terminated (pid %ld) for reason: %s\n", webProcessName(), static_cast<long>(pid), terminationReasonToString(reason));
         if (reason == kWKProcessTerminationReasonRequestedByClient) {
             fflush(stderr);
             return;
@@ -2390,7 +2398,7 @@
         m_didPrintWebProcessCrashedMessage = true;
     }
 
-    if (m_shouldExitWhenWebProcessCrashes)
+    if (m_shouldExitWhenAuxiliaryProcessCrashes)
         exit(1);
 }
 

Modified: trunk/Tools/WebKitTestRunner/TestController.h (292969 => 292970)


--- trunk/Tools/WebKitTestRunner/TestController.h	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Tools/WebKitTestRunner/TestController.h	2022-04-18 21:20:22 UTC (rev 292970)
@@ -460,12 +460,12 @@
     void didReceiveRawKeyUpMessageFromInjectedBundle(WKDictionaryRef messageBodyDictionary, bool synchronous);
 
     // WKContextClient
-    static void networkProcessDidCrash(WKContextRef, const void*);
-    void networkProcessDidCrash();
-    static void serviceWorkerProcessDidCrash(WKContextRef, WKProcessID, const void*);
-    void serviceWorkerProcessDidCrash(WKProcessID);
-    static void gpuProcessDidCrash(WKContextRef, WKProcessID, const void*);
-    void gpuProcessDidCrash(WKProcessID);
+    static void networkProcessDidCrashWithDetails(WKContextRef, WKProcessID, WKProcessTerminationReason, const void*);
+    void networkProcessDidCrash(WKProcessID, WKProcessTerminationReason);
+    static void serviceWorkerProcessDidCrashWithDetails(WKContextRef, WKProcessID, WKProcessTerminationReason, const void*);
+    void serviceWorkerProcessDidCrash(WKProcessID, WKProcessTerminationReason);
+    static void gpuProcessDidCrashWithDetails(WKContextRef, WKProcessID, WKProcessTerminationReason, const void*);
+    void gpuProcessDidCrash(WKProcessID, WKProcessTerminationReason);
 
     // WKPageNavigationClient
     static void didCommitNavigation(WKPageRef, WKNavigationRef, WKTypeRef userData, const void*);
@@ -605,7 +605,7 @@
     bool m_forceNoTimeout { false };
 
     bool m_didPrintWebProcessCrashedMessage { false };
-    bool m_shouldExitWhenWebProcessCrashes { true };
+    bool m_shouldExitWhenAuxiliaryProcessCrashes { true };
     
     bool m_beforeUnloadReturnValue { true };
 

Modified: trunk/Tools/WebKitTestRunner/win/TestControllerWin.cpp (292969 => 292970)


--- trunk/Tools/WebKitTestRunner/win/TestControllerWin.cpp	2022-04-18 20:55:51 UTC (rev 292969)
+++ trunk/Tools/WebKitTestRunner/win/TestControllerWin.cpp	2022-04-18 21:20:22 UTC (rev 292970)
@@ -154,9 +154,9 @@
 
     // First, let the test harness know this happened so it won't think we've hung. But
     // make sure we don't exit just yet!
-    m_shouldExitWhenWebProcessCrashes = false;
+    m_shouldExitWhenAuxiliaryProcessCrashes = false;
     webProcessDidTerminate(kWKProcessTerminationReasonCrash);
-    m_shouldExitWhenWebProcessCrashes = true;
+    m_shouldExitWhenAuxiliaryProcessCrashes = true;
 
     // Then spin a run loop until it finishes crashing to give time for a crash log to be saved. If
     // it takes too long for a crash log to be saved, we'll just give up.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to