Changeset 251599 in webkit
- Timestamp:
- Oct 25, 2019, 12:25:29 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 17 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/NetworkProcess.cpp (modified) (2 diffs)
-
NetworkProcess/NetworkProcess.h (modified) (1 diff)
-
NetworkProcess/NetworkProcess.messages.in (modified) (1 diff)
-
UIProcess/API/Cocoa/WKWebView.mm (modified) (1 diff)
-
UIProcess/Network/NetworkProcessProxy.cpp (modified) (2 diffs)
-
UIProcess/Network/NetworkProcessProxy.h (modified) (2 diffs)
-
UIProcess/Network/NetworkProcessProxy.messages.in (modified) (1 diff)
-
UIProcess/ProcessThrottler.cpp (modified) (2 diffs)
-
UIProcess/ProcessThrottler.h (modified) (3 diffs)
-
UIProcess/ProcessThrottlerClient.h (modified) (1 diff)
-
UIProcess/WebProcessProxy.cpp (modified) (2 diffs)
-
UIProcess/WebProcessProxy.h (modified) (2 diffs)
-
UIProcess/WebProcessProxy.messages.in (modified) (1 diff)
-
WebProcess/WebProcess.cpp (modified) (4 diffs)
-
WebProcess/WebProcess.h (modified) (1 diff)
-
WebProcess/WebProcess.messages.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r251598 r251599 1 2019-10-25 Chris Dumez <cdumez@apple.com> 2 3 [iOS][WK2] Use sendWithAsyncReply() to simplify the prepareToSuspend logic 4 https://bugs.webkit.org/show_bug.cgi?id=203422 5 6 Reviewed by Alex Christensen. 7 8 Use sendWithAsyncReply() to simplify the prepareToSuspend logic and make it easier to 9 understand. 10 11 * NetworkProcess/NetworkProcess.cpp: 12 (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync): 13 (WebKit::NetworkProcess::prepareToSuspend): 14 * NetworkProcess/NetworkProcess.h: 15 * NetworkProcess/NetworkProcess.messages.in: 16 * UIProcess/API/Cocoa/WKWebView.mm: 17 (-[WKWebView _processWillSuspendImminentlyForTesting]): 18 * UIProcess/Network/NetworkProcessProxy.cpp: 19 (WebKit::NetworkProcessProxy::sendPrepareToSuspend): 20 (WebKit::NetworkProcessProxy::processReadyToSuspend): Deleted. 21 * UIProcess/Network/NetworkProcessProxy.h: 22 * UIProcess/Network/NetworkProcessProxy.messages.in: 23 * UIProcess/ProcessThrottler.cpp: 24 (WebKit::ProcessThrottler::processReadyToSuspend): 25 (WebKit::ProcessThrottler::sendPrepareToSuspendIPC): 26 * UIProcess/ProcessThrottler.h: 27 * UIProcess/ProcessThrottlerClient.h: 28 * UIProcess/WebProcessProxy.cpp: 29 (WebKit::WebProcessProxy::sendPrepareToSuspend): 30 (WebKit::WebProcessProxy::processReadyToSuspend): Deleted. 31 * UIProcess/WebProcessProxy.h: 32 * UIProcess/WebProcessProxy.messages.in: 33 * WebProcess/WebProcess.cpp: 34 (WebKit::WebProcess::prepareToSuspend): 35 * WebProcess/WebProcess.h: 36 * WebProcess/WebProcess.messages.in: 37 1 38 2019-10-25 youenn fablet <youenn@apple.com> 2 39 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r251577 r251599 2078 2078 void NetworkProcess::processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&& completionHandler) 2079 2079 { 2080 prepareToSuspend(0, true); 2081 completionHandler(); 2082 } 2083 2084 void NetworkProcess::prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent) 2085 { 2086 RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(%" PRIu64 "), isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent); 2080 prepareToSuspend(true, WTFMove(completionHandler)); 2081 } 2082 2083 void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler) 2084 { 2085 RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent: %d", this, isSuspensionImminent); 2087 2086 2088 2087 #if PLATFORM(IOS_FAMILY) && ENABLE(INDEXED_DATABASE) … … 2097 2096 lowMemoryHandler(Critical::Yes); 2098 2097 2099 RefPtr<CallbackAggregator> callbackAggregator; 2100 if (requestToSuspendID) { 2101 callbackAggregator = CallbackAggregator::create([this, requestToSuspendID] { 2102 RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::notifyProcessReadyToSuspend(%" PRIu64 ") Sending ProcessReadyToSuspend IPC message", this, requestToSuspendID); 2103 if (parentProcessConnection()) 2104 parentProcessConnection()->send(Messages::NetworkProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0); 2105 }); 2106 } 2098 RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create([this, completionHandler = WTFMove(completionHandler)]() mutable { 2099 RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend() Process is ready to suspend", this); 2100 completionHandler(); 2101 }); 2107 2102 2108 2103 platformPrepareToSuspend([callbackAggregator] { }); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r251577 r251599 176 176 177 177 void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&); 178 void prepareToSuspend( uint64_t requestToSuspendID, bool isSuspensionImminent);178 void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&); 179 179 void processDidResume(); 180 180 void resume(); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r251577 r251599 76 76 77 77 ProcessWillSuspendImminentlyForTestingSync() -> () Synchronous 78 PrepareToSuspend( uint64_t requestToSuspendID, bool isSuspensionImminent)78 PrepareToSuspend(bool isSuspensionImminent) -> () Async 79 79 ProcessDidResume() 80 80 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r251585 r251599 7612 7612 { 7613 7613 if (_page) 7614 _page->process().sendPrepareToSuspend( 0, WebKit::IsSuspensionImminent::Yes);7614 _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::Yes, [] { }); 7615 7615 } 7616 7616 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r251577 r251599 1075 1075 } 1076 1076 1077 void NetworkProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent) 1078 { 1079 if (canSendMessage()) 1080 send(Messages::NetworkProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0); 1077 void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler) 1078 { 1079 sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler)); 1081 1080 } 1082 1081 … … 1085 1084 if (canSendMessage()) 1086 1085 send(Messages::NetworkProcess::ProcessDidResume(), 0); 1087 }1088 1089 void NetworkProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)1090 {1091 m_throttler.processReadyToSuspend(requestToSuspendID);1092 1086 } 1093 1087 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r251577 r251599 160 160 void setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID, bool, CompletionHandler<void()>&&); 161 161 #endif 162 163 void processReadyToSuspend(uint64_t requestToSuspendID);164 162 165 163 void sendProcessDidTransitionToForeground(); … … 209 207 210 208 // ProcessThrottlerClient 211 void sendPrepareToSuspend( uint64_t requestToSuspendID, IsSuspensionImminent) final;209 void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final; 212 210 void didSetAssertionState(AssertionState) final; 213 211 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
r251577 r251599 32 32 TestProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebKit::WebPageProxyIdentifier pageID) -> (bool handled) Synchronous 33 33 34 ProcessReadyToSuspend(uint64_t pendingRequestToSuspendID)35 34 SetIsHoldingLockedFiles(bool isHoldingLockedFiles) 36 35 -
trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp
r251577 r251599 124 124 } 125 125 126 void ProcessThrottler::processReadyToSuspend( uint64_t requestToSuspendID)126 void ProcessThrottler::processReadyToSuspend() 127 127 { 128 RELEASE_ASSERT(requestToSuspendID); 129 if (!m_pendingRequestToSuspendID || *m_pendingRequestToSuspendID != requestToSuspendID) 130 return; 128 RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend() Updating process assertion to allow suspension", m_processIdentifier, this); 131 129 132 RELEASE_ LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend(%" PRIu64 ") Updating process assertion to allow suspension", m_processIdentifier, this, requestToSuspendID);130 RELEASE_ASSERT(m_pendingRequestToSuspendID); 133 131 clearPendingRequestToSuspend(); 134 132 … … 153 151 m_pendingRequestToSuspendID = generatePrepareToSuspendRequestID(); 154 152 RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::sendPrepareToSuspendIPC() Sending PrepareToSuspend(%" PRIu64 ", isSuspensionImminent: %d) IPC", m_processIdentifier, this, *m_pendingRequestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes); 155 m_process.sendPrepareToSuspend(*m_pendingRequestToSuspendID, isSuspensionImminent); 153 m_process.sendPrepareToSuspend(isSuspensionImminent, [this, weakThis = makeWeakPtr(*this), requestToSuspendID = *m_pendingRequestToSuspendID]() mutable { 154 if (weakThis && m_pendingRequestToSuspendID && *m_pendingRequestToSuspendID == requestToSuspendID) 155 processReadyToSuspend(); 156 }); 156 157 } 157 158 -
trunk/Source/WebKit/UIProcess/ProcessThrottler.h
r251577 r251599 46 46 class ProcessThrottlerClient; 47 47 48 class ProcessThrottler : p rivate ProcessAssertion::Client {48 class ProcessThrottler : public CanMakeWeakPtr<ProcessThrottler>, private ProcessAssertion::Client { 49 49 public: 50 50 enum ForegroundActivityCounterType { }; … … 61 61 62 62 void didConnectToProcess(ProcessID); 63 void processReadyToSuspend(uint64_t pendingRequestToSuspendID);64 63 bool shouldBeRunnable() const { return m_foregroundCounter.value() || m_backgroundCounter.value(); } 65 64 … … 71 70 void prepareToSuspendTimeoutTimerFired(); 72 71 void sendPrepareToSuspendIPC(IsSuspensionImminent); 72 void processReadyToSuspend(); 73 73 74 74 // ProcessAssertionClient -
trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h
r251577 r251599 37 37 virtual ~ProcessThrottlerClient() { } 38 38 39 virtual void sendPrepareToSuspend( uint64_t requestToSuspendID, IsSuspensionImminent) = 0;39 virtual void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) = 0; 40 40 virtual void sendProcessDidResume() = 0; 41 41 virtual void didSetAssertionState(AssertionState) = 0; -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r251589 r251599 1218 1218 } 1219 1219 1220 void WebProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent) 1221 { 1222 if (canSendMessage()) 1223 send(Messages::WebProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0); 1220 void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler) 1221 { 1222 sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler)); 1224 1223 } 1225 1224 … … 1228 1227 if (canSendMessage()) 1229 1228 send(Messages::WebProcess::ProcessDidResume(), 0); 1230 }1231 1232 void WebProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)1233 {1234 m_throttler.processReadyToSuspend(requestToSuspendID);1235 1229 } 1236 1230 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r251577 r251599 224 224 void windowServerConnectionStateChanged(); 225 225 226 void processReadyToSuspend(uint64_t requestToSuspendID);227 228 226 void setIsHoldingLockedFiles(bool); 229 227 … … 299 297 300 298 // ProcessThrottlerClient 301 void sendPrepareToSuspend( uint64_t requestToSuspendID, IsSuspensionImminent) override;302 void sendProcessDidResume() override;303 void didSetAssertionState(AssertionState) override;299 void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final; 300 void sendProcessDidResume() final; 301 void didSetAssertionState(AssertionState) final; 304 302 305 303 #if PLATFORM(COCOA) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in
r251577 r251599 38 38 #endif 39 39 GetNetworkProcessConnection() -> (struct WebKit::NetworkProcessConnectionInfo connectionInfo) Synchronous 40 ProcessReadyToSuspend(uint64_t requestToSuspendID)41 40 42 41 SetIsHoldingLockedFiles(bool isHoldingLockedFiles) -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r251598 r251599 1378 1378 #endif 1379 1379 1380 void WebProcess::prepareToSuspend( uint64_t requestToSuspendID, bool isSuspensionImminent)1381 { 1382 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend( %" PRIu64 ") isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent);1380 void WebProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler) 1381 { 1382 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() isSuspensionImminent: %d", this, isSuspensionImminent); 1383 1383 SetForScope<bool> suspensionScope(m_isSuspending, true); 1384 1384 m_processIsSuspended = true; … … 1386 1386 #if PLATFORM(COCOA) 1387 1387 if (m_processType == ProcessType::PrewarmedWebContent) { 1388 if (requestToSuspendID) { 1389 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID); 1390 parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0); 1391 } 1392 return; 1388 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this); 1389 return completionHandler(); 1393 1390 } 1394 1391 #endif … … 1418 1415 #endif 1419 1416 1420 markAllLayersVolatile([this, requestToSuspendID](bool success){1417 markAllLayersVolatile([this, completionHandler = WTFMove(completionHandler)](bool success) mutable { 1421 1418 if (success) 1422 1419 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Successfuly marked all layers as volatile", this); … … 1424 1421 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Failed to mark all layers as volatile", this); 1425 1422 1426 if (requestToSuspendID) { 1427 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID); 1428 parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0); 1429 } 1423 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this); 1424 completionHandler(); 1430 1425 }); 1431 1426 } -
trunk/Source/WebKit/WebProcess/WebProcess.h
r251598 r251599 236 236 void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds); 237 237 238 void prepareToSuspend( uint64_t requestToSuspendID, bool isSuspensionImminent);238 void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&); 239 239 void processDidResume(); 240 240 -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r251577 r251599 94 94 DestroyAutomationSessionProxy() 95 95 96 PrepareToSuspend( uint64_t requestToSuspendID, bool isSuspensionImminent)96 PrepareToSuspend(bool isSuspensionImminent) -> () Async 97 97 ProcessDidResume() 98 98
Note:
See TracChangeset
for help on using the changeset viewer.