Title: [164820] trunk/Source/WebKit2
Revision
164820
Author
[email protected]
Date
2014-02-27 11:41:12 -0800 (Thu, 27 Feb 2014)

Log Message

Make WebProcessProxy::pages() return an IteratorRange
https://bugs.webkit.org/show_bug.cgi?id=129440

Reviewed by Dan Bernstein.

* UIProcess/API/C/WKPage.cpp:
(WKPageCopyRelatedPages):
Move the implementation of WebPageProxy::relatedPages here.

* UIProcess/WebContext.cpp:
(WebKit::WebContext::createNewWebProcessRespectingProcessCountLimit):
Use std::min_element here instead of a manual loop.

* UIProcess/WebPageProxy.cpp:
Remove WebPageProxy::relatedPages().

* UIProcess/WebProcessProxy.cpp:
Remove WebProcessProxy::pages().

* UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::pages):
Make this return an IteratorRange.

(WebKit::WebProcessProxy::pageCount):
New function that returns the page count.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (164819 => 164820)


--- trunk/Source/WebKit2/ChangeLog	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/ChangeLog	2014-02-27 19:41:12 UTC (rev 164820)
@@ -1,3 +1,31 @@
+2014-02-27  Anders Carlsson  <[email protected]>
+
+        Make WebProcessProxy::pages() return an IteratorRange
+        https://bugs.webkit.org/show_bug.cgi?id=129440
+
+        Reviewed by Dan Bernstein.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageCopyRelatedPages):
+        Move the implementation of WebPageProxy::relatedPages here.
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::createNewWebProcessRespectingProcessCountLimit):
+        Use std::min_element here instead of a manual loop.
+
+        * UIProcess/WebPageProxy.cpp:
+        Remove WebPageProxy::relatedPages().
+
+        * UIProcess/WebProcessProxy.cpp:
+        Remove WebProcessProxy::pages().
+
+        * UIProcess/WebProcessProxy.h:
+        (WebKit::WebProcessProxy::pages):
+        Make this return an IteratorRange.
+
+        (WebKit::WebProcessProxy::pageCount):
+        New function that returns the page count.
+
 2014-02-27  Alexey Proskuryakov  <[email protected]>
 
         [Mac][WK2] Remove hardcoded Cmd+B and Cmd+I from WKView.mm

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (164819 => 164820)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-02-27 19:41:12 UTC (rev 164820)
@@ -1653,7 +1653,14 @@
 
 WKArrayRef WKPageCopyRelatedPages(WKPageRef pageRef)
 {
-    return toAPI(toImpl(pageRef)->relatedPages().leakRef());
+    Vector<RefPtr<API::Object>> relatedPages;
+
+    for (auto& page : toImpl(pageRef)->process().pages()) {
+        if (page != toImpl(pageRef))
+            relatedPages.append(page);
+    }
+
+    return toAPI(API::Array::create(std::move(relatedPages)).leakRef());
 }
 
 void WKPageSetMayStartMediaWhenInWindow(WKPageRef pageRef, bool mayStartMedia)

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (164819 => 164820)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-02-27 19:41:12 UTC (rev 164820)
@@ -761,16 +761,12 @@
     if (m_processes.size() < m_webProcessCountLimit)
         return createNewWebProcess();
 
-    // Choose a process with fewest pages, to achieve flat distribution.
-    WebProcessProxy* result = nullptr;
-    unsigned fewestPagesSeen = UINT_MAX;
-    for (unsigned i = 0; i < m_processes.size(); ++i) {
-        if (fewestPagesSeen > m_processes[i]->pages().size()) {
-            result = m_processes[i].get();
-            fewestPagesSeen = m_processes[i]->pages().size();
-        }
-    }
-    return *result;
+    // Choose the process with fewest pages.
+    auto& process = *std::min_element(m_processes.begin(), m_processes.end(), [](const RefPtr<WebProcessProxy>& a, const RefPtr<WebProcessProxy>& b) {
+        return a->pageCount() < b->pageCount();
+    });
+
+    return *process;
 }
 
 PassRefPtr<WebPageProxy> WebContext::createWebPage(PageClient& pageClient, WebPageConfiguration configuration)

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (164819 => 164820)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-02-27 19:41:12 UTC (rev 164820)
@@ -422,22 +422,6 @@
     preferencesDidChange();
 }
 
-PassRefPtr<API::Array> WebPageProxy::relatedPages() const
-{
-    // pages() returns a list of pages in WebProcess, so this page may or may not be among them - a client can use a reference to WebPageProxy after the page has closed.
-    Vector<WebPageProxy*> pages = m_process->pages();
-
-    Vector<RefPtr<API::Object>> result;
-    result.reserveInitialCapacity(pages.size());
-
-    for (const auto& page : pages) {
-        if (page != this)
-            result.uncheckedAppend(page);
-    }
-
-    return API::Array::create(std::move(result));
-}
-
 void WebPageProxy::setLoaderClient(std::unique_ptr<API::LoaderClient> loaderClient)
 {
     if (!loaderClient) {

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (164819 => 164820)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2014-02-27 19:41:12 UTC (rev 164820)
@@ -211,13 +211,6 @@
     }
 }
 
-Vector<WebPageProxy*> WebProcessProxy::pages() const
-{
-    Vector<WebPageProxy*> result;
-    copyValuesToVector(m_pageMap, result);
-    return result;
-}
-
 WebBackForwardListItem* WebProcessProxy::webBackForwardItem(uint64_t itemID) const
 {
     return m_backForwardListItemMap.get(itemID);

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (164819 => 164820)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2014-02-27 19:39:42 UTC (rev 164819)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2014-02-27 19:41:12 UTC (rev 164820)
@@ -81,8 +81,10 @@
     PassRefPtr<WebPageProxy> createWebPage(PageClient&, const WebPageConfiguration&);
     void addExistingWebPage(WebPageProxy*, uint64_t pageID);
     void removeWebPage(uint64_t pageID);
-    Vector<WebPageProxy*> pages() const;
 
+    WTF::IteratorRange<WebPageProxyMap::const_iterator::Values> pages() const { return m_pageMap.values(); }
+    unsigned pageCount() const { return m_pageMap.size(); }
+
     WebBackForwardListItem* webBackForwardItem(uint64_t itemID) const;
 
     ResponsivenessTimer* responsivenessTimer() { return &m_responsivenessTimer; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to