Diff
Modified: trunk/Source/WebKit/ChangeLog (230956 => 230957)
--- trunk/Source/WebKit/ChangeLog 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/ChangeLog 2018-04-24 15:58:49 UTC (rev 230957)
@@ -1,3 +1,16 @@
+2018-04-24 Ryan Haddad <[email protected]>
+
+ Unreviewed, rolling out r230938.
+
+ Introduced two ProcessSwap API test failures.
+
+ Reverted changeset:
+
+ "Keep around a pre-warmed process when doing process swap on
+ navigation"
+ https://bugs.webkit.org/show_bug.cgi?id=184765
+ https://trac.webkit.org/changeset/230938
+
2018-04-24 Zan Dobersek <[email protected]>
[CoordGraphics] Remove dead fixed layer code
Modified: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2018-04-24 15:58:49 UTC (rev 230957)
@@ -50,7 +50,7 @@
}
ServiceWorkerProcessProxy::ServiceWorkerProcessProxy(WebProcessPool& pool, const SecurityOriginData& securityOrigin, WebsiteDataStore& store)
- : WebProcessProxy { pool, store, IsInPrewarmedPool::No }
+ : WebProcessProxy { pool, store }
, m_securityOrigin(securityOrigin)
, m_serviceWorkerPageID(generatePageID())
{
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-04-24 15:58:49 UTC (rev 230957)
@@ -506,11 +506,6 @@
return m_isValid;
}
-void WebPageProxy::notifyProcessPoolToPrewarm()
-{
- m_process->processPool().didReachGoodTimeToPrewarm();
-}
-
void WebPageProxy::setPreferences(WebPreferences& preferences)
{
if (&preferences == m_preferences.ptr())
@@ -3850,10 +3845,8 @@
m_loaderClient->didFirstVisuallyNonEmptyLayoutForFrame(*this, *frame, m_process->transformHandlesToObjects(userData.object()).get());
- if (frame->isMainFrame()) {
+ if (frame->isMainFrame())
m_pageClient.didFirstVisuallyNonEmptyLayoutForMainFrame();
- notifyProcessPoolToPrewarm();
- }
}
void WebPageProxy::didLayoutForCustomContentProvider()
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-04-24 15:58:49 UTC (rev 230957)
@@ -1302,8 +1302,6 @@
WebPageProxy(PageClient&, WebProcessProxy&, uint64_t pageID, Ref<API::PageConfiguration>&&);
void platformInitialize();
- void notifyProcessPoolToPrewarm();
-
RefPtr<API::Navigation> goToBackForwardItem(WebBackForwardListItem&, WebCore::FrameLoadType);
void updateActivityState(WebCore::ActivityState::Flags flagsToUpdate = WebCore::ActivityState::AllFlags);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-04-24 15:58:49 UTC (rev 230957)
@@ -736,14 +736,12 @@
platformResolvePathsForSandboxExtensions();
}
-WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore, WebProcessProxy::IsInPrewarmedPool isInPrewarmedPool)
+WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore)
{
- auto processProxy = WebProcessProxy::create(*this, websiteDataStore, isInPrewarmedPool);
+ auto processProxy = WebProcessProxy::create(*this, websiteDataStore);
auto& process = processProxy.get();
initializeNewWebProcess(process, websiteDataStore);
m_processes.append(WTFMove(processProxy));
- if (isInPrewarmedPool == WebProcessProxy::IsInPrewarmedPool::Yes)
- ++m_prewarmedProcessCount;
if (m_serviceWorkerProcessesTerminationTimer.isActive())
m_serviceWorkerProcessesTerminationTimer.stop();
@@ -751,26 +749,6 @@
return process;
}
-RefPtr<WebProcessProxy> WebProcessPool::tryTakePrewarmedProcess(WebsiteDataStore& websiteDataStore)
-{
- if (!m_prewarmedProcessCount)
- return nullptr;
-
- for (const auto& process : m_processes) {
- if (process->isInPrewarmedPool()) {
- --m_prewarmedProcessCount;
- process->setIsInPrewarmedPool(false);
- if (&process->websiteDataStore() != &websiteDataStore)
- process->send(Messages::WebProcess::AddWebsiteDataStore(websiteDataStore.parameters()), 0);
- return process.get();
- }
- }
-
- ASSERT_NOT_REACHED();
- m_prewarmedProcessCount = 0;
- return nullptr;
-}
-
#if PLATFORM(MAC)
static void displayReconfigurationCallBack(CGDirectDisplayID display, CGDisplayChangeSummaryFlags flags, void *userInfo)
{
@@ -948,7 +926,7 @@
void WebProcessPool::warmInitialProcess()
{
- if (m_prewarmedProcessCount) {
+ if (m_haveInitialEmptyProcess) {
ASSERT(!m_processes.isEmpty());
return;
}
@@ -958,7 +936,9 @@
if (!m_websiteDataStore)
m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
- createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsInPrewarmedPool::Yes);
+ createNewWebProcess(m_websiteDataStore->websiteDataStore());
+
+ m_haveInitialEmptyProcess = true;
}
void WebProcessPool::enableProcessTermination()
@@ -1014,8 +994,8 @@
{
ASSERT(m_processes.contains(process));
- if (process->isInPrewarmedPool())
- --m_prewarmedProcessCount;
+ if (m_haveInitialEmptyProcess && process == m_processes.last())
+ m_haveInitialEmptyProcess = false;
// 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.
@@ -1102,14 +1082,14 @@
}
RefPtr<WebProcessProxy> process;
- if (pageConfiguration->relatedPage()) {
+ if (m_haveInitialEmptyProcess) {
+ process = m_processes.last();
+ m_haveInitialEmptyProcess = false;
+ } else if (pageConfiguration->relatedPage()) {
// Sharing processes, e.g. when creating the page via window.open().
process = &pageConfiguration->relatedPage()->process();
- } else {
- process = tryTakePrewarmedProcess(pageConfiguration->websiteDataStore()->websiteDataStore());
- if (!process)
- process = &createNewWebProcessRespectingProcessCountLimit(pageConfiguration->websiteDataStore()->websiteDataStore());
- }
+ } else
+ process = &createNewWebProcessRespectingProcessCountLimit(pageConfiguration->websiteDataStore()->websiteDataStore());
#if ENABLE(SERVICE_WORKER)
ASSERT(!is<ServiceWorkerProcessProxy>(*process));
@@ -1248,17 +1228,6 @@
}
}
-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)
- createNewWebProcess(m_websiteDataStore->websiteDataStore(), WebProcessProxy::IsInPrewarmedPool::Yes);
-}
-
void WebProcessPool::populateVisitedLinks()
{
m_historyClient->populateVisitedLinks(*this);
@@ -2050,8 +2019,6 @@
return page.process();
action = ""
- if (RefPtr<WebProcessProxy> process = tryTakePrewarmedProcess(page.websiteDataStore()))
- return process.releaseNonNull();
return createNewWebProcess(page.websiteDataStore());
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2018-04-24 15:58:49 UTC (rev 230957)
@@ -106,8 +106,8 @@
int webProcessThroughputQOS();
#endif
-class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPool>, private IPC::MessageReceiver {
-
+class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPool>, private IPC::MessageReceiver
+ {
public:
static Ref<WebProcessPool> create(API::ProcessPoolConfiguration&);
@@ -449,7 +449,6 @@
Ref<WebProcessProxy> processForNavigation(WebPageProxy&, const API::Navigation&, WebCore::PolicyAction&);
void registerSuspendedPageProxy(SuspendedPageProxy&);
void unregisterSuspendedPageProxy(SuspendedPageProxy&);
- void didReachGoodTimeToPrewarm();
private:
void platformInitialize();
@@ -457,9 +456,7 @@
void platformInitializeWebProcess(WebProcessCreationParameters&);
void platformInvalidateContext();
- RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&);
-
- WebProcessProxy& createNewWebProcess(WebsiteDataStore&, WebProcessProxy::IsInPrewarmedPool = WebProcessProxy::IsInPrewarmedPool::No);
+ WebProcessProxy& createNewWebProcess(WebsiteDataStore&);
void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore&);
void requestWebContentStatistics(StatisticsRequest*);
@@ -519,7 +516,7 @@
IPC::MessageReceiverMap m_messageReceiverMap;
Vector<RefPtr<WebProcessProxy>> m_processes;
- unsigned m_prewarmedProcessCount { 0 };
+ bool m_haveInitialEmptyProcess { false };
WebProcessProxy* m_processWithPageCache { nullptr };
#if ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2018-04-24 15:58:49 UTC (rev 230957)
@@ -105,14 +105,14 @@
return pageMap;
}
-Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsInPrewarmedPool isInPrewarmedPool)
+Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore)
{
- auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore, isInPrewarmedPool));
+ auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore));
proxy->connect();
return proxy;
}
-WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsInPrewarmedPool isInPrewarmedPool)
+WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore)
: ChildProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
, m_responsivenessTimer(*this)
, m_backgroundResponsivenessTimer(*this)
@@ -126,7 +126,6 @@
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
, m_userMediaCaptureManagerProxy(std::make_unique<UserMediaCaptureManagerProxy>(*this))
#endif
- , m_isInPrewarmedPool(isInPrewarmedPool == IsInPrewarmedPool::Yes)
{
auto result = allProcesses().add(coreProcessIdentifier(), this);
ASSERT_UNUSED(result, result.isNewEntry);
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (230956 => 230957)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2018-04-24 15:53:15 UTC (rev 230956)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2018-04-24 15:58:49 UTC (rev 230957)
@@ -97,12 +97,7 @@
typedef HashMap<uint64_t, WebPageProxy*> WebPageProxyMap;
typedef HashMap<uint64_t, RefPtr<API::UserInitiatedAction>> UserInitiatedActionMap;
- enum class IsInPrewarmedPool {
- No,
- Yes
- };
-
- static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore&, IsInPrewarmedPool);
+ static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore&);
~WebProcessProxy();
WebConnection* webConnection() const { return m_webConnection.get(); }
@@ -218,12 +213,9 @@
void releaseBackgroundActivityTokenForFullscreenInput();
#endif
- bool isInPrewarmedPool() const { return m_isInPrewarmedPool; }
- void setIsInPrewarmedPool(bool isInPrewarmedPool) { m_isInPrewarmedPool = isInPrewarmedPool; }
-
protected:
static uint64_t generatePageID();
- WebProcessProxy(WebProcessPool&, WebsiteDataStore&, IsInPrewarmedPool);
+ WebProcessProxy(WebProcessPool&, WebsiteDataStore&);
// ChildProcessProxy
void getLaunchOptions(ProcessLauncher::LaunchOptions&) override;
@@ -348,7 +340,6 @@
HashMap<uint64_t, CompletionHandler<void(WebCore::MessagePortChannelProvider::HasActivity)>> m_localPortActivityCompletionHandlers;
bool m_hasCommittedAnyProvisionalLoads { false };
- bool m_isInPrewarmedPool;
#if ENABLE(EXTRA_ZOOM_MODE)
ProcessThrottler::BackgroundActivityToken m_backgroundActivityTokenForFullscreenFormControls;