Changeset 292912 in webkit


Ignore:
Timestamp:
Apr 15, 2022, 10:23:23 AM (3 years ago)
Author:
Simon Fraser
Message:

Use the ProcessTerminationReason enum for all the process types
https://bugs.webkit.org/show_bug.cgi?id=239372

Reviewed by Chris Dumez.

WebProcess, NetworkProcess and GPUProcess all had their own "termination reasons" enums.
Use ProcessTerminationReason for all of them (noting values that only apply to the web process).
Also provide a helper function to turn the reasons into a string.

  • Shared/ProcessTerminationReason.cpp: Copied from Source/WebKit/Shared/ProcessTerminationReason.h.

(WebKit::processTerminationReasonToString):

  • Shared/ProcessTerminationReason.h:
  • Sources.txt:
  • UIProcess/API/C/WKAPICast.h:

(WebKit::toAPI):

  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::wkProcessTerminationReason):

  • UIProcess/GPU/GPUProcessProxy.cpp:

(WebKit::GPUProcessProxy::gpuProcessExited):
(WebKit::GPUProcessProxy::processIsReadyToExit):
(WebKit::GPUProcessProxy::didClose):
(WebKit::GPUProcessProxy::didFinishLaunching):
(WebKit::GPUProcessProxy::didBecomeUnresponsive):

  • UIProcess/GPU/GPUProcessProxy.h:
  • UIProcess/Network/NetworkProcessProxy.cpp:

(WebKit::NetworkProcessProxy::terminate):
(WebKit::NetworkProcessProxy::networkProcessDidTerminate):
(WebKit::NetworkProcessProxy::didClose):
(WebKit::NetworkProcessProxy::didFinishLaunching):
(WebKit::NetworkProcessProxy::didExceedMemoryLimit):

  • UIProcess/Network/NetworkProcessProxy.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::shouldReloadAfterProcessTermination):
(WebKit::WebPageProxy::gpuProcessExited):
(WebKit::processTerminationReasonToString): Deleted.

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::networkProcessDidTerminate):
(WebKit::WebProcessPool::gpuProcessExited):

  • UIProcess/WebProcessPool.h:
  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::gpuProcessExited):

  • UIProcess/WebProcessProxy.h:
  • WebKit.xcodeproj/project.pbxproj:
