Title: [230957] trunk/Source/WebKit
Revision
230957
Author
[email protected]
Date
2018-04-24 08:58:49 -0700 (Tue, 24 Apr 2018)

Log Message

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

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to