Diff
Modified: trunk/Source/WebKit/ChangeLog (235631 => 235632)
--- trunk/Source/WebKit/ChangeLog 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/ChangeLog 2018-09-04 20:47:23 UTC (rev 235632)
@@ -1,3 +1,51 @@
+2018-09-04 Chris Dumez <cdu...@apple.com>
+
+ Add process pool configuration flag to turn on automatic process pre-warming
+ https://bugs.webkit.org/show_bug.cgi?id=189263
+ <rdar://problem/44101941>
+
+ Reviewed by Antti Koivisto.
+
+ Add process pool configuration flag to turn on automatic process pre-warming and disassociate
+ it from the warmInitialProcess() SPI.
+
+ For now, turning on "process swap on navigation" via experimental features also turns on
+ automatic process pre-warming.
+
+ * UIProcess/API/APIProcessPoolConfiguration.cpp:
+ (API::ProcessPoolConfiguration::copy):
+ * UIProcess/API/APIProcessPoolConfiguration.h:
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextSetPrewarmsProcessesAutomatically):
+ (WKContextWarmInitialProcess):
+ * UIProcess/API/C/WKContextPrivate.h:
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (-[WKProcessPool _warmInitialProcess]):
+ (-[WKProcessPool _hasPrewarmedWebProcess]):
+ (-[WKProcessPool _webProcessCountIgnoringPrewarmed]):
+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+ (-[_WKProcessPoolConfiguration setPrewarmsProcessesAutomatically:]):
+ (-[_WKProcessPoolConfiguration prewarmsProcessesAutomatically]):
+ * UIProcess/ServiceWorkerProcessProxy.cpp:
+ (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::setMaximumNumberOfProcesses):
+ (WebKit::WebProcessPool::createNewWebProcess):
+ (WebKit::WebProcessPool::tryTakePrewarmedProcess):
+ (WebKit::WebProcessPool::prewarmProcess):
+ (WebKit::WebProcessPool::disconnectProcess):
+ (WebKit::WebProcessPool::createWebPage):
+ (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
+ * UIProcess/WebProcessPool.h:
+ (WebKit::WebProcessPool::sendToOneProcess):
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::create):
+ (WebKit::WebProcessProxy::WebProcessProxy):
+ (WebKit::m_isInPrewarmedPool):
+ * UIProcess/WebProcessProxy.h:
+
2018-09-03 Dean Jackson <d...@apple.com>
Move SystemPreview code from WebKitAdditions to WebKit
Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp 2018-09-04 20:47:23 UTC (rev 235632)
@@ -89,7 +89,6 @@
copy->m_shouldHaveLegacyDataStore = this->m_shouldHaveLegacyDataStore;
copy->m_maximumProcessCount = this->m_maximumProcessCount;
- copy->m_maximumPrewarmedProcessCount = this->m_maximumPrewarmedProcessCount;
copy->m_cacheModel = this->m_cacheModel;
copy->m_diskCacheDirectory = this->m_diskCacheDirectory;
copy->m_diskCacheSpeculativeValidationEnabled = this->m_diskCacheSpeculativeValidationEnabled;
@@ -123,6 +122,7 @@
copy->m_processSwapsOnNavigation = this->m_processSwapsOnNavigation;
copy->m_alwaysKeepAndReuseSwappedProcesses = this->m_alwaysKeepAndReuseSwappedProcesses;
copy->m_processSwapsOnWindowOpenWithOpener = this->m_processSwapsOnWindowOpenWithOpener;
+ copy->m_isAutomaticProcessWarmingEnabled = this->m_isAutomaticProcessWarmingEnabled;
#if ENABLE(PROXIMITY_NETWORKING)
copy->m_wirelessContextIdentifier = this->m_wirelessContextIdentifier;
#endif
Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -53,8 +53,8 @@
unsigned maximumProcessCount() const { return m_maximumProcessCount; }
void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; }
- unsigned maximumPrewarmedProcessCount() const { return m_maximumPrewarmedProcessCount; }
- void setMaximumPrewarmedProcessCount(unsigned maximumPrewarmedProcessCount) { m_maximumPrewarmedProcessCount = maximumPrewarmedProcessCount; }
+ bool isAutomaticProcessWarmingEnabled() const { return m_isAutomaticProcessWarmingEnabled; }
+ void setIsAutomaticProcessWarmingEnabled(bool value) { m_isAutomaticProcessWarmingEnabled = value; }
bool diskCacheSpeculativeValidationEnabled() const { return m_diskCacheSpeculativeValidationEnabled; }
void setDiskCacheSpeculativeValidationEnabled(bool enabled) { m_diskCacheSpeculativeValidationEnabled = enabled; }
@@ -167,7 +167,6 @@
bool m_shouldHaveLegacyDataStore { false };
unsigned m_maximumProcessCount { 0 };
- unsigned m_maximumPrewarmedProcessCount { 0 };
bool m_diskCacheSpeculativeValidationEnabled { false };
WebKit::CacheModel m_cacheModel { WebKit::CacheModelPrimaryWebBrowser };
int64_t m_diskCacheSizeOverride { -1 };
@@ -199,6 +198,7 @@
bool m_processSwapsOnNavigation { false };
bool m_alwaysKeepAndReuseSwappedProcesses { false };
bool m_processSwapsOnWindowOpenWithOpener { false };
+ bool m_isAutomaticProcessWarmingEnabled { false };
WTF::String m_customWebContentServiceBundleIdentifier;
#if PLATFORM(IOS)
Modified: trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp 2018-09-04 20:47:23 UTC (rev 235632)
@@ -402,9 +402,9 @@
toImpl(contextRef)->setCanHandleHTTPSServerTrustEvaluation(value);
}
-void WKContextSetMaximumNumberOfPrewarmedProcesses(WKContextRef contextRef, unsigned value)
+void WKContextSetPrewarmsProcessesAutomatically(WKContextRef contextRef, bool value)
{
- toImpl(contextRef)->setMaximumNumberOfPrewarmedProcesses(value);
+ toImpl(contextRef)->configuration().setIsAutomaticProcessWarmingEnabled(value);
}
void WKContextSetCustomWebContentServiceBundleIdentifier(WKContextRef contextRef, WKStringRef name)
@@ -515,7 +515,7 @@
void WKContextWarmInitialProcess(WKContextRef contextRef)
{
- toImpl(contextRef)->warmInitialProcess();
+ toImpl(contextRef)->prewarmProcess();
}
void WKContextGetStatistics(WKContextRef contextRef, void* context, WKContextGetStatisticsFunction callback)
Modified: trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -69,7 +69,7 @@
WK_EXPORT void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef context, bool value);
-WK_EXPORT void WKContextSetMaximumNumberOfPrewarmedProcesses(WKContextRef context, unsigned count);
+WK_EXPORT void WKContextSetPrewarmsProcessesAutomatically(WKContextRef context, bool value);
WK_EXPORT void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef context, bool value);
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -207,11 +207,6 @@
_processPool->setMaximumNumberOfProcesses(value);
}
-- (void)_setMaximumNumberOfPrewarmedProcesses:(NSUInteger)value
-{
- _processPool->setMaximumNumberOfPrewarmedProcesses(value);
-}
-
- (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value
{
_processPool->setCanHandleHTTPSServerTrustEvaluation(value);
@@ -403,7 +398,7 @@
- (void)_warmInitialProcess
{
- _processPool->warmInitialProcess();
+ _processPool->prewarmProcess();
}
- (void)_automationCapabilitiesDidChange
@@ -484,19 +479,18 @@
_processPool->setShouldMakeNextNetworkProcessLaunchFailForTesting(true);
}
-- (size_t)_prewarmedWebProcessCount
+- (BOOL)_hasPrewarmedWebProcess
{
- size_t result = 0;
for (auto& process : _processPool->processes()) {
- if (process->isInPrewarmedPool())
- ++result;
+ if (process->isPrewarmed())
+ return YES;
}
- return result;
+ return NO;
}
- (size_t)_webProcessCountIgnoringPrewarmed
{
- return [self _webProcessCount] - [self _prewarmedWebProcessCount];
+ return [self _webProcessCount] - ([self _hasPrewarmedWebProcess] ? 1 : 0);
}
- (size_t)_webPageContentProcessCount
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -93,7 +93,7 @@
// Test only.
- (size_t)_webProcessCount WK_API_AVAILABLE(macosx(10.13), ios(11.0));
-- (size_t)_prewarmedWebProcessCount WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (BOOL)_hasPrewarmedWebProcess WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
- (size_t)_webProcessCountIgnoringPrewarmed WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
- (size_t)_pluginProcessCount WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
- (size_t)_serviceWorkerProcessCount WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@@ -113,7 +113,6 @@
- (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
- (void)_registerURLSchemeServiceWorkersCanHandle:(NSString *)scheme WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
- (void)_setMaximumNumberOfProcesses:(NSUInteger)value WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
-- (void)_setMaximumNumberOfPrewarmedProcesses:(NSUInteger)value WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic, getter=_isCookieStoragePartitioningEnabled, setter=_setCookieStoragePartitioningEnabled:) BOOL _cookieStoragePartitioningEnabled WK_API_DEPRECATED("Partitioned cookies are no longer supported", macosx(10.12.3, WK_MAC_TBA), ios(10.3, WK_IOS_TBA));
@property (nonatomic, getter=_isStorageAccessAPIEnabled, setter=_setStorageAccessAPIEnabled:) BOOL _storageAccessAPIEnabled WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -35,7 +35,6 @@
@property (nonatomic, copy) NSURL *injectedBundleURL;
@property (nonatomic) NSUInteger maximumProcessCount;
-@property (nonatomic) NSUInteger maximumPrewarmedProcessCount WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic, nullable, copy) NSString *customWebContentServiceBundleIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL ignoreSynchronousMessagingTimeoutsForTesting WK_API_AVAILABLE(macosx(10.12), ios(10.0));
@@ -66,6 +65,7 @@
@property (nonatomic) BOOL processSwapsOnNavigation WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL alwaysKeepAndReuseSwappedProcesses WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL processSwapsOnWindowOpenWithOpener WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+@property (nonatomic) BOOL prewarmsProcessesAutomatically WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL pageCacheEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@property (nonatomic) BOOL suppressesConnectionTerminationOnSystemChange WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -250,14 +250,14 @@
return _processPoolConfiguration->processSwapsOnNavigation();
}
-- (void)setMaximumPrewarmedProcessCount:(NSUInteger)count
+- (void)setPrewarmsProcessesAutomatically:(BOOL)prewarms
{
- _processPoolConfiguration->setMaximumPrewarmedProcessCount(count);
+ _processPoolConfiguration->setIsAutomaticProcessWarmingEnabled(prewarms);
}
-- (NSUInteger)maximumPrewarmedProcessCount
+- (BOOL)prewarmsProcessesAutomatically
{
- return _processPoolConfiguration->maximumPrewarmedProcessCount();
+ return _processPoolConfiguration->isAutomaticProcessWarmingEnabled();
}
- (void)setAlwaysKeepAndReuseSwappedProcesses:(BOOL)swaps
Modified: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2018-09-04 20:47:23 UTC (rev 235632)
@@ -49,7 +49,7 @@
}
ServiceWorkerProcessProxy::ServiceWorkerProcessProxy(WebProcessPool& pool, const SecurityOriginData& securityOrigin, WebsiteDataStore& store)
- : WebProcessProxy { pool, store, IsInPrewarmedPool::No }
+ : WebProcessProxy { pool, store, IsPrewarmed::No }
, m_securityOrigin(securityOrigin)
, m_serviceWorkerPageID(generatePageID())
{
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-09-04 20:47:23 UTC (rev 235632)
@@ -337,7 +337,7 @@
while (!m_processes.isEmpty()) {
auto& process = m_processes.first();
- ASSERT(process->isInPrewarmedPool());
+ ASSERT(process->isPrewarmed());
// We need to be the only one holding a reference to the pre-warmed process so that it gets destroyed.
// WebProcessProxies currently always expect to have a WebProcessPool.
ASSERT(process->hasOneRef());
@@ -400,22 +400,9 @@
void WebProcessPool::setMaximumNumberOfProcesses(unsigned maximumNumberOfProcesses)
{
- // Guard against API misuse.
- if (m_processes.size() != m_prewarmedProcessCount)
- CRASH();
-
m_configuration->setMaximumProcessCount(maximumNumberOfProcesses);
}
-void WebProcessPool::setMaximumNumberOfPrewarmedProcesses(unsigned maximumNumberOfProcesses)
-{
- // Guard against API misuse.
- if (m_processes.size())
- CRASH();
-
- m_configuration->setMaximumPrewarmedProcessCount(maximumNumberOfProcesses);
-}
-
void WebProcessPool::setCustomWebContentServiceBundleIdentifier(const String& customWebContentServiceBundleIdentifier)
{
// Guard against API misuse.
@@ -781,14 +768,16 @@
platformResolvePathsForSandboxExtensions();
}
-WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore, WebProcessProxy::IsInPrewarmedPool isInPrewarmedPool)
+WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
{
- auto processProxy = WebProcessProxy::create(*this, websiteDataStore, isInPrewarmedPool);
+ auto processProxy = WebProcessProxy::create(*this, websiteDataStore, isPrewarmed);
auto& process = processProxy.get();
initializeNewWebProcess(process, websiteDataStore);
m_processes.append(WTFMove(processProxy));
- if (isInPrewarmedPool == WebProcessProxy::IsInPrewarmedPool::Yes)
- ++m_prewarmedProcessCount;
+ if (isPrewarmed == WebProcessProxy::IsPrewarmed::Yes) {
+ ASSERT(!m_prewarmedProcess);
+ m_prewarmedProcess = &process;
+ }
if (m_serviceWorkerProcessesTerminationTimer.isActive())
m_serviceWorkerProcessesTerminationTimer.stop();
@@ -798,22 +787,15 @@
RefPtr<WebProcessProxy> WebProcessPool::tryTakePrewarmedProcess(WebsiteDataStore& websiteDataStore)
{
- if (!m_prewarmedProcessCount)
+ if (!m_prewarmedProcess)
return nullptr;
- for (const auto& process : m_processes) {
- if (process->isInPrewarmedPool()) {
- --m_prewarmedProcessCount;
- process->markIsNoLongerInPrewarmedPool();
- if (&process->websiteDataStore() != &websiteDataStore)
- process->send(Messages::WebProcess::AddWebsiteDataStore(websiteDataStore.parameters()), 0);
- return process.get();
- }
- }
+ ASSERT(m_prewarmedProcess->isPrewarmed());
+ m_prewarmedProcess->markIsNoLongerInPrewarmedPool();
+ if (&m_prewarmedProcess->websiteDataStore() != &websiteDataStore)
+ m_prewarmedProcess->send(Messages::WebProcess::AddWebsiteDataStore(websiteDataStore.parameters()), 0);
- ASSERT_NOT_REACHED();
- m_prewarmedProcessCount = 0;
- return nullptr;
+ return std::exchange(m_prewarmedProcess, nullptr);
}
#if PLATFORM(MAC)
@@ -1003,24 +985,15 @@
#endif
}
-void WebProcessPool::warmInitialProcess()
+void WebProcessPool::prewarmProcess()
{
- unsigned maxPrewarmed = maximumNumberOfPrewarmedProcesses();
- if (maxPrewarmed && m_prewarmedProcessCount >= maxPrewarmed) {
- ASSERT(!m_processes.isEmpty());
+ if (m_prewarmedProcess)
return;
- }
- // FIXME: This should be removed after Safari has been patched to use setMaximumNumberOfPrewarmedProcesses
- if (!maxPrewarmed)
- m_configuration->setMaximumPrewarmedProcessCount(1);
-
- if (m_processes.size() >= maximumNumberOfProcesses())
- return;
-
if (!m_websiteDataStore)
m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
- createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsInPrewarmedPool::Yes);
+
+ createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsPrewarmed::Yes);
}
void WebProcessPool::enableProcessTermination()
@@ -1076,8 +1049,10 @@
{
ASSERT(m_processes.contains(process));
- if (process->isInPrewarmedPool())
- --m_prewarmedProcessCount;
+ if (m_prewarmedProcess == process) {
+ ASSERT(m_prewarmedProcess->isPrewarmed());
+ m_prewarmedProcess = nullptr;
+ }
// FIXME (Multi-WebProcess): <rdar://problem/12239765> Some of the invalidation calls of the other supplements are still necessary in multi-process mode, but they should only affect data structures pertaining to the process being disconnected.
// Clearing everything causes assertion failures, so it's less trouble to skip that for now.
@@ -1180,8 +1155,12 @@
#endif
auto page = process->createWebPage(pageClient, WTFMove(pageConfiguration));
- if (page->preferences().processSwapOnNavigationEnabled())
+ if (page->preferences().processSwapOnNavigationEnabled()) {
m_configuration->setProcessSwapsOnNavigation(true);
+ // FIXME: For now, turning on PSON from the experimental features menu also turns on
+ // automatic process warming until clients can be updated.
+ m_configuration->setIsAutomaticProcessWarmingEnabled(true);
+ }
return page;
}
@@ -1326,15 +1305,10 @@
void WebProcessPool::didReachGoodTimeToPrewarm()
{
- unsigned maxPrewarmed = maximumNumberOfPrewarmedProcesses();
- if (!maxPrewarmed)
+ if (!configuration().isAutomaticProcessWarmingEnabled())
return;
- if (!m_websiteDataStore)
- m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
-
- while (m_prewarmedProcessCount < maxPrewarmed)
- createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsInPrewarmedPool::Yes);
+ prewarmProcess();
}
void WebProcessPool::populateVisitedLinks()
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -156,9 +156,6 @@
void setMaximumNumberOfProcesses(unsigned); // Can only be called when there are no processes running.
unsigned maximumNumberOfProcesses() const { return !m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount(); }
- void setMaximumNumberOfPrewarmedProcesses(unsigned); // Can only be called when there are no processes running.
- unsigned maximumNumberOfPrewarmedProcesses() const { return m_configuration->maximumPrewarmedProcessCount(); }
-
void setCustomWebContentServiceBundleIdentifier(const String&);
const String& customWebContentServiceBundleIdentifier() { return m_configuration->customWebContentServiceBundleIdentifier(); }
@@ -297,7 +294,7 @@
void allowSpecificHTTPSCertificateForHost(const WebCertificateInfo*, const String& host);
WebProcessProxy& createNewWebProcessRespectingProcessCountLimit(WebsiteDataStore&); // Will return an existing one if limit is met.
- void warmInitialProcess();
+ void prewarmProcess();
bool shouldTerminate(WebProcessProxy*);
@@ -474,7 +471,7 @@
RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&);
- WebProcessProxy& createNewWebProcess(WebsiteDataStore&, WebProcessProxy::IsInPrewarmedPool = WebProcessProxy::IsInPrewarmedPool::No);
+ WebProcessProxy& createNewWebProcess(WebsiteDataStore&, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore&);
void requestWebContentStatistics(StatisticsRequest*);
@@ -537,7 +534,7 @@
IPC::MessageReceiverMap m_messageReceiverMap;
Vector<RefPtr<WebProcessProxy>> m_processes;
- unsigned m_prewarmedProcessCount { 0 };
+ WebProcessProxy* m_prewarmedProcess { nullptr };
WebProcessProxy* m_processWithPageCache { nullptr };
#if ENABLE(SERVICE_WORKER)
@@ -771,7 +768,7 @@
}
if (!messageSent) {
- warmInitialProcess();
+ prewarmProcess();
RefPtr<WebProcessProxy> process = m_processes.last();
if (process->canSendMessage())
process->send(std::forward<T>(message), 0);
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2018-09-04 20:47:23 UTC (rev 235632)
@@ -116,18 +116,18 @@
return pageMap;
}
-Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsInPrewarmedPool isInPrewarmedPool)
+Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsPrewarmed isPrewarmed)
{
- auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore, isInPrewarmedPool));
+ auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore, isPrewarmed));
proxy->connect();
return proxy;
}
-WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsInPrewarmedPool isInPrewarmedPool)
+WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsPrewarmed isPrewarmed)
: ChildProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
, m_responsivenessTimer(*this)
, m_backgroundResponsivenessTimer(*this)
- , m_processPool(processPool, isInPrewarmedPool == IsInPrewarmedPool::Yes ? IsWeak::Yes : IsWeak::No)
+ , m_processPool(processPool, isPrewarmed == IsPrewarmed::Yes ? IsWeak::Yes : IsWeak::No)
, m_mayHaveUniversalFileReadSandboxExtension(false)
, m_numberOfTimesSuddenTerminationWasDisabled(0)
, m_throttler(*this, processPool.shouldTakeUIBackgroundAssertion())
@@ -137,7 +137,7 @@
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
, m_userMediaCaptureManagerProxy(std::make_unique<UserMediaCaptureManagerProxy>(*this))
#endif
- , m_isInPrewarmedPool(isInPrewarmedPool == IsInPrewarmedPool::Yes)
+ , m_isPrewarmed(isPrewarmed == IsPrewarmed::Yes)
{
RELEASE_ASSERT(isMainThreadOrCheckDisabled());
@@ -447,9 +447,9 @@
void WebProcessProxy::markIsNoLongerInPrewarmedPool()
{
- ASSERT(m_isInPrewarmedPool);
+ ASSERT(m_isPrewarmed);
- m_isInPrewarmedPool = false;
+ m_isPrewarmed = false;
RELEASE_ASSERT(m_processPool);
m_processPool.setIsWeak(IsWeak::No);
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (235631 => 235632)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2018-09-04 20:47:23 UTC (rev 235632)
@@ -97,12 +97,12 @@
typedef HashMap<uint64_t, WebPageProxy*> WebPageProxyMap;
typedef HashMap<uint64_t, RefPtr<API::UserInitiatedAction>> UserInitiatedActionMap;
- enum class IsInPrewarmedPool {
+ enum class IsPrewarmed {
No,
Yes
};
- static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore&, IsInPrewarmedPool);
+ static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore&, IsPrewarmed);
~WebProcessProxy();
WebConnection* webConnection() const { return m_webConnection.get(); }
@@ -218,7 +218,7 @@
void releaseBackgroundActivityTokenForFullscreenInput();
#endif
- bool isInPrewarmedPool() const { return m_isInPrewarmedPool; }
+ bool isPrewarmed() const { return m_isPrewarmed; }
void markIsNoLongerInPrewarmedPool();
#if PLATFORM(COCOA)
@@ -232,7 +232,7 @@
protected:
static uint64_t generatePageID();
- WebProcessProxy(WebProcessPool&, WebsiteDataStore&, IsInPrewarmedPool);
+ WebProcessProxy(WebProcessPool&, WebsiteDataStore&, IsPrewarmed);
// ChildProcessProxy
void getLaunchOptions(ProcessLauncher::LaunchOptions&) override;
@@ -392,7 +392,7 @@
HashMap<uint64_t, CompletionHandler<void(WebCore::MessagePortChannelProvider::HasActivity)>> m_localPortActivityCompletionHandlers;
bool m_hasCommittedAnyProvisionalLoads { false };
- bool m_isInPrewarmedPool;
+ bool m_isPrewarmed;
#if PLATFORM(WATCHOS)
ProcessThrottler::BackgroundActivityToken m_backgroundActivityTokenForFullscreenFormControls;
Modified: trunk/Tools/ChangeLog (235631 => 235632)
--- trunk/Tools/ChangeLog 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Tools/ChangeLog 2018-09-04 20:47:23 UTC (rev 235632)
@@ -1,3 +1,19 @@
+2018-09-04 Chris Dumez <cdu...@apple.com>
+
+ Add process pool configuration flag to turn on automatic process pre-warming
+ https://bugs.webkit.org/show_bug.cgi?id=189263
+ <rdar://problem/44101941>
+
+ Reviewed by Antti Koivisto.
+
+ Add API test coverage.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm.
+ (TEST):
+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
+ * TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm: Removed.
+
2018-09-04 Keith Miller <keith_mil...@apple.com>
Perl doesn't like calling keys on a reference
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (235631 => 235632)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2018-09-04 20:47:23 UTC (rev 235632)
@@ -157,7 +157,7 @@
3FCC4FE81EC4E8CA0076E37C /* PictureInPictureDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 3FCC4FE61EC4E87E0076E37C /* PictureInPictureDelegate.html */; };
4135FB842011FAA700332139 /* InjectInternals_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4135FB832011FAA300332139 /* InjectInternals_Bundle.cpp */; };
4135FB852011FABF00332139 /* libWebCoreTestSupport.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4135FB862011FABF00332139 /* libWebCoreTestSupport.dylib */; };
- 41882F0321010C0D002FF288 /* SetMaximumPrewarmedProcessCount.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41882F0221010A70002FF288 /* SetMaximumPrewarmedProcessCount.mm */; };
+ 41882F0321010C0D002FF288 /* ProcessPreWarming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41882F0221010A70002FF288 /* ProcessPreWarming.mm */; };
4433A396208044140091ED57 /* SynchronousTimeoutTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4433A395208044130091ED57 /* SynchronousTimeoutTests.mm */; };
44817A2F1F0486BF00003810 /* WKRequestActivatedElementInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 44817A2E1F0486BF00003810 /* WKRequestActivatedElementInfo.mm */; };
448D7E471EA6C55500ECC756 /* EnvironmentUtilitiesTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 448D7E451EA6C55500ECC756 /* EnvironmentUtilitiesTest.cpp */; };
@@ -202,7 +202,6 @@
518EE51920A78CE500E024F3 /* DoubleDefersLoadingPlugin.mm in Sources */ = {isa = PBXBuildFile; fileRef = 518EE51720A78CDF00E024F3 /* DoubleDefersLoadingPlugin.mm */; };
518EE51B20A78D0000E024F3 /* DoAfterNextPresentationUpdateAfterCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = 518EE51A20A78CFB00E024F3 /* DoAfterNextPresentationUpdateAfterCrash.mm */; };
518EE51D20A78D3600E024F3 /* DecidePolicyForNavigationAction.mm in Sources */ = {isa = PBXBuildFile; fileRef = 518EE51C20A78D3300E024F3 /* DecidePolicyForNavigationAction.mm */; };
- 5198A2401EA7E59F008910B7 /* InitialWarmedProcessUsed.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5198A23F1EA7E595008910B7 /* InitialWarmedProcessUsed.mm */; };
51A5877D1D1B49CD004BA9AF /* IndexedDBMultiProcess-3.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51A5877C1D1B3D8D004BA9AF /* IndexedDBMultiProcess-3.html */; };
51A587851D2739E3004BA9AF /* IndexedDBDatabaseProcessKill-1.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51A587821D272EB5004BA9AF /* IndexedDBDatabaseProcessKill-1.html */; };
51A587861D273AA9004BA9AF /* IndexedDBDatabaseProcessKill.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51A587841D272EF3004BA9AF /* IndexedDBDatabaseProcessKill.mm */; };
@@ -1423,7 +1422,7 @@
3FCC4FE61EC4E87E0076E37C /* PictureInPictureDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = PictureInPictureDelegate.html; sourceTree = "<group>"; };
4135FB832011FAA300332139 /* InjectInternals_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InjectInternals_Bundle.cpp; path = Tests/InjectInternals_Bundle.cpp; sourceTree = SOURCE_ROOT; };
4135FB862011FABF00332139 /* libWebCoreTestSupport.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libWebCoreTestSupport.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
- 41882F0221010A70002FF288 /* SetMaximumPrewarmedProcessCount.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SetMaximumPrewarmedProcessCount.mm; sourceTree = "<group>"; };
+ 41882F0221010A70002FF288 /* ProcessPreWarming.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ProcessPreWarming.mm; sourceTree = "<group>"; };
41973B5A1AF2286A006C7B36 /* FileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystem.cpp; sourceTree = "<group>"; };
41973B5C1AF22875006C7B36 /* SharedBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedBuffer.cpp; sourceTree = "<group>"; };
440A1D3814A0103A008A66F2 /* URL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URL.cpp; sourceTree = "<group>"; };
@@ -1482,7 +1481,6 @@
518EE51720A78CDF00E024F3 /* DoubleDefersLoadingPlugin.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DoubleDefersLoadingPlugin.mm; sourceTree = "<group>"; };
518EE51A20A78CFB00E024F3 /* DoAfterNextPresentationUpdateAfterCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DoAfterNextPresentationUpdateAfterCrash.mm; sourceTree = "<group>"; };
518EE51C20A78D3300E024F3 /* DecidePolicyForNavigationAction.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DecidePolicyForNavigationAction.mm; sourceTree = "<group>"; };
- 5198A23F1EA7E595008910B7 /* InitialWarmedProcessUsed.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InitialWarmedProcessUsed.mm; sourceTree = "<group>"; };
51A5877C1D1B3D8D004BA9AF /* IndexedDBMultiProcess-3.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBMultiProcess-3.html"; sourceTree = "<group>"; };
51A587821D272EB5004BA9AF /* IndexedDBDatabaseProcessKill-1.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBDatabaseProcessKill-1.html"; sourceTree = "<group>"; };
51A587841D272EF3004BA9AF /* IndexedDBDatabaseProcessKill.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IndexedDBDatabaseProcessKill.mm; sourceTree = "<group>"; };
@@ -2339,7 +2337,6 @@
51BCEE491C84F4AF0042C82E /* IndexedDBMultiProcess.mm */,
51B1EE8D1C80F5880064FB98 /* IndexedDBPersistence.mm */,
57599E201F07191700A3FB8C /* IndexedDBStructuredCloneBackwardCompatibility.mm */,
- 5198A23F1EA7E595008910B7 /* InitialWarmedProcessUsed.mm */,
79C5D430209D768300F1E7CA /* InjectedBundleNodeHandleIsTextField.mm */,
2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */,
5C69BDD41F82A7EB000F4F4B /* _javascript_DuringNavigation.mm */,
@@ -2376,6 +2373,7 @@
C95501BE19AD2FAF0049BE3E /* Preferences.mm */,
CD227E43211A4D5D00D285AF /* PreferredAudioBufferSize.mm */,
7C1AF7931E8DCBAB002645B9 /* PrepareForMoveToWindow.mm */,
+ 41882F0221010A70002FF288 /* ProcessPreWarming.mm */,
518C1152205B04F9001FF4AE /* ProcessSwapOnNavigation.mm */,
5798E2AF1CAF5C2800C5CBA0 /* ProvisionalURLNotChange.mm */,
A1C4FB6C1BACCE50003742D0 /* QuickLook.mm */,
@@ -2395,7 +2393,6 @@
5CA985512113CB8C0057EB6B /* SafeBrowsing.mm */,
CE0947362063223B003C9BA0 /* SchemeRegistry.mm */,
51EB12931FDF050500A5A1BD /* ServiceWorkerBasic.mm */,
- 41882F0221010A70002FF288 /* SetMaximumPrewarmedProcessCount.mm */,
5CCB10DF2134579D00AC5AF0 /* ShouldGoToBackForwardListItem.mm */,
37BCA61B1B596BA9002012CA /* ShouldOpenExternalURLsInNewWindowActions.mm */,
2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */,
@@ -3813,7 +3810,6 @@
7C83E0BE1D0A651300FEBCF3 /* IndexedDBMultiProcess.mm in Sources */,
7C83E0BF1D0A652200FEBCF3 /* IndexedDBPersistence.mm in Sources */,
57599E211F07191900A3FB8C /* IndexedDBStructuredCloneBackwardCompatibility.mm in Sources */,
- 5198A2401EA7E59F008910B7 /* InitialWarmedProcessUsed.mm in Sources */,
7A95BDE11E9BEC5F00865498 /* InjectedBundleAppleEvent.cpp in Sources */,
7CCE7EFB1A411AE600447C4C /* InjectedBundleBasic.cpp in Sources */,
83148B06202AC6A400BADE99 /* InjectedBundleDisableOverrideBuiltinsBehavior.cpp in Sources */,
@@ -3911,6 +3907,7 @@
A1EC11881F42541200D0146E /* PreviewLoader.cpp in Sources */,
7CCE7F0C1A411AE600447C4C /* PrivateBrowsingPushStateNoHistoryCallback.cpp in Sources */,
4647B1261EBA3B850041D7EF /* ProcessDidTerminate.cpp in Sources */,
+ 41882F0321010C0D002FF288 /* ProcessPreWarming.mm in Sources */,
518C1153205B0504001FF4AE /* ProcessSwapOnNavigation.mm in Sources */,
7C83E0C11D0A652F00FEBCF3 /* ProvisionalURLNotChange.mm in Sources */,
7CCE7EC81A411A7E00447C4C /* PublicSuffix.mm in Sources */,
@@ -3945,7 +3942,6 @@
51EB12941FDF052500A5A1BD /* ServiceWorkerBasic.mm in Sources */,
7CCE7ECB1A411A7E00447C4C /* SetAndUpdateCacheModel.mm in Sources */,
7CCE7ECC1A411A7E00447C4C /* SetDocumentURI.mm in Sources */,
- 41882F0321010C0D002FF288 /* SetMaximumPrewarmedProcessCount.mm in Sources */,
CE6E81A020A6935F00E2C80F /* SetTimeoutFunction.mm in Sources */,
7C83E0521D0A641800FEBCF3 /* SharedBuffer.cpp in Sources */,
A17991881E1C994E00A505ED /* SharedBuffer.mm in Sources */,
Deleted: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm (235631 => 235632)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-#import "PlatformUtilities.h"
-#import "Test.h"
-#import "TestNavigationDelegate.h"
-
-#import <WebKit/WKProcessPoolPrivate.h>
-#import <wtf/RetainPtr.h>
-
-#if WK_API_ENABLED
-
-static NSString *loadableURL = @"data:text/html,no%20error%20A";
-
-TEST(WKProcessPool, InitialWarmedProcessUsed)
-{
- auto pool = adoptNS([[WKProcessPool alloc] init]);
- [pool _setMaximumNumberOfPrewarmedProcesses:1];
- [pool _warmInitialProcess];
-
- EXPECT_EQ(static_cast<size_t>(1), [pool _prewarmedWebProcessCount]);
- EXPECT_EQ(static_cast<size_t>(1), [pool _webPageContentProcessCount]);
-
- auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
- configuration.get().processPool = pool.get();
- configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
-
- auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
-
- EXPECT_EQ(static_cast<size_t>(0), [pool _prewarmedWebProcessCount]);
- EXPECT_EQ(static_cast<size_t>(1), [pool _webPageContentProcessCount]);
-
- [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL]]];
- [webView _test_waitForDidFinishNavigation];
-
- EXPECT_EQ(static_cast<size_t>(1), [pool _prewarmedWebProcessCount]);
- EXPECT_EQ(static_cast<size_t>(2), [pool _webPageContentProcessCount]);
-}
-
-#endif
Copied: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (from rev 235631, trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm) (0 => 235632)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#import "PlatformUtilities.h"
+#import "Test.h"
+#import "TestNavigationDelegate.h"
+#import <WebKit/WKProcessPoolPrivate.h>
+#import <WebKit/_WKProcessPoolConfiguration.h>
+#import <wtf/RetainPtr.h>
+
+#if WK_API_ENABLED
+
+static NSString *loadableURL = @"data:text/html,no%20error%20A";
+
+TEST(WKProcessPool, WarmInitialProcess)
+{
+ auto pool = adoptNS([[WKProcessPool alloc] init]);
+
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+
+ [pool _warmInitialProcess];
+
+ EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
+
+ [pool _warmInitialProcess]; // No-op.
+
+ EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
+}
+
+TEST(WKProcessPool, InitialWarmedProcessUsed)
+{
+ auto pool = adoptNS([[WKProcessPool alloc] init]);
+ [pool _warmInitialProcess];
+
+ EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
+
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().processPool = pool.get();
+ configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
+
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
+
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
+
+ [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL]]];
+ [webView _test_waitForDidFinishNavigation];
+
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
+}
+
+TEST(WKProcessPool, AutomaticProcessWarming)
+{
+ auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
+ processPoolConfiguration.get().prewarmsProcessesAutomatically = YES;
+ auto pool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
+
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().processPool = pool.get();
+ configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
+
+ auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
+
+ [webView1 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL]]];
+ [webView1 _test_waitForDidFinishNavigation];
+
+ while (![pool _hasPrewarmedWebProcess])
+ TestWebKitAPI::Util::sleep(0.01);
+
+ EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(2U, [pool _webPageContentProcessCount]);
+
+ auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
+ EXPECT_FALSE([pool _hasPrewarmedWebProcess]);
+ EXPECT_EQ(2U, [pool _webPageContentProcessCount]);
+}
+
+#endif
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (235631 => 235632)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -278,7 +278,7 @@
{
auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
processPoolConfiguration.get().processSwapsOnNavigation = YES;
- processPoolConfiguration.get().maximumPrewarmedProcessCount = 1;
+ processPoolConfiguration.get().prewarmsProcessesAutomatically = YES;
auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
@@ -325,7 +325,7 @@
{
auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
processPoolConfiguration.get().processSwapsOnNavigation = YES;
- processPoolConfiguration.get().maximumPrewarmedProcessCount = 1;
+ processPoolConfiguration.get().prewarmsProcessesAutomatically = YES;
auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
@@ -925,7 +925,7 @@
{
auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
[processPoolConfiguration setProcessSwapsOnNavigation:YES];
- [processPoolConfiguration setMaximumPrewarmedProcessCount:1];
+ [processPoolConfiguration setPrewarmsProcessesAutomatically:YES];
auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
@@ -944,7 +944,7 @@
EXPECT_EQ(2u, [processPool _webProcessCount]);
EXPECT_EQ(1u, [processPool _webProcessCountIgnoringPrewarmed]);
- EXPECT_EQ(1u, [processPool _prewarmedWebProcessCount]);
+ EXPECT_TRUE([processPool _hasPrewarmedWebProcess]);
request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.google.com/main.html"]];
[webView loadRequest:request];
@@ -953,7 +953,7 @@
EXPECT_EQ(3u, [processPool _webProcessCount]);
EXPECT_EQ(2u, [processPool _webProcessCountIgnoringPrewarmed]);
- EXPECT_EQ(1u, [processPool _prewarmedWebProcessCount]);
+ EXPECT_TRUE([processPool _hasPrewarmedWebProcess]);
}
static const char* visibilityBytes = R"PSONRESOURCE(
Deleted: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm (235631 => 235632)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm 2018-09-04 20:37:29 UTC (rev 235631)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm 2018-09-04 20:47:23 UTC (rev 235632)
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-
-#import "PlatformUtilities.h"
-#import "Test.h"
-#import <WebKit/WKProcessPoolPrivate.h>
-#import <WebKit/_WKProcessPoolConfiguration.h>
-#import <wtf/RetainPtr.h>
-
-#if WK_API_ENABLED
-
-TEST(WKProcessPool, SetMaximumPrewarmedProcessCount)
-{
- auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
- [processPoolConfiguration setMaximumPrewarmedProcessCount:2];
- auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
-
- EXPECT_EQ(0u, [processPool _prewarmedWebProcessCount]);
-
- [processPool _warmInitialProcess];
-
- EXPECT_EQ(1u, [processPool _prewarmedWebProcessCount]);
-
- [processPool _warmInitialProcess];
-
- EXPECT_EQ(2u, [processPool _prewarmedWebProcessCount]);
-
- [processPool _warmInitialProcess];
-
- EXPECT_EQ(2u, [processPool _prewarmedWebProcessCount]);
-
- // Test to make sure this doesn't cause a crash
- [processPool _setMaximumNumberOfProcesses:1];
-}
-
-#endif