WebKit Bugzilla
Attachment 346239 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-20180731175851.patch (text/plain), 21.43 KB, created by
Ben Richards
on 2018-07-31 17:58:51 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Ben Richards
Created:
2018-07-31 17:58:51 PDT
Size:
21.43 KB
patch
obsolete
>Subversion Revision: 234439 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 713ea7341df292025245b0a6b3a5e84829e0d24c..596b6336034e05656b5cd4f5ca49fb6cbf049322 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,33 @@ >+2018-07-31 Ben Richards <benton_richards@apple.com> >+ >+ Add configuration for automatic process pre-warming >+ https://bugs.webkit.org/show_bug.cgi?id=187108 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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/_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 warmInitialProcess doesn't result in a crash if called before this function. >+ (WebKit::WebProcessPool::setMaximumNumberOfPrewarmedProcesses): >+ (WebKit::WebProcessPool::warmInitialProcess): >+ (WebKit::WebProcessPool::didReachGoodTimeToPrewarm): >+ * UIProcess/WebProcessPool.h: >+ > 2018-07-31 Rob Buis <rbuis@igalia.com> > > Remove ResourceResponse::cacheBodyKey API >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp >index ec77348d4df2de27186d9f7fb598670cd8947473..8348e7c08a9dbb7290b35d3ed7d9d16464e77bbe 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 053e91be2916875adb40937d025be94fe997af8c..de0a1792e13ce2f11fb244b73fd9c8d72ccbedb9 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >@@ -51,8 +51,11 @@ 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; } > >@@ -158,6 +161,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..218d0380e32fbbffc226b6d0a28f881d26468028 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContextPrivate.h >+++ b/Source/WebKit/UIProcess/API/C/WKContextPrivate.h >@@ -68,6 +68,8 @@ WK_EXPORT void WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequest(WKContextR > WK_EXPORT void WKContextSetDomainRelaxationForbiddenForURLScheme(WKContextRef context, WKStringRef urlScheme); > > WK_EXPORT void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef context, bool value); >+ >+WK_EXPORT void WKContextSetMaximumNumberOfPrewarmedProcesses(WKContextRef context, unsigned count); > > WK_EXPORT void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef context, bool value); > >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h >index cfab13af7a02de3b89a5afdfc83d4fd0816d3489..92e1cf26b92c33d11038413d9bc49c3b50e65c5a 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) NSInteger maximumPrewarmedProcessCount; > > @property (nonatomic) BOOL ignoreSynchronousMessagingTimeoutsForTesting WK_API_AVAILABLE(macosx(10.12), ios(10.0)); > >diff --git a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >index 75c8b18d246608e7c152cb25b2ad9eabcb9be9a5..e2166df5732e316076c09476cff768d05f9f77a6 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm >@@ -249,6 +249,16 @@ > return _processPoolConfiguration->processSwapsOnNavigation(); > } > >+- (void)setMaximumPrewarmedProcessCount:(NSInteger)count >+{ >+ _processPoolConfiguration->setMaximumPrewarmedProcessCount(count); >+} >+ >+- (NSInteger)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..c898c8769cf52975e0c6fc0eff258bf7ed925689 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 f2159ce1c0a5c5b895cac1813da4a0e015d0d514..b2fa44359c4f078c20eecb731d13325915f76a5e 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -403,11 +403,20 @@ 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() > { >@@ -993,7 +1002,7 @@ void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDa > > void WebProcessPool::warmInitialProcess() > { >- if (m_prewarmedProcessCount) { >+ if (m_prewarmedProcessCount >= maximumNumberOfPrewarmedProcesses()) { > ASSERT(!m_processes.isEmpty()); > return; > } >@@ -1309,12 +1318,11 @@ void WebProcessPool::postMessageToInjectedBundle(const String& messageName, API: > > void WebProcessPool::didReachGoodTimeToPrewarm() > { >- if (!m_configuration->processSwapsOnNavigation()) >- return; > if (!m_websiteDataStore) > m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); >- static constexpr size_t maxPrewarmCount = 1; >- while (m_prewarmedProcessCount < maxPrewarmCount) >+ >+ unsigned maxPrewarmed = maximumNumberOfPrewarmedProcesses(); >+ 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..5494be2df94e116649c105d7aa63b16938f04fcb 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.h >+++ b/Source/WebKit/UIProcess/WebProcessPool.h >@@ -155,6 +155,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; } > >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index b5f378d2c7a47943b66a5def6a00924e9dca66a4..496bc083b1a650b6b661ca4a7da1b9e249337468 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,17 @@ >+2018-07-31 Ben Richards <benton_richards@apple.com> >+ >+ Add configuration for automatic process pre-warming >+ https://bugs.webkit.org/show_bug.cgi?id=187108 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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/ProcessSwapOnNavigation.mm: >+ * TestWebKitAPI/Tests/WebKitCocoa/SetMaximumPrewarmedProcessCount.mm: Added. >+ (TEST): >+ > 2018-07-31 Alex Christensen <achristensen@webkit.org> > > Build fix. Remove unused variable. >diff --git a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >index ac532418009ad463f111939c8ce1bfdb8079284f..02ae00c303071a02032d9d9000d2cb5a9c78529c 100644 >--- a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >+++ b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >@@ -154,6 +154,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 */; }; >@@ -1391,6 +1392,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>"; }; >@@ -2335,6 +2337,7 @@ > F4D2986D20FEE7370092D636 /* RunScriptAfterDocumentLoad.mm */, > CE0947362063223B003C9BA0 /* SchemeRegistry.mm */, > 51EB12931FDF050500A5A1BD /* ServiceWorkerBasic.mm */, >+ 41882F0221010A70002FF288 /* SetMaximumPrewarmedProcessCount.mm */, > 37BCA61B1B596BA9002012CA /* ShouldOpenExternalURLsInNewWindowActions.mm */, > 2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */, > 2DFF7B6C1DA487AF00814614 /* SnapshotStore.mm */, >@@ -3863,6 +3866,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/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..7ea8fd03e045634cb2ca277ddb67ad3884b1a9d2 >--- /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:50]; >+} >+ >+#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