WebKit Bugzilla
Attachment 346497 Details for
Bug 187108
: Add configuration for automatic process pre-warming
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-187108-20180803092751.patch (text/plain), 26.10 KB, created by
Ben Richards
on 2018-08-03 09:27:53 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Ben Richards
Created:
2018-08-03 09:27:53 PDT
Size:
26.10 KB
patch
obsolete
>Subversion Revision: 234546 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 0e9e004457249385d6dd2399c8be90e3e21e8095..901debaf739b33ae042d02d4f482eee1009c153f 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,37 @@ >+2018-08-03 Ben Richards <benton_richards@apple.com> >+ >+ Add configuration for automatic process pre-warming >+ https://bugs.webkit.org/show_bug.cgi?id=187108 >+ >+ Reviewed by Ryosuke Niwa. >+ >+ Added configurations to allow setting the maximum number of processes that should be automatically prewarmed. >+ >+ * UIProcess/API/APIProcessPoolConfiguration.cpp: >+ (API::ProcessPoolConfiguration::copy): >+ * UIProcess/API/APIProcessPoolConfiguration.h: >+ * UIProcess/API/C/WKContext.cpp: >+ (WKContextSetMaximumNumberOfPrewarmedProcesses): >+ * UIProcess/API/C/WKContextPrivate.h: >+ * UIProcess/API/Cocoa/WKProcessPool.mm: >+ (-[WKProcessPool _setMaximumNumberOfPrewarmedProcesses:]): >+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: >+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: >+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: >+ (-[_WKProcessPoolConfiguration setMaximumPrewarmedProcessCount:]): >+ (-[_WKProcessPoolConfiguration maximumPrewarmedProcessCount]): >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::didFinishLoadForFrame): Moved call to notifyProcessPoolToPrewarm from didFirstVisuallyNonEmptyLayoutForFrame to here. >+ This is to try to ensure that frame loading and prewarming don't happen at the same time as this would be heavy for some devices. >+ (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): >+ * UIProcess/WebProcessPool.cpp: >+ (WebKit::WebProcessPool::setMaximumNumberOfProcesses): Condition changed so that calling setMaximumNumberOfProcesses after warmInitialProcess >+ doesn't result in a crash. >+ (WebKit::WebProcessPool::setMaximumNumberOfPrewarmedProcesses): >+ (WebKit::WebProcessPool::warmInitialProcess): >+ (WebKit::WebProcessPool::didReachGoodTimeToPrewarm): >+ * UIProcess/WebProcessPool.h: >+ > 2018-08-03 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed, rolling out r234513. >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >index c810143b2b6341e47e058dda31c3b67ec13264b3..cbae9b9d7ef9857ca0e031ac1c62f1ef6d106d62 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >@@ -98,6 +98,7 @@ Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy() > > 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; >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >index e94a48289752143c149aa4eaef3ec04adebbced0..f2d5c6118887c5214d4b4a6de53fad4986b74450 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >@@ -51,7 +51,10 @@ public: > void setShouldHaveLegacyDataStore(bool shouldHaveLegacyDataStore) { m_shouldHaveLegacyDataStore = shouldHaveLegacyDataStore; } > > unsigned maximumProcessCount() const { return m_maximumProcessCount; } >- void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; } >+ void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; } >+ >+ unsigned maximumPrewarmedProcessCount() const { return m_maximumPrewarmedProcessCount; } >+ void setMaximumPrewarmedProcessCount(unsigned maximumPrewarmedProcessCount) { m_maximumPrewarmedProcessCount = maximumPrewarmedProcessCount; } > > bool diskCacheSpeculativeValidationEnabled() const { return m_diskCacheSpeculativeValidationEnabled; } > void setDiskCacheSpeculativeValidationEnabled(bool enabled) { m_diskCacheSpeculativeValidationEnabled = enabled; } >@@ -161,6 +164,7 @@ private: > 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 }; >diff --git a/Source/WebKit/UIProcess/API/C/WKContext.cpp b/Source/WebKit/UIProcess/API/C/WKContext.cpp >index 8e20ee6786192f1edd970bc951cdfda4f51fdf34..4fca7eedb2f5882ec64094c7396351682c0fad31 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContext.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKContext.cpp >@@ -402,6 +402,11 @@ void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef contextRef, bo > toImpl(contextRef)->setCanHandleHTTPSServerTrustEvaluation(value); > } > >+void WKContextSetMaximumNumberOfPrewarmedProcesses(WKContextRef contextRef, unsigned value) >+{ >+ toImpl(contextRef)->setMaximumNumberOfPrewarmedProcesses(value); >+} >+ > void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef contextRef, bool value) > { > toImpl(contextRef)->configuration().setDiskCacheSpeculativeValidationEnabled(value); >diff --git a/Source/WebKit/UIProcess/API/C/WKContextPrivate.h b/Source/WebKit/UIProcess/API/C/WKContextPrivate.h >index f08a43187cc2ee48e8cbabe4ad4c58f6fb730b99..4ab5a9407bb6b7da7cd65b630441c05a9729568b 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContextPrivate.h >+++ b/Source/WebKit/UIProcess/API/C/WKContextPrivate.h >@@ -69,6 +69,8 @@ WK_EXPORT void WKContextSetDomainRelaxationForbiddenForURLScheme(WKContextRef co > > WK_EXPORT void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef context, bool value); > >+WK_EXPORT void WKContextSetMaximumNumberOfPrewarmedProcesses(WKContextRef context, unsigned count); >+ > WK_EXPORT void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef context, bool value); > > WK_EXPORT void WKContextSetIconDatabasePath(WKContextRef context, WKStringRef iconDatabasePath); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >index 474768879d64f6ef04493468d5a96d4e1ebf7567..acefae518de852bc7ff00d39cb5c749a1d78e004 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm >@@ -201,6 +201,11 @@ - (void)_setMaximumNumberOfProcesses:(NSUInteger)value > _processPool->setMaximumNumberOfProcesses(value); > } > >+- (void)_setMaximumNumberOfPrewarmedProcesses:(NSUInteger)value >+{ >+ _processPool->setMaximumNumberOfPrewarmedProcesses(value); >+} >+ > - (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value > { > _processPool->setCanHandleHTTPSServerTrustEvaluation(value); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >index 6d4b067f5be6cc92193ed5f1cd498c99a6bfcf0a..7099a4464416239408586243d579cec41282e04e 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h >@@ -111,6 +111,7 @@ > - (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)); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >index 2fdf1e3aaadade2618ca1bc796c138851fef0768..644b16405990eaf3620e4bd5c6223dac6bc0bbbb 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >@@ -35,6 +35,7 @@ WK_CLASS_AVAILABLE(macosx(10.10), ios(8.0)) > > @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) BOOL ignoreSynchronousMessagingTimeoutsForTesting WK_API_AVAILABLE(macosx(10.12), ios(10.0)); > @property (nonatomic) BOOL attrStyleEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >index 019643c4a2fef0dfbaf211dc3302ed68c339ccf1..7a396c59df0f56cda29a9ffaee9ee9c77a661643 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >@@ -259,6 +259,16 @@ - (BOOL)processSwapsOnNavigation > return _processPoolConfiguration->processSwapsOnNavigation(); > } > >+- (void)setMaximumPrewarmedProcessCount:(NSUInteger)count >+{ >+ _processPoolConfiguration->setMaximumPrewarmedProcessCount(count); >+} >+ >+- (NSUInteger)maximumPrewarmedProcessCount >+{ >+ return _processPoolConfiguration->maximumPrewarmedProcessCount(); >+} >+ > - (void)setAlwaysKeepAndReuseSwappedProcesses:(BOOL)swaps > { > _processPoolConfiguration->setAlwaysKeepAndReuseSwappedProcesses(swaps); >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index cc5786faae20d1e1d5473f7b514e35a211dae795..dd1bf17c115d9e2941a17cdbd65160799dd6bd53 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -3781,6 +3781,8 @@ void WebPageProxy::didFinishLoadForFrame(uint64_t frameID, uint64_t navigationID > m_pageClient.didFinishLoadForMainFrame(); > > resetRecentCrashCountSoon(); >+ >+ notifyProcessPoolToPrewarm(); > } > > m_isLoadingAlternateHTMLStringForFailingProvisionalLoad = false; >@@ -3920,10 +3922,8 @@ void WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame(uint64_t frameID, cons > > m_loaderClient->didFirstVisuallyNonEmptyLayoutForFrame(*this, *frame, m_process->transformHandlesToObjects(userData.object()).get()); > >- if (frame->isMainFrame()) { >+ if (frame->isMainFrame()) > m_pageClient.didFirstVisuallyNonEmptyLayoutForMainFrame(); >- notifyProcessPoolToPrewarm(); >- } > } > > void WebPageProxy::didLayoutForCustomContentProvider() >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index 9264b9932d7185e075390e02a97776b6830331b1..7075b89c93e6558170bd06dd4294a60d00bf3956 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -403,12 +403,21 @@ void WebProcessPool::setLegacyCustomProtocolManagerClient(std::unique_ptr<API::C > void WebProcessPool::setMaximumNumberOfProcesses(unsigned maximumNumberOfProcesses) > { > // Guard against API misuse. >- if (!m_processes.isEmpty()) >+ 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); >+} >+ > IPC::Connection* WebProcessPool::networkingProcessConnection() > { > return m_networkProcess->connection(); >@@ -997,11 +1006,16 @@ void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDa > > void WebProcessPool::warmInitialProcess() > { >- if (m_prewarmedProcessCount) { >+ unsigned maxPrewarmed = maximumNumberOfPrewarmedProcesses(); >+ if (maxPrewarmed && m_prewarmedProcessCount >= maxPrewarmed) { > ASSERT(!m_processes.isEmpty()); > 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; > >@@ -1313,12 +1327,14 @@ void WebProcessPool::postMessageToInjectedBundle(const String& messageName, API: > > void WebProcessPool::didReachGoodTimeToPrewarm() > { >- if (!m_configuration->processSwapsOnNavigation()) >+ unsigned maxPrewarmed = maximumNumberOfPrewarmedProcesses(); >+ if (!maxPrewarmed) > return; >+ > if (!m_websiteDataStore) > m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); >- static constexpr size_t maxPrewarmCount = 1; >- while (m_prewarmedProcessCount < maxPrewarmCount) >+ >+ while (m_prewarmedProcessCount < maxPrewarmed) > createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsInPrewarmedPool::Yes); > } > >diff --git a/Source/WebKit/UIProcess/WebProcessPool.h b/Source/WebKit/UIProcess/WebProcessPool.h >index 9d7a99ff500b392a1f9ad22692d5ed28b98aa7e2..522faf102ac098a8ca4a3d3878abfb6a1827c250 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.h >+++ b/Source/WebKit/UIProcess/WebProcessPool.h >@@ -156,6 +156,9 @@ public: > 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(); } >+ > const Vector<RefPtr<WebProcessProxy>>& processes() const { return m_processes; } > > // WebProcess or NetworkProcess as approporiate for current process model. The connection must be non-null. >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 24723e8b210c8504d4daf0ebeb23eebaab5434cd..c4b8174cc0ff615cda815ee3e89cbedf8ad12f63 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,19 @@ >+2018-08-03 Ben Richards <benton_richards@apple.com> >+ >+ Add configuration for automatic process pre-warming >+ https://bugs.webkit.org/show_bug.cgi?id=187108 >+ >+ Reviewed by Ryosuke Niwa. >+ >+ Added new test case for setting maximum prewarmed process count and updated test case for process swap on navigation to set the maximum prewarmed process count to be 1 where relevant. >+ >+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: >+ * TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm: >+ (TEST): >+ * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: >+ * TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm: >+ (TEST): >+ > 2018-08-03 Zalan Bujtas <zalan@apple.com> > > [LFC][Floating] Now that the document renderer belongs to "complicated cases", adjust viewport stretching. >diff --git a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >index 2405c8606dbcd24ff56ce1e8178966aa8f9d44f4..7a2349e7f768beb8fb191e3ff1a1acfc4395e7b1 100644 >--- a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >+++ b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >@@ -156,6 +156,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 */; }; > 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 */; }; >@@ -1398,6 +1399,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>"; }; > 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>"; }; >@@ -2346,6 +2348,7 @@ > F4D2986D20FEE7370092D636 /* RunScriptAfterDocumentLoad.mm */, > CE0947362063223B003C9BA0 /* SchemeRegistry.mm */, > 51EB12931FDF050500A5A1BD /* ServiceWorkerBasic.mm */, >+ 41882F0221010A70002FF288 /* SetMaximumPrewarmedProcessCount.mm */, > 37BCA61B1B596BA9002012CA /* ShouldOpenExternalURLsInNewWindowActions.mm */, > 2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */, > 2DFF7B6C1DA487AF00814614 /* SnapshotStore.mm */, >@@ -3880,6 +3883,7 @@ > 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 */, >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm >index ad37c962b23d6335cc9f6dfbcfcba8ac4e869cc7..a31ec4640e24c9db415c81e5e30252126bd8dfba 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm >@@ -37,18 +37,27 @@ static NSString *loadableURL = @"data:text/html,no%20error%20A"; > > TEST(WKProcessPool, InitialWarmedProcessUsed) > { >- auto *pool = [WKProcessPool _sharedProcessPool]; >+ 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; >+ 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([pool _webPageContentProcessCount], static_cast<size_t>(1)); >+ EXPECT_EQ(static_cast<size_t>(1), [pool _prewarmedWebProcessCount]); >+ EXPECT_EQ(static_cast<size_t>(2), [pool _webPageContentProcessCount]); > } > > #endif >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >index ef4f85c2f9dd203d36487c338741d8d34aea2c96..aa0dab253d8201c74e38d98e26feec1af3ae3e7f 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >@@ -282,6 +282,7 @@ TEST(ProcessSwap, Basic) > { > auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); > processPoolConfiguration.get().processSwapsOnNavigation = YES; >+ processPoolConfiguration.get().maximumPrewarmedProcessCount = 1; > auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); > > auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); >@@ -900,6 +901,7 @@ TEST(ProcessSwap, NumberOfPrewarmedProcesses) > { > auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); > [processPoolConfiguration setProcessSwapsOnNavigation:YES]; >+ [processPoolConfiguration setMaximumPrewarmedProcessCount:1]; > auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); > > auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); >@@ -1090,7 +1092,7 @@ TEST(ProcessSwap, DisableForInspector) > auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]); > [webViewConfiguration setProcessPool:processPool.get()]; > webViewConfiguration.get().preferences._developerExtrasEnabled = YES; >- >+ > RetainPtr<PSONScheme> handler = adoptNS([[PSONScheme alloc] init]); > [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"PSON1"]; > [webViewConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"PSON2"]; >@@ -1475,7 +1477,7 @@ TEST(ProcessSwap, APIControlledProcessSwapping) > TestWebKitAPI::Util::run(&done); > done = false; > auto pid3 = [webView _webProcessIdentifier]; >- >+ > EXPECT_EQ(3, numberOfDecidePolicyCalls); > EXPECT_EQ(2u, seenPIDs.size()); > EXPECT_NE(pid1, pid3); >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm >new file mode 100644 >index 0000000000000000000000000000000000000000..abc54f87f35f980fe6c7277fa5b21623c2f8b1cc >--- /dev/null >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm >@@ -0,0 +1,60 @@ >+/* >+ * 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
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 187108
:
343876
|
343883
|
343884
|
343893
|
343967
|
343999
|
344157
|
344216
|
344259
|
345050
|
345386
|
345397
|
346231
|
346232
|
346239
|
346447
|
346448
|
346457
|
346459
|
346493
|
346496
| 346497