Changeset 292912 in webkit
- Timestamp:
- Apr 15, 2022, 10:23:23 AM (3 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 16 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r292905 r292912 1 2022-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 1 48 2022-04-15 Youenn Fablet <youenn@apple.com> 2 49 -
trunk/Source/WebKit/Shared/ProcessTerminationReason.cpp
r292911 r292912 1 1 /* 2 * Copyright (C) 20 17Apple Inc. All rights reserved.2 * Copyright (C) 2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #pragma once 26 #include "config.h" 27 #include "ProcessTerminationReason.h" 27 28 28 29 namespace WebKit { 29 30 30 enum class ProcessTerminationReason { 31 ExceededMemoryLimit, 32 ExceededCPULimit, 33 ExceededProcessCountLimit, 34 RequestedByClient, 35 Crash, 36 NavigationSwap, 37 RequestedByNetworkProcess, 38 RequestedByGPUProcess 39 }; 31 const 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 } 40 55 41 enum class GPUProcessTerminationReason { 42 Crash, 43 IdleExit, 44 Unresponsive 45 }; 56 return ""; 57 } 46 58 47 59 } -
trunk/Source/WebKit/Shared/ProcessTerminationReason.h
r282218 r292912 31 31 ExceededMemoryLimit, 32 32 ExceededCPULimit, 33 RequestedByClient, 34 IdleExit, 35 Unresponsive, 36 Crash, 37 // Those below only relevant for the WebContent process. 33 38 ExceededProcessCountLimit, 34 RequestedByClient,35 Crash,36 39 NavigationSwap, 37 40 RequestedByNetworkProcess, … … 39 42 }; 40 43 41 enum class GPUProcessTerminationReason { 42 Crash, 43 IdleExit, 44 Unresponsive 45 }; 44 const char* processTerminationReasonToString(ProcessTerminationReason); 46 45 47 46 } -
trunk/Source/WebKit/Sources.txt
r292882 r292912 236 236 Shared/PlatformPopupMenuData.cpp 237 237 Shared/PrintInfo.cpp 238 Shared/ProcessTerminationReason.cpp 238 239 Shared/RTCNetwork.cpp 239 240 Shared/RTCPacketOptions.cpp -
trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h
r289612 r292912 239 239 case ProcessTerminationReason::ExceededCPULimit: 240 240 return kWKProcessTerminationReasonExceededCPULimit; 241 case ProcessTerminationReason::IdleExit: 241 242 case ProcessTerminationReason::NavigationSwap: 242 243 // We probably shouldn't bother coming up with a new C-API type for process-swapping. … … 246 247 return kWKProcessTerminationReasonRequestedByClient; 247 248 case ProcessTerminationReason::ExceededProcessCountLimit: 249 case ProcessTerminationReason::Unresponsive: 248 250 case ProcessTerminationReason::RequestedByNetworkProcess: 249 251 case ProcessTerminationReason::RequestedByGPUProcess: -
trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
r290394 r292912 1058 1058 return _WKProcessTerminationReasonExceededCPULimit; 1059 1059 case ProcessTerminationReason::NavigationSwap: 1060 case ProcessTerminationReason::IdleExit: 1060 1061 // We probably shouldn't bother coming up with a new API type for process-swapping. 1061 1062 // "Requested by client" seems like the best match for existing types. … … 1064 1065 return _WKProcessTerminationReasonRequestedByClient; 1065 1066 case ProcessTerminationReason::ExceededProcessCountLimit: 1067 case ProcessTerminationReason::Unresponsive: 1066 1068 case ProcessTerminationReason::RequestedByNetworkProcess: 1067 1069 case ProcessTerminationReason::RequestedByGPUProcess: -
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
r292024 r292912 416 416 } 417 417 418 void GPUProcessProxy::gpuProcessExited( GPUProcessTerminationReason reason)418 void GPUProcessProxy::gpuProcessExited(ProcessTerminationReason reason) 419 419 { 420 420 Ref protectedThis { *this }; 421 421 422 422 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)); 425 430 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(); 431 436 break; 432 437 } … … 443 448 RELEASE_LOG(Process, "%p - GPUProcessProxy::processIsReadyToExit:", this); 444 449 terminate(); 445 gpuProcessExited( GPUProcessTerminationReason::IdleExit); // May cause |this| to get deleted.450 gpuProcessExited(ProcessTerminationReason::IdleExit); // May cause |this| to get deleted. 446 451 } 447 452 … … 459 464 { 460 465 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. 462 467 } 463 468 … … 481 486 482 487 if (!IPC::Connection::identifierIsValid(connectionIdentifier)) { 483 gpuProcessExited( GPUProcessTerminationReason::Crash);488 gpuProcessExited(ProcessTerminationReason::Crash); 484 489 return; 485 490 } … … 708 713 RELEASE_LOG_ERROR(Process, "GPUProcessProxy::didBecomeUnresponsive: GPUProcess with PID %d became unresponsive, terminating it", processIdentifier()); 709 714 terminate(); 710 gpuProcessExited( GPUProcessTerminationReason::Unresponsive);715 gpuProcessExited(ProcessTerminationReason::Unresponsive); 711 716 } 712 717 -
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
r292024 r292912 123 123 void processWillShutDown(IPC::Connection&) override; 124 124 125 void gpuProcessExited( GPUProcessTerminationReason);125 void gpuProcessExited(ProcessTerminationReason); 126 126 127 127 // ProcessThrottlerClient -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r292459 r292912 151 151 if (auto* connection = this->connection()) 152 152 connection->invalidate(); 153 networkProcessDidTerminate( TerminationReason::RequestedByClient);153 networkProcessDidTerminate(ProcessTerminationReason::RequestedByClient); 154 154 } 155 155 … … 413 413 } 414 414 415 void NetworkProcessProxy::networkProcessDidTerminate( TerminationReason reason)415 void NetworkProcessProxy::networkProcessDidTerminate(ProcessTerminationReason reason) 416 416 { 417 417 Ref protectedThis { *this }; … … 462 462 463 463 // This will cause us to be deleted. 464 networkProcessDidTerminate( TerminationReason::Crash);464 networkProcessDidTerminate(ProcessTerminationReason::Crash); 465 465 } 466 466 … … 552 552 553 553 if (!IPC::Connection::identifierIsValid(connectionIdentifier)) { 554 networkProcessDidTerminate( TerminationReason::Crash);554 networkProcessDidTerminate(ProcessTerminationReason::Crash); 555 555 return; 556 556 } … … 1743 1743 if (auto* connection = this->connection()) 1744 1744 connection->invalidate(); 1745 networkProcessDidTerminate( TerminationReason::ExceededMemoryLimit);1745 networkProcessDidTerminate(ProcessTerminationReason::ExceededMemoryLimit); 1746 1746 } 1747 1747 #endif -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r292459 r292912 92 92 class WebUserContentControllerProxy; 93 93 94 enum class ProcessTerminationReason; 94 95 enum class RemoteWorkerType : bool; 95 96 enum class ShouldGrandfatherStatistics : bool; … … 249 250 void unregisterSchemeForLegacyCustomProtocol(const String&); 250 251 251 enum class TerminationReason { RequestedByClient, Crash, ExceededMemoryLimit }; 252 void networkProcessDidTerminate(TerminationReason); 252 void networkProcessDidTerminate(ProcessTerminationReason); 253 253 254 254 void resetQuota(PAL::SessionID, CompletionHandler<void()>&&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r292902 r292912 7951 7951 case ProcessTerminationReason::RequestedByGPUProcess: 7952 7952 case ProcessTerminationReason::Crash: 7953 case ProcessTerminationReason::Unresponsive: 7953 7954 return true; 7954 7955 case ProcessTerminationReason::ExceededProcessCountLimit: 7955 7956 case ProcessTerminationReason::NavigationSwap: 7957 case ProcessTerminationReason::IdleExit: 7956 7958 case ProcessTerminationReason::RequestedByClient: 7957 7959 break; 7958 7960 } 7959 7961 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";7983 7962 } 7984 7963 … … 11021 11000 } 11022 11001 11023 void WebPageProxy::gpuProcessExited( GPUProcessTerminationReason)11002 void WebPageProxy::gpuProcessExited(ProcessTerminationReason) 11024 11003 { 11025 11004 #if HAVE(VISIBILITY_PROPAGATION_VIEW) -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r292902 r292912 1334 1334 #if ENABLE(GPU_PROCESS) 1335 1335 void gpuProcessDidFinishLaunching(); 1336 void gpuProcessExited( GPUProcessTerminationReason);1336 void gpuProcessExited(ProcessTerminationReason); 1337 1337 #endif 1338 1338 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r292882 r292912 429 429 } 430 430 431 void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, NetworkProcessProxy::TerminationReason reason)432 { 433 if (reason == NetworkProcessProxy::TerminationReason::Crash)431 void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, ProcessTerminationReason reason) 432 { 433 if (reason == ProcessTerminationReason::Crash) 434 434 m_client.networkProcessDidCrash(this); 435 435 … … 467 467 } 468 468 469 void WebProcessPool::gpuProcessExited(ProcessID identifier, GPUProcessTerminationReason reason)470 { 471 WEBPROCESSPOOL_RELEASE_LOG(Process, "gpuProcessDidExit: PID=%d, reason= %u", identifier, static_cast<unsigned>(reason));469 void WebProcessPool::gpuProcessExited(ProcessID identifier, ProcessTerminationReason reason) 470 { 471 WEBPROCESSPOOL_RELEASE_LOG(Process, "gpuProcessDidExit: PID=%d, reason=reason=%{public}s", identifier, processTerminationReasonToString(reason)); 472 472 m_gpuProcess = nullptr; 473 473 474 if (reason == GPUProcessTerminationReason::Crash || reason == GPUProcessTerminationReason::Unresponsive)474 if (reason == ProcessTerminationReason::Crash || reason == ProcessTerminationReason::Unresponsive) 475 475 m_client.gpuProcessDidCrash(this, identifier); 476 476 … … 479 479 process->gpuProcessExited(reason); 480 480 481 if (reason == GPUProcessTerminationReason::Crash || reason == GPUProcessTerminationReason::Unresponsive) {481 if (reason == ProcessTerminationReason::Crash || reason == ProcessTerminationReason::Unresponsive) { 482 482 if (++m_recentGPUProcessCrashCount > maximumGPUProcessRelaunchAttemptsBeforeKillingWebProcesses) { 483 483 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 362 362 #if ENABLE(GPU_PROCESS) 363 363 void gpuProcessDidFinishLaunching(ProcessID); 364 void gpuProcessExited(ProcessID, GPUProcessTerminationReason);364 void gpuProcessExited(ProcessID, ProcessTerminationReason); 365 365 366 366 void getGPUProcessConnection(WebProcessProxy&, GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&); … … 370 370 #endif 371 371 // Network Process Management 372 void networkProcessDidTerminate(NetworkProcessProxy&, NetworkProcessProxy::TerminationReason);372 void networkProcessDidTerminate(NetworkProcessProxy&, ProcessTerminationReason); 373 373 374 374 bool isServiceWorkerPageID(WebPageProxyIdentifier) const; -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r292882 r292912 831 831 } 832 832 833 void WebProcessProxy::gpuProcessExited( GPUProcessTerminationReason reason)834 { 835 if (reason == GPUProcessTerminationReason::IdleExit)833 void WebProcessProxy::gpuProcessExited(ProcessTerminationReason reason) 834 { 835 if (reason == ProcessTerminationReason::IdleExit) 836 836 WEBPROCESSPROXY_RELEASE_LOG(Process, "gpuProcessExited: reason=idle-exit"); 837 837 else -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r292882 r292912 384 384 #if ENABLE(GPU_PROCESS) 385 385 void gpuProcessDidFinishLaunching(); 386 void gpuProcessExited( GPUProcessTerminationReason);386 void gpuProcessExited(ProcessTerminationReason); 387 387 #endif 388 388 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r292882 r292912 2937 2937 0FE27FAE2714FC150003AAAE /* TiledCoreAnimationScrollingCoordinator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TiledCoreAnimationScrollingCoordinator.h; sourceTree = "<group>"; }; 2938 2938 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>"; }; 2939 2940 0FF24A2B1879E4BC003ABF0C /* RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp; path = DerivedSources/WebKit/RemoteLayerTreeDrawingAreaProxyMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 2940 2941 0FF24A2B1879E4BC003ABF0D /* RemoteCaptureSampleManagerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RemoteCaptureSampleManagerMessageReceiver.cpp; path = DerivedSources/WebKit/RemoteCaptureSampleManagerMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; … … 7894 7895 E1CC1B8E12D7EADF00625838 /* PrintInfo.h */, 7895 7896 5C05FDF227AB4FA5003A2487 /* PrivateRelayed.h */, 7897 0FEC6E05280915CF008082AC /* ProcessTerminationReason.cpp */, 7896 7898 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */, 7897 7899 517B5F94275EBA62002DC22D /* PushMessageForTesting.h */,
Note:
See TracChangeset
for help on using the changeset viewer.