WebKit Bugzilla
Attachment 341256 Details for
Bug 185975
: Ensure that the Web Content process doesn't sleep during initialization
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185975-20180525001330.patch (text/plain), 6.74 KB, created by
Tim Horton
on 2018-05-25 00:13:31 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Tim Horton
Created:
2018-05-25 00:13:31 PDT
Size:
6.74 KB
patch
obsolete
>Subversion Revision: 232164 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 1ee83825aa309c85e72eb142bc62910586060db3..94ba3d6652a0c623acaee680f9d3f6743a15edd9 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,33 @@ >+2018-05-25 Tim Horton <timothy_horton@apple.com> >+ >+ Ensure that the Web Content process doesn't sleep during initialization >+ https://bugs.webkit.org/show_bug.cgi?id=185975 >+ <rdar://problem/40548159> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ WebProcessPool::warmInitialProcess isn't worth much (or at least, as much >+ as it could be) if the Web Content process goes to sleep in the middle >+ of initializeWebProcess. >+ >+ Keep the Web Content process alive until it has handled all messages >+ sent from WebProcessPool::initializeNewWebProcess. >+ >+ This is a significant speedup on some benchmarks I've been running >+ that involve prewarming a process long before any content is loaded. >+ >+ * UIProcess/WebProcessPool.cpp: >+ (WebKit::WebProcessPool::initializeNewWebProcess): >+ * UIProcess/WebProcessProxy.cpp: >+ (WebKit::WebProcessProxy::didSendAllProcessInitializationMessages): >+ (WebKit::WebProcessProxy::didFinishInitializingProcess): >+ * UIProcess/WebProcessProxy.h: >+ * UIProcess/WebProcessProxy.messages.in: >+ * WebProcess/WebProcess.cpp: >+ (WebKit::WebProcess::didSendAllProcessInitializationMessages): >+ * WebProcess/WebProcess.h: >+ * WebProcess/WebProcess.messages.in: >+ > 2018-05-24 Megan Gardner <megan_gardner@apple.com> > > Fix Issues with Loupe Gesture >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index 12a6ddfc0874eaec97e002da603ad37e27429676..bf47f12cc2d7ce3b26668fda8ec51b5be650635a 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -976,6 +976,11 @@ void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDa > auto screenProperties = WebCore::getScreenProperties(); > process.send(Messages::WebProcess::SetScreenProperties(screenProperties.first, screenProperties.second), 0); > #endif >+ >+ // This must remain after the last message sent in this function, >+ // otherwise the Web Content process could be suspended before >+ // initialization is complete. >+ process.didSendAllProcessInitializationMessages(); > } > > void WebProcessPool::warmInitialProcess() >diff --git a/Source/WebKit/UIProcess/WebProcessProxy.cpp b/Source/WebKit/UIProcess/WebProcessProxy.cpp >index 50dd41ed5f93208ffa30f4f5c4b2e8994a2f8bdc..1b71bd722d4e518ca411905a91c39d4feaf502a7 100644 >--- a/Source/WebKit/UIProcess/WebProcessProxy.cpp >+++ b/Source/WebKit/UIProcess/WebProcessProxy.cpp >@@ -1412,4 +1412,18 @@ void WebProcessProxy::releaseBackgroundActivityTokenForFullscreenInput() > > #endif > >+void WebProcessProxy::didSendAllProcessInitializationMessages() >+{ >+ m_backgroundActivityTokenForInitialization = throttler().backgroundActivityToken(); >+ RELEASE_LOG(ProcessSuspension, "UIProcess is taking a background assertion for initialization."); >+ >+ send(Messages::WebProcess::DidSendAllProcessInitializationMessages(), 0); >+} >+ >+void WebProcessProxy::didFinishInitializingProcess() >+{ >+ RELEASE_LOG(ProcessSuspension, "UIProcess is releasing a background assertion because initialization is complete."); >+ m_backgroundActivityTokenForInitialization = nullptr; >+} >+ > } // namespace WebKit >diff --git a/Source/WebKit/UIProcess/WebProcessProxy.h b/Source/WebKit/UIProcess/WebProcessProxy.h >index dcfecef25ce4dc3cc77b2b5d568514bd3a3eedd3..6bbcbe18d1e28379f48dcc558ac8b9742fe3aa40 100644 >--- a/Source/WebKit/UIProcess/WebProcessProxy.h >+++ b/Source/WebKit/UIProcess/WebProcessProxy.h >@@ -226,6 +226,8 @@ public: > void cacheMediaMIMETypes(const Vector<String>&); > #endif > >+ void didSendAllProcessInitializationMessages(); >+ > protected: > static uint64_t generatePageID(); > WebProcessProxy(WebProcessPool&, WebsiteDataStore&, IsInPrewarmedPool); >@@ -313,6 +315,8 @@ private: > > void logDiagnosticMessageForResourceLimitTermination(const String& limitKey); > >+ void didFinishInitializingProcess(); >+ > ResponsivenessTimer m_responsivenessTimer; > BackgroundProcessResponsivenessTimer m_backgroundResponsivenessTimer; > >@@ -364,6 +368,8 @@ private: > #if ENABLE(EXTRA_ZOOM_MODE) > ProcessThrottler::BackgroundActivityToken m_backgroundActivityTokenForFullscreenFormControls; > #endif >+ >+ ProcessThrottler::BackgroundActivityToken m_backgroundActivityTokenForInitialization; > }; > > } // namespace WebKit >diff --git a/Source/WebKit/UIProcess/WebProcessProxy.messages.in b/Source/WebKit/UIProcess/WebProcessProxy.messages.in >index 9e539f58bbb85829929da3a232e831346fd777c2..2e37bf6e11772574ac6fe920c937296a2ac2ce2a 100644 >--- a/Source/WebKit/UIProcess/WebProcessProxy.messages.in >+++ b/Source/WebKit/UIProcess/WebProcessProxy.messages.in >@@ -70,4 +70,6 @@ messages -> WebProcessProxy LegacyReceiver { > #if PLATFORM(COCOA) > CacheMediaMIMETypes(Vector<String> types) > #endif >+ >+ DidFinishInitializingProcess() > } >diff --git a/Source/WebKit/WebProcess/WebProcess.cpp b/Source/WebKit/WebProcess/WebProcess.cpp >index 0e8370485aa99da8e3e41b91cdf2367c2933204e..e740a6578a5148b94f45d5c4ab8f0cee4e0bc581 100644 >--- a/Source/WebKit/WebProcess/WebProcess.cpp >+++ b/Source/WebKit/WebProcess/WebProcess.cpp >@@ -1309,6 +1309,11 @@ void WebProcess::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet > } > } > >+void WebProcess::didSendAllProcessInitializationMessages() >+{ >+ parentProcessConnection()->send(Messages::WebProcessProxy::DidFinishInitializingProcess(), 0); >+} >+ > void WebProcess::setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds) > { > for (auto& page : m_pageMap.values()) >diff --git a/Source/WebKit/WebProcess/WebProcess.h b/Source/WebKit/WebProcess/WebProcess.h >index 6738e29ecfa1dc1b0f9c578bc7b6566a8aad910c..c3a5ee36650675a3ef1da40e7e6812cd5c2b5729 100644 >--- a/Source/WebKit/WebProcess/WebProcess.h >+++ b/Source/WebKit/WebProcess/WebProcess.h >@@ -381,6 +381,8 @@ private: > #endif > #endif > >+ void didSendAllProcessInitializationMessages(); >+ > RefPtr<WebConnectionToUIProcess> m_webConnection; > > HashMap<uint64_t, RefPtr<WebPage>> m_pageMap; >diff --git a/Source/WebKit/WebProcess/WebProcess.messages.in b/Source/WebKit/WebProcess/WebProcess.messages.in >index 493116f0e2b27abdfa691e9b37e177389efd7617..749212402cd6c88299d8d8609e8497bba46d5264 100644 >--- a/Source/WebKit/WebProcess/WebProcess.messages.in >+++ b/Source/WebKit/WebProcess/WebProcess.messages.in >@@ -139,4 +139,6 @@ messages -> WebProcess LegacyReceiver { > #if PLATFORM(COCOA) > SetMediaMIMETypes(Vector<String> types) > #endif >+ >+ DidSendAllProcessInitializationMessages() > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185975
:
341256
|
341325