Log Message
[ iOS ] imported/w3c/web-platform-tests/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.serviceworker.html is flaky failing. https://bugs.webkit.org/show_bug.cgi?id=206934 <rdar://problem/58991581>
Source/WebKit: Reviewed by Brady Eidson. Flakiness would happen when the service worker would take too long to launch and the responsiveness timer would fire and report the process as unresponsive while still launching or very shortly after. When a service worker is reported as unresponsive, we would kill it. To address the issue, several changes were made: - Responsiveness checks are now disabled for slow builds (Debug, ASAN, GuardMalloc) - We only start the ResponsivenessTimer after the process has finished launching since the responsiveness check relies on IPC to the process and we cannot send the IPC until after the process has launched. * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp: (WebKit::DrawingAreaProxyCoordinatedGraphics::sendUpdateBackingStoreState): * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::goToBackForwardItem): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::launchProcessForReload): (WebKit::WebPageProxy::launchProcessWithItem): (WebKit::WebPageProxy::loadRequestWithNavigationShared): (WebKit::WebPageProxy::loadFile): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::loadAlternateHTML): (WebKit::WebPageProxy::loadWebArchiveData): (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::goToBackForwardItem): (WebKit::WebPageProxy::dispatchActivityStateChange): (WebKit::WebPageProxy::processNextQueuedMouseEvent): (WebKit::WebPageProxy::handleKeyboardEvent): (WebKit::WebPageProxy::handleGestureEvent): (WebKit::WebPageProxy::handlePreventableTouchEvent): (WebKit::WebPageProxy::handleTouchEvent): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::mayBecomeUnresponsive): (WebKit::WebProcessProxy::didFinishLaunching): (WebKit::WebProcessProxy::startResponsivenessTimer): (WebKit::WebProcessProxy::isResponsive): * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::responsivenessTimer): LayoutTests: Unskip test which should no longer be flaky. * platform/ios-wk2/TestExpectations:
Modified Paths
- trunk/LayoutTests/ChangeLog
- trunk/LayoutTests/platform/ios-wk2/TestExpectations
- trunk/Source/WebKit/ChangeLog
- trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp
- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
- trunk/Source/WebKit/UIProcess/WebProcessProxy.h
Diff
Modified: trunk/LayoutTests/ChangeLog (255517 => 255518)
--- trunk/LayoutTests/ChangeLog 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/LayoutTests/ChangeLog 2020-01-31 20:58:43 UTC (rev 255518)
@@ -1,3 +1,13 @@
+2020-01-31 Chris Dumez <[email protected]>
+
+ [ iOS ] imported/w3c/web-platform-tests/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.serviceworker.html is flaky failing.
+ https://bugs.webkit.org/show_bug.cgi?id=206934
+ <rdar://problem/58991581>
+
+ Unskip test which should no longer be flaky.
+
+ * platform/ios-wk2/TestExpectations:
+
2020-01-31 Jason Lawrence <[email protected]>
[ Mac ] imported/w3c/web-platform-tests/media-source/mediasource-replay.html flaky failing.
Modified: trunk/LayoutTests/platform/ios-wk2/TestExpectations (255517 => 255518)
--- trunk/LayoutTests/platform/ios-wk2/TestExpectations 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/LayoutTests/platform/ios-wk2/TestExpectations 2020-01-31 20:58:43 UTC (rev 255518)
@@ -1359,8 +1359,6 @@
webkit.org/b/206752 imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html [ Pass Failure ]
-webkit.org/b/206934 imported/w3c/web-platform-tests/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.serviceworker.html [ Pass Failure ]
-
webkit.org/b/206946 http/tests/security/cookies/third-party-cookie-blocking-main-frame.html [ Pass Timeout ]
webkit.org/b/206965 storage/indexeddb/intversion-long-queue-private.html [ Pass Failure ]
Modified: trunk/Source/WebKit/ChangeLog (255517 => 255518)
--- trunk/Source/WebKit/ChangeLog 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/ChangeLog 2020-01-31 20:58:43 UTC (rev 255518)
@@ -1,3 +1,55 @@
+2020-01-31 Chris Dumez <[email protected]>
+
+ [ iOS ] imported/w3c/web-platform-tests/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.serviceworker.html is flaky failing.
+ https://bugs.webkit.org/show_bug.cgi?id=206934
+ <rdar://problem/58991581>
+
+ Reviewed by Brady Eidson.
+
+ Flakiness would happen when the service worker would take too long to launch and the responsiveness timer would fire and
+ report the process as unresponsive while still launching or very shortly after. When a service worker is reported as
+ unresponsive, we would kill it.
+
+ To address the issue, several changes were made:
+ - Responsiveness checks are now disabled for slow builds (Debug, ASAN, GuardMalloc)
+ - We only start the ResponsivenessTimer after the process has finished launching since the responsiveness
+ check relies on IPC to the process and we cannot send the IPC until after the process has launched.
+
+ * UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
+ (WebKit::DrawingAreaProxyCoordinatedGraphics::sendUpdateBackingStoreState):
+ * UIProcess/ProvisionalPageProxy.cpp:
+ (WebKit::ProvisionalPageProxy::goToBackForwardItem):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::launchProcessForReload):
+ (WebKit::WebPageProxy::launchProcessWithItem):
+ (WebKit::WebPageProxy::loadRequestWithNavigationShared):
+ (WebKit::WebPageProxy::loadFile):
+ (WebKit::WebPageProxy::loadDataWithNavigationShared):
+ (WebKit::WebPageProxy::loadAlternateHTML):
+ (WebKit::WebPageProxy::loadWebArchiveData):
+ (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
+ (WebKit::WebPageProxy::stopLoading):
+ (WebKit::WebPageProxy::reload):
+ (WebKit::WebPageProxy::goToBackForwardItem):
+ (WebKit::WebPageProxy::dispatchActivityStateChange):
+ (WebKit::WebPageProxy::processNextQueuedMouseEvent):
+ (WebKit::WebPageProxy::handleKeyboardEvent):
+ (WebKit::WebPageProxy::handleGestureEvent):
+ (WebKit::WebPageProxy::handlePreventableTouchEvent):
+ (WebKit::WebPageProxy::handleTouchEvent):
+ (WebKit::WebPageProxy::runJavaScriptAlert):
+ (WebKit::WebPageProxy::runJavaScriptConfirm):
+ (WebKit::WebPageProxy::runJavaScriptPrompt):
+ (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
+ (WebKit::WebPageProxy::runOpenPanel):
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::mayBecomeUnresponsive):
+ (WebKit::WebProcessProxy::didFinishLaunching):
+ (WebKit::WebProcessProxy::startResponsivenessTimer):
+ (WebKit::WebProcessProxy::isResponsive):
+ * UIProcess/WebProcessProxy.h:
+ (WebKit::WebProcessProxy::responsivenessTimer):
+
2020-01-31 Kate Cheney <[email protected]>
Add page configuration additions to APIPageConfiguration
Modified: trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp (255517 => 255518)
--- trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp 2020-01-31 20:58:43 UTC (rev 255518)
@@ -175,7 +175,7 @@
m_isWaitingForDidUpdateBackingStoreState = false;
// Stop the responsiveness timer that was started in sendUpdateBackingStoreState.
- process().responsivenessTimer().stop();
+ process().stopResponsivenessTimer();
if (layerTreeContext != m_layerTreeContext) {
if (layerTreeContext.isEmpty() && !m_layerTreeContext.isEmpty()) {
@@ -319,7 +319,7 @@
if (m_isWaitingForDidUpdateBackingStoreState) {
// Start the responsiveness timer. We will stop it when we hear back from the WebProcess
// in didUpdateBackingStoreState.
- process().responsivenessTimer().start();
+ process().startResponsivenessTimer();
}
if (m_isWaitingForDidUpdateBackingStoreState && !m_layerTreeContext.isEmpty()) {
Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (255517 => 255518)
--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2020-01-31 20:58:43 UTC (rev 255518)
@@ -181,7 +181,7 @@
});
send(Messages::WebPage::UpdateBackForwardListForReattach(WTFMove(itemStates)));
send(Messages::WebPage::GoToBackForwardItem(navigation.navigationID(), item.itemID(), *navigation.backForwardFrameLoadType(), WebCore::ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies)));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
inline bool ProvisionalPageProxy::validateInput(FrameIdentifier frameID, const Optional<uint64_t>& navigationID)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (255517 => 255518)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2020-01-31 20:58:43 UTC (rev 255518)
@@ -976,7 +976,7 @@
// We allow stale content when reloading a WebProcess that's been killed or crashed.
send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), m_backForwardList->currentItem()->itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No, WTF::nullopt));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
return navigation;
}
@@ -999,7 +999,7 @@
auto navigation = m_navigationState->createBackForwardNavigation(item, m_backForwardList->currentItem(), FrameLoadType::IndexedBackForward);
send(Messages::WebPage::GoToBackForwardItem(navigation->navigationID(), item.itemID(), FrameLoadType::IndexedBackForward, ShouldTreatAsContinuingLoad::No, WTF::nullopt));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
return navigation;
}
@@ -1289,7 +1289,7 @@
#else
process->send(Messages::WebPage::LoadRequest(loadParameters), webPageID);
#endif
- process->responsivenessTimer().start();
+ process->startResponsivenessTimer();
}
RefPtr<API::Navigation> WebPageProxy::loadFile(const String& fileURLString, const String& resourceDirectoryURLString, API::Object* userData)
@@ -1344,7 +1344,7 @@
#else
send(Messages::WebPage::LoadRequest(loadParameters));
#endif
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
return navigation;
}
@@ -1390,7 +1390,7 @@
process->assumeReadAccessToBaseURL(*this, baseURL);
process->send(Messages::WebPage::LoadData(loadParameters), webPageID);
- process->responsivenessTimer().start();
+ process->startResponsivenessTimer();
}
void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const String& encoding, const URL& baseURL, const URL& unreachableURL, API::Object* userData)
@@ -1433,7 +1433,7 @@
m_process->assumeReadAccessToBaseURL(*this, baseURL);
m_process->assumeReadAccessToBaseURL(*this, unreachableURL);
send(Messages::WebPage::LoadAlternateHTML(loadParameters));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
void WebPageProxy::loadWebArchiveData(API::Data* webArchiveData, API::Object* userData)
@@ -1460,7 +1460,7 @@
addPlatformLoadParameters(loadParameters);
send(Messages::WebPage::LoadData(loadParameters));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
void WebPageProxy::navigateToPDFLinkWithSimulatedClick(const String& urlString, IntPoint documentPoint, IntPoint screenPoint)
@@ -1479,7 +1479,7 @@
launchProcess(RegistrableDomain { URL(URL(), urlString) }, ProcessLaunchReason::InitialProcess);
send(Messages::WebPage::NavigateToPDFLinkWithSimulatedClick(urlString, documentPoint, screenPoint));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
void WebPageProxy::stopLoading()
@@ -1496,7 +1496,7 @@
m_provisionalPage->cancel();
m_provisionalPage = nullptr;
}
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
RefPtr<API::Navigation> WebPageProxy::reload(OptionSet<WebCore::ReloadOption> options)
@@ -1527,7 +1527,7 @@
navigation->setUserContentExtensionsEnabled(false);
send(Messages::WebPage::Reload(navigation->navigationID(), options.toRaw(), sandboxExtensionHandle));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
#if ENABLE(SPEECH_SYNTHESIS)
resetSpeechSynthesizer();
@@ -1596,7 +1596,7 @@
m_pageLoadState.setPendingAPIRequest(transaction, { navigation ? navigation->navigationID() : 0, item.url() });
send(Messages::WebPage::GoToBackForwardItem(navigation ? navigation->navigationID() : 0, item.itemID(), frameLoadType, ShouldTreatAsContinuingLoad::No, WTF::nullopt));
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
return navigation;
}
@@ -1950,7 +1950,7 @@
// If we've started the responsiveness timer as part of telling the web process to update the backing store
// state, it might not send back a reply (since it won't paint anything if the web page is hidden) so we
// stop the unresponsiveness timer here.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
}
}
@@ -2480,10 +2480,10 @@
WebEvent::Type eventType = event.type();
if (eventType == WebEvent::MouseDown || eventType == WebEvent::MouseForceChanged || eventType == WebEvent::MouseForceDown)
- m_process->responsivenessTimer().startWithLazyStop();
+ m_process->startResponsivenessTimer(WebProcessProxy::UseLazyStop::Yes);
else if (eventType != WebEvent::MouseMove) {
// NOTE: This does not start the responsiveness timer because mouse move should not indicate interaction.
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
}
LOG(MouseHandling, "UIProcess: sent mouse event %s (queue size %zu)", webMouseEventTypeString(eventType), m_mouseEventQueue.size());
@@ -2672,11 +2672,7 @@
m_keyEventQueue.append(event);
- ResponsivenessTimer& responsivenessTimer = m_process->responsivenessTimer();
- if (event.type() == WebEvent::KeyDown)
- responsivenessTimer.startWithLazyStop();
- else
- responsivenessTimer.start();
+ m_process->startResponsivenessTimer(event.type() == WebEvent::KeyDown ? WebProcessProxy::UseLazyStop::Yes : WebProcessProxy::UseLazyStop::No);
if (m_keyEventQueue.size() == 1) { // Otherwise, sent from DidReceiveEvent message handler.
LOG(KeyHandling, " UI process: sent keyEvent from handleKeyboardEvent");
@@ -2847,11 +2843,7 @@
m_gestureEventQueue.append(event);
// FIXME: Consider doing some coalescing here.
- ResponsivenessTimer& responsivenessTimer = m_process->responsivenessTimer();
- if (event.type() == WebEvent::GestureStart || event.type() == WebEvent::GestureChange)
- responsivenessTimer.startWithLazyStop();
- else
- responsivenessTimer.start();
+ m_process->startResponsivenessTimer((event.type() == WebEvent::GestureStart || event.type() == WebEvent::GestureChange) ? WebProcessProxy::UseLazyStop::Yes ? WebProcessProxy::UseLazyStop::No);
send(Messages::EventDispatcher::GestureEvent(m_webPageID, event), 0);
}
@@ -2922,7 +2914,7 @@
return;
}
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
bool handled = false;
bool replyReceived = sendSync(Messages::WebPage::TouchEventSync(event), Messages::WebPage::TouchEventSync::Reply(handled), 1_s, IPC::SendSyncOption::ForceDispatchWhenDestinationIsWaitingForUnboundedSyncReply);
// If the sync request has timed out, we should consider the event handled. The Web Process is too busy to answer any questions, so the default action is also likely to have issues.
@@ -2934,7 +2926,7 @@
pageClient().doneDeferringNativeGestures(handled);
else if (handled)
m_handledSynchronousTouchEventWhileDispatchingPreventableTouchStart = true;
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
}
void WebPageProxy::resetPotentialTapSecurityOrigin()
@@ -2978,7 +2970,7 @@
// we do not send any of the events to the page even if is has listeners.
if (!m_isPageSuspended) {
m_touchEventQueue.append(event);
- m_process->responsivenessTimer().start();
+ m_process->startResponsivenessTimer();
send(Messages::WebPage::TouchEvent(event));
} else {
if (m_touchEventQueue.isEmpty()) {
@@ -5455,7 +5447,7 @@
#endif
// Since runJavaScriptAlert() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
if (m_controlledByAutomation) {
if (auto* automationSession = process().processPool().automationSession())
@@ -5474,7 +5466,7 @@
#endif
// Since runJavaScriptConfirm() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
if (m_controlledByAutomation) {
if (auto* automationSession = process().processPool().automationSession())
@@ -5493,7 +5485,7 @@
exitFullscreenImmediately();
#endif
// Since runJavaScriptPrompt() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
if (m_controlledByAutomation) {
if (auto* automationSession = process().processPool().automationSession())
@@ -5660,7 +5652,7 @@
}
// Since runBeforeUnloadConfirmPanel() can spin a nested run loop we need to turn off the responsiveness timer and the tryClose timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
m_tryCloseTimeoutTimer.stop();
m_uiClient->runBeforeUnloadConfirmPanel(*this, message, frame, WTFMove(securityOrigin), WTFMove(reply));
}
@@ -5707,7 +5699,7 @@
}
// Since runOpenPanel() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
if (!m_uiClient->runOpenPanel(*this, frame, WTFMove(frameSecurityOrigin), parameters.ptr(), m_openPanelResultListener.get())) {
if (!pageClient().handleRunOpenPanel(this, frame, parameters.ptr(), m_openPanelResultListener.get()))
@@ -6295,7 +6287,7 @@
return;
// Since showPopupMenu() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
// Showing a popup menu runs a nested runloop, which can handle messages that cause |this| to get closed.
Ref<WebPageProxy> protect(*this);
@@ -6338,7 +6330,7 @@
m_activeContextMenu = pageClient().createContextMenuProxy(*this, WTFMove(contextMenuContextData), userData);
// Since showContextMenu() can spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
// m_activeContextMenu might get cleared if WebPageProxy code is re-entered from the menu runloop or delegates.
Ref<WebContextMenuProxy> protector(*m_activeContextMenu);
@@ -6685,7 +6677,7 @@
case WebEvent::GestureChange:
case WebEvent::GestureEnd:
#endif
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
break;
}
@@ -7940,7 +7932,7 @@
void WebPageProxy::runModal()
{
// Since runModal() can (and probably will) spin a nested run loop we need to turn off the responsiveness timer.
- m_process->responsivenessTimer().stop();
+ m_process->stopResponsivenessTimer();
// Our Connection's run loop might have more messages waiting to be handled after this RunModal message.
// To make sure they are handled inside of the nested modal run loop we must first signal the Connection's
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (255517 => 255518)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2020-01-31 20:58:43 UTC (rev 255518)
@@ -863,7 +863,26 @@
bool WebProcessProxy::mayBecomeUnresponsive()
{
- return !platformIsBeingDebugged();
+#if !defined(NDEBUG) || ASAN_ENABLED
+ // Disable responsiveness checks in slow builds to avoid false positives.
+ return false;
+#else
+ if (platformIsBeingDebugged())
+ return false;
+
+ static bool isLibgmallocEnabled = [] {
+ char* variable = getenv("DYLD_INSERT_LIBRARIES");
+ if (!variable)
+ return false;
+ if (!strstr(variable, "libgmalloc"))
+ return false;
+ return true;
+ }();
+ if (isLibgmallocEnabled)
+ return false;
+
+ return true;
+#endif
}
void WebProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
@@ -892,6 +911,11 @@
unblockAccessibilityServerIfNeeded();
#endif
+
+ if (m_shouldStartResponsivenessTimerWhenLaunched) {
+ auto useLazyStop = *std::exchange(m_shouldStartResponsivenessTimerWhenLaunched, WTF::nullopt);
+ startResponsivenessTimer(useLazyStop);
+ }
}
WebFrameProxy* WebProcessProxy::webFrame(FrameIdentifier frameID) const
@@ -1122,6 +1146,19 @@
responsivenessTimer().stop();
}
+void WebProcessProxy::startResponsivenessTimer(UseLazyStop useLazyStop)
+{
+ if (isLaunching()) {
+ m_shouldStartResponsivenessTimerWhenLaunched = useLazyStop;
+ return;
+ }
+
+ if (useLazyStop == UseLazyStop::Yes)
+ responsivenessTimer().startWithLazyStop();
+ else
+ responsivenessTimer().start();
+}
+
void WebProcessProxy::enableSuddenTermination()
{
if (state() != State::Running)
@@ -1342,7 +1379,7 @@
if (callback)
m_isResponsiveCallbacks.append(WTFMove(callback));
- responsivenessTimer().start();
+ startResponsivenessTimer();
send(Messages::WebProcess::MainThreadPing(), 0);
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (255517 => 255518)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2020-01-31 20:52:16 UTC (rev 255517)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2020-01-31 20:58:43 UTC (rev 255518)
@@ -175,7 +175,6 @@
RefPtr<API::UserInitiatedAction> userInitiatedActivity(uint64_t);
- ResponsivenessTimer& responsivenessTimer() { return m_responsivenessTimer; }
bool isResponsive() const;
WebFrameProxy* webFrame(WebCore::FrameIdentifier) const;
@@ -217,6 +216,8 @@
void requestTermination(ProcessTerminationReason);
+ enum class UseLazyStop : bool { No, Yes };
+ void startResponsivenessTimer(UseLazyStop = UseLazyStop::No);
void stopResponsivenessTimer();
RefPtr<API::Object> transformHandlesToObjects(API::Object*);
@@ -416,6 +417,7 @@
static const HashSet<String>& platformPathsWithAssumedReadAccess();
+ ResponsivenessTimer& responsivenessTimer() { return m_responsivenessTimer; }
void updateBackgroundResponsivenessTimer();
void processDidTerminateOrFailedToLaunch();
@@ -540,6 +542,7 @@
#if ENABLE(ATTACHMENT_ELEMENT) && PLATFORM(IOS_FAMILY)
bool m_hasIssuedAttachmentElementRelatedSandboxExtensions { false };
#endif
+ Optional<UseLazyStop> m_shouldStartResponsivenessTimerWhenLaunched;
#if PLATFORM(WATCHOS)
std::unique_ptr<ProcessThrottler::BackgroundActivity> m_backgroundActivityForFullscreenFormControls;
_______________________________________________ webkit-changes mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-changes