Location:
trunk/Source/WebKit
Files:
16 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r292905 r292912  
     12022-04-14  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Use the ProcessTerminationReason enum for all the process types
     4        https://bugs.webkit.org/show_bug.cgi?id=239372
     5
     6        Reviewed by Chris Dumez.
     7
     8        WebProcess, NetworkProcess and GPUProcess all had their own "termination reasons" enums.
     9        Use ProcessTerminationReason for all of them (noting values that only apply to the web process).
     10        Also provide a helper function to turn the reasons into a string.
     11
     12        * Shared/ProcessTerminationReason.cpp: Copied from Source/WebKit/Shared/ProcessTerminationReason.h.
     13        (WebKit::processTerminationReasonToString):
     14        * Shared/ProcessTerminationReason.h:
     15        * Sources.txt:
     16        * UIProcess/API/C/WKAPICast.h:
     17        (WebKit::toAPI):
     18        * UIProcess/Cocoa/NavigationState.mm:
     19        (WebKit::wkProcessTerminationReason):
     20        * UIProcess/GPU/GPUProcessProxy.cpp:
     21        (WebKit::GPUProcessProxy::gpuProcessExited):
     22        (WebKit::GPUProcessProxy::processIsReadyToExit):
     23        (WebKit::GPUProcessProxy::didClose):
     24        (WebKit::GPUProcessProxy::didFinishLaunching):
     25        (WebKit::GPUProcessProxy::didBecomeUnresponsive):
     26        * UIProcess/GPU/GPUProcessProxy.h:
     27        * UIProcess/Network/NetworkProcessProxy.cpp:
     28        (WebKit::NetworkProcessProxy::terminate):
     29        (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
     30        (WebKit::NetworkProcessProxy::didClose):
     31        (WebKit::NetworkProcessProxy::didFinishLaunching):
     32        (WebKit::NetworkProcessProxy::didExceedMemoryLimit):
     33        * UIProcess/Network/NetworkProcessProxy.h:
     34        * UIProcess/WebPageProxy.cpp:
     35        (WebKit::shouldReloadAfterProcessTermination):
     36        (WebKit::WebPageProxy::gpuProcessExited):
     37        (WebKit::processTerminationReasonToString): Deleted.
     38        * UIProcess/WebPageProxy.h:
     39        * UIProcess/WebProcessPool.cpp:
     40        (WebKit::WebProcessPool::networkProcessDidTerminate):
     41        (WebKit::WebProcessPool::gpuProcessExited):
     42        * UIProcess/WebProcessPool.h:
     43        * UIProcess/WebProcessProxy.cpp:
     44        (WebKit::WebProcessProxy::gpuProcessExited):
     45        * UIProcess/WebProcessProxy.h:
     46        * WebKit.xcodeproj/project.pbxproj:
     47
    1482022-04-15  Youenn Fablet  <youenn@apple.com>
    249
  • trunk/Source/WebKit/Shared/ProcessTerminationReason.cpp

    r292911 r292912  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #pragma once
     26#include "config.h"
     27#include "ProcessTerminationReason.h"
    2728
    2829namespace WebKit {
    2930
    30 enum class ProcessTerminationReason {
    31     ExceededMemoryLimit,
    32     ExceededCPULimit,
    33     ExceededProcessCountLimit,
    34     RequestedByClient,
    35     Crash,
    36     NavigationSwap,
    37     RequestedByNetworkProcess,
    38     RequestedByGPUProcess
    39 };
     31const char* processTerminationReasonToString(ProcessTerminationReason reason)
     32{
     33    switch (reason) {
     34    case ProcessTerminationReason::ExceededMemoryLimit:
     35        return "ExceededMemoryLimit";
     36    case ProcessTerminationReason::ExceededCPULimit:
     37        return "ExceededCPULimit";
     38    case ProcessTerminationReason::RequestedByClient:
     39        return "RequestedByClient";
     40    case ProcessTerminationReason::IdleExit:
     41        return "IdleExit";
     42    case ProcessTerminationReason::Unresponsive:
     43        return "Unresponsive";
     44    case ProcessTerminationReason::Crash:
     45        return "Crash";
     46    case ProcessTerminationReason::ExceededProcessCountLimit:
     47        return "ExceededProcessCountLimit";
     48    case ProcessTerminationReason::NavigationSwap:
     49        return "NavigationSwap";
     50    case ProcessTerminationReason::RequestedByNetworkProcess:
     51        return "RequestedByNetworkProcess";
     52    case ProcessTerminationReason::RequestedByGPUProcess:
     53        return "RequestedByGPUProcess";
     54    }
    4055
    41 enum class GPUProcessTerminationReason {
    42     Crash,
    43     IdleExit,
    44     Unresponsive
    45 };
     56    return "";
     57}
    4658
    4759}
  • trunk/Source/WebKit/Shared/ProcessTerminationReason.h

    r282218 r292912  
    3131    ExceededMemoryLimit,
    3232    ExceededCPULimit,
     33    RequestedByClient,
     34    IdleExit,
     35    Unresponsive,
     36    Crash,
     37    // Those below only relevant for the WebContent process.
    3338    ExceededProcessCountLimit,
    34     RequestedByClient,
    35     Crash,
    3639    NavigationSwap,
    3740    RequestedByNetworkProcess,
     
    3942};
    4043
    41 enum class GPUProcessTerminationReason {
    42     Crash,
    43     IdleExit,
    44     Unresponsive
    45 };
     44const char* processTerminationReasonToString(ProcessTerminationReason);
    4645
    4746}
  • trunk/Source/WebKit/Sources.txt

    r292882 r292912  
    236236Shared/PlatformPopupMenuData.cpp
    237237Shared/PrintInfo.cpp
     238Shared/ProcessTerminationReason.cpp
    238239Shared/RTCNetwork.cpp
    239240Shared/RTCPacketOptions.cpp
  • trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h

    r289612 r292912  
    239239    case ProcessTerminationReason::ExceededCPULimit:
    240240        return kWKProcessTerminationReasonExceededCPULimit;
     241    case ProcessTerminationReason::IdleExit:
    241242    case ProcessTerminationReason::NavigationSwap:
    242243        // We probably shouldn't bother coming up with a new C-API type for process-swapping.
     
    246247        return kWKProcessTerminationReasonRequestedByClient;
    247248    case ProcessTerminationReason::ExceededProcessCountLimit:
     249    case ProcessTerminationReason::Unresponsive:
    248250    case ProcessTerminationReason::RequestedByNetworkProcess:
    249251    case ProcessTerminationReason::RequestedByGPUProcess:
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm

    r290394 r292912  
    10581058        return _WKProcessTerminationReasonExceededCPULimit;
    10591059    case ProcessTerminationReason::NavigationSwap:
     1060    case ProcessTerminationReason::IdleExit:
    10601061        // We probably shouldn't bother coming up with a new API type for process-swapping.
    10611062        // "Requested by client" seems like the best match for existing types.
     
    10641065        return _WKProcessTerminationReasonRequestedByClient;
    10651066    case ProcessTerminationReason::ExceededProcessCountLimit:
     1067    case ProcessTerminationReason::Unresponsive:
    10661068    case ProcessTerminationReason::RequestedByNetworkProcess:
    10671069    case ProcessTerminationReason::RequestedByGPUProcess:
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r292024 r292912  
    416416}
    417417
    418 void GPUProcessProxy::gpuProcessExited(GPUProcessTerminationReason reason)
     418void GPUProcessProxy::gpuProcessExited(ProcessTerminationReason reason)
    419419{
    420420    Ref protectedThis { *this };
    421421
    422422    switch (reason) {
    423     case GPUProcessTerminationReason::Crash:
    424         RELEASE_LOG_ERROR(Process, "%p - GPUProcessProxy::gpuProcessExited: reason=crash", this);
     423    case ProcessTerminationReason::ExceededMemoryLimit:
     424    case ProcessTerminationReason::ExceededCPULimit:
     425    case ProcessTerminationReason::RequestedByClient:
     426    case ProcessTerminationReason::IdleExit:
     427    case ProcessTerminationReason::Unresponsive:
     428    case ProcessTerminationReason::Crash:
     429        RELEASE_LOG_ERROR(Process, "%p - GPUProcessProxy::gpuProcessExited: reason=reason=%{public}s", this, processTerminationReasonToString(reason));
    425430        break;
    426     case GPUProcessTerminationReason::IdleExit:
    427         RELEASE_LOG(Process, "%p - GPUProcessProxy::gpuProcessExited: reason=idle-exit", this);
    428         break;
    429     case GPUProcessTerminationReason::Unresponsive:
    430         RELEASE_LOG(Process, "%p - GPUProcessProxy::gpuProcessExited: reason=unresponsive", this);
     431    case ProcessTerminationReason::ExceededProcessCountLimit:
     432    case ProcessTerminationReason::NavigationSwap:
     433    case ProcessTerminationReason::RequestedByNetworkProcess:
     434    case ProcessTerminationReason::RequestedByGPUProcess:
     435        ASSERT_NOT_REACHED();
    431436        break;
    432437    }
     
    443448    RELEASE_LOG(Process, "%p - GPUProcessProxy::processIsReadyToExit:", this);
    444449    terminate();
    445     gpuProcessExited(GPUProcessTerminationReason::IdleExit); // May cause |this| to get deleted.
     450    gpuProcessExited(ProcessTerminationReason::IdleExit); // May cause |this| to get deleted.
    446451}
    447452
     
    459464{
    460465    RELEASE_LOG_ERROR(Process, "%p - GPUProcessProxy::didClose:", this);
    461     gpuProcessExited(GPUProcessTerminationReason::Crash); // May cause |this| to get deleted.
     466    gpuProcessExited(ProcessTerminationReason::Crash); // May cause |this| to get deleted.
    462467}
    463468
     
    481486
    482487    if (!IPC::Connection::identifierIsValid(connectionIdentifier)) {
    483         gpuProcessExited(GPUProcessTerminationReason::Crash);
     488        gpuProcessExited(ProcessTerminationReason::Crash);
    484489        return;
    485490    }
     
    708713    RELEASE_LOG_ERROR(Process, "GPUProcessProxy::didBecomeUnresponsive: GPUProcess with PID %d became unresponsive, terminating it", processIdentifier());
    709714    terminate();
    710     gpuProcessExited(GPUProcessTerminationReason::Unresponsive);
     715    gpuProcessExited(ProcessTerminationReason::Unresponsive);
    711716}
    712717
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h

    r292024 r292912  
    123123    void processWillShutDown(IPC::Connection&) override;
    124124
    125     void gpuProcessExited(GPUProcessTerminationReason);
     125    void gpuProcessExited(ProcessTerminationReason);
    126126
    127127    // ProcessThrottlerClient
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp

    r292459 r292912  
    151151    if (auto* connection = this->connection())
    152152        connection->invalidate();
    153     networkProcessDidTerminate(TerminationReason::RequestedByClient);
     153    networkProcessDidTerminate(ProcessTerminationReason::RequestedByClient);
    154154}
    155155
     
    413413}
    414414
    415 void NetworkProcessProxy::networkProcessDidTerminate(TerminationReason reason)
     415void NetworkProcessProxy::networkProcessDidTerminate(ProcessTerminationReason reason)
    416416{
    417417    Ref protectedThis { *this };
     
    462462
    463463    // This will cause us to be deleted.
    464     networkProcessDidTerminate(TerminationReason::Crash);
     464    networkProcessDidTerminate(ProcessTerminationReason::Crash);
    465465}
    466466
     
    552552
    553553    if (!IPC::Connection::identifierIsValid(connectionIdentifier)) {
    554         networkProcessDidTerminate(TerminationReason::Crash);
     554        networkProcessDidTerminate(ProcessTerminationReason::Crash);
    555555        return;
    556556    }
     
    17431743    if (auto* connection = this->connection())
    17441744        connection->invalidate();
    1745     networkProcessDidTerminate(TerminationReason::ExceededMemoryLimit);
     1745    networkProcessDidTerminate(ProcessTerminationReason::ExceededMemoryLimit);
    17461746}
    17471747#endif
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h

    r292459 r292912  
    9292class WebUserContentControllerProxy;
    9393
     94enum class ProcessTerminationReason;
    9495enum class RemoteWorkerType : bool;
    9596enum class ShouldGrandfatherStatistics : bool;
     
    249250    void unregisterSchemeForLegacyCustomProtocol(const String&);
    250251
    251     enum class TerminationReason { RequestedByClient, Crash, ExceededMemoryLimit };
    252     void networkProcessDidTerminate(TerminationReason);
     252    void networkProcessDidTerminate(ProcessTerminationReason);
    253253   
    254254    void resetQuota(PAL::SessionID, CompletionHandler<void()>&&);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r292902 r292912  
    79517951    case ProcessTerminationReason::RequestedByGPUProcess:
    79527952    case ProcessTerminationReason::Crash:
     7953    case ProcessTerminationReason::Unresponsive:
    79537954        return true;
    79547955    case ProcessTerminationReason::ExceededProcessCountLimit:
    79557956    case ProcessTerminationReason::NavigationSwap:
     7957    case ProcessTerminationReason::IdleExit:
    79567958    case ProcessTerminationReason::RequestedByClient:
    79577959        break;
    79587960    }
    79597961    return false;
    7960 }
    7961 
    7962 static const char* processTerminationReasonToString(ProcessTerminationReason reason)
    7963 {
    7964     switch (reason) {
    7965     case ProcessTerminationReason::ExceededMemoryLimit:
    7966         return "ExceededMemoryLimit";
    7967     case ProcessTerminationReason::ExceededCPULimit:
    7968         return "ExceededCPULimit";
    7969     case ProcessTerminationReason::RequestedByNetworkProcess:
    7970         return "RequestedByNetworkProcess";
    7971     case ProcessTerminationReason::RequestedByGPUProcess:
    7972         return "RequestedByGPUProcess";
    7973     case ProcessTerminationReason::ExceededProcessCountLimit:
    7974         return "ExceededProcessCountLimit";
    7975     case ProcessTerminationReason::NavigationSwap:
    7976         return "NavigationSwap";
    7977     case ProcessTerminationReason::RequestedByClient:
    7978         return "RequestedByClient";
    7979     case ProcessTerminationReason::Crash:
    7980         break;
    7981     }
    7982     return "Crash";
    79837962}
    79847963
     
    1102111000}
    1102211001
    11023 void WebPageProxy::gpuProcessExited(GPUProcessTerminationReason)
     11002void WebPageProxy::gpuProcessExited(ProcessTerminationReason)
    1102411003{
    1102511004#if HAVE(VISIBILITY_PROPAGATION_VIEW)
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r292902 r292912  
    13341334#if ENABLE(GPU_PROCESS)
    13351335    void gpuProcessDidFinishLaunching();
    1336     void gpuProcessExited(GPUProcessTerminationReason);
     1336    void gpuProcessExited(ProcessTerminationReason);
    13371337#endif
    13381338
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r292882 r292912  
    429429}
    430430
    431 void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, NetworkProcessProxy::TerminationReason reason)
    432 {
    433     if (reason == NetworkProcessProxy::TerminationReason::Crash)
     431void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, ProcessTerminationReason reason)
     432{
     433    if (reason == ProcessTerminationReason::Crash)
    434434        m_client.networkProcessDidCrash(this);
    435435
     
    467467}
    468468
    469 void WebProcessPool::gpuProcessExited(ProcessID identifier, GPUProcessTerminationReason reason)
    470 {
    471     WEBPROCESSPOOL_RELEASE_LOG(Process, "gpuProcessDidExit: PID=%d, reason=%u", identifier, static_cast<unsigned>(reason));
     469void WebProcessPool::gpuProcessExited(ProcessID identifier, ProcessTerminationReason reason)
     470{
     471    WEBPROCESSPOOL_RELEASE_LOG(Process, "gpuProcessDidExit: PID=%d, reason=reason=%{public}s", identifier, processTerminationReasonToString(reason));
    472472    m_gpuProcess = nullptr;
    473473
    474     if (reason == GPUProcessTerminationReason::Crash || reason == GPUProcessTerminationReason::Unresponsive)
     474    if (reason == ProcessTerminationReason::Crash || reason == ProcessTerminationReason::Unresponsive)
    475475        m_client.gpuProcessDidCrash(this, identifier);
    476476
     
    479479        process->gpuProcessExited(reason);
    480480
    481     if (reason == GPUProcessTerminationReason::Crash || reason == GPUProcessTerminationReason::Unresponsive) {
     481    if (reason == ProcessTerminationReason::Crash || reason == ProcessTerminationReason::Unresponsive) {
    482482        if (++m_recentGPUProcessCrashCount > maximumGPUProcessRelaunchAttemptsBeforeKillingWebProcesses) {
    483483            WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "gpuProcessDidExit: GPU Process has crashed more than %u times in the last %g seconds, terminating all WebProcesses", maximumGPUProcessRelaunchAttemptsBeforeKillingWebProcesses, resetGPUProcessCrashCountDelay.seconds());
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r292882 r292912  
    362362#if ENABLE(GPU_PROCESS)
    363363    void gpuProcessDidFinishLaunching(ProcessID);
    364     void gpuProcessExited(ProcessID, GPUProcessTerminationReason);
     364    void gpuProcessExited(ProcessID, ProcessTerminationReason);
    365365
    366366    void getGPUProcessConnection(WebProcessProxy&, GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
     
    370370#endif
    371371    // Network Process Management
    372     void networkProcessDidTerminate(NetworkProcessProxy&, NetworkProcessProxy::TerminationReason);
     372    void networkProcessDidTerminate(NetworkProcessProxy&, ProcessTerminationReason);
    373373
    374374    bool isServiceWorkerPageID(WebPageProxyIdentifier) const;
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r292882 r292912  
    831831}
    832832
    833 void WebProcessProxy::gpuProcessExited(GPUProcessTerminationReason reason)
    834 {
    835     if (reason == GPUProcessTerminationReason::IdleExit)
     833void WebProcessProxy::gpuProcessExited(ProcessTerminationReason reason)
     834{
     835    if (reason == ProcessTerminationReason::IdleExit)
    836836        WEBPROCESSPROXY_RELEASE_LOG(Process, "gpuProcessExited: reason=idle-exit");
    837837    else
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r292882 r292912  
    384384#if ENABLE(GPU_PROCESS)
    385385    void gpuProcessDidFinishLaunching();
    386     void gpuProcessExited(GPUProcessTerminationReason);
     386    void gpuProcessExited(ProcessTerminationReason);
    387387#endif
    388388
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r292882 r292912  
    29372937                0FE27FAE2714FC150003AAAE /* TiledCoreAnimationScrollingCoordinator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TiledCoreAnimationScrollingCoordinator.h; sourceTree = "<group>"; };
    29382938                0FE27FAF2714FC150003AAAE /* TiledCoreAnimationScrollingCoordinator.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TiledCoreAnimationScrollingCoordinator.mm; sourceTree = "<group>"; };
     2939                0FEC6E05280915CF008082AC /* ProcessTerminationReason.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProcessTerminationReason.cpp; sourceTree = "<group>"; };
    29392940                0FF24A2B1879E4BC003ABF0C /* RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp; path = DerivedSources/WebKit/RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
    29402941                0FF24A2B1879E4BC003ABF0D /* RemoteCaptureSampleManagerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteCaptureSampleManagerMessageReceiver.cpp; path = DerivedSources/WebKit/RemoteCaptureSampleManagerMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
     
    78947895                                E1CC1B8E12D7EADF00625838 /* PrintInfo.h */,
    78957896                                5C05FDF227AB4FA5003A2487 /* PrivateRelayed.h */,
     7897                                0FEC6E05280915CF008082AC /* ProcessTerminationReason.cpp */,
    78967898                                463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */,
    78977899                                517B5F94275EBA62002DC22D /* PushMessageForTesting.h */,
Note: See TracChangeset for help on using the changeset viewer.