Changeset 180054 in webkit


Ignore:
Timestamp:
Feb 13, 2015 9:50:15 AM (9 years ago)
Author:
Antti Koivisto
Message:

WorkQueue should support concurrent queues
https://bugs.webkit.org/show_bug.cgi?id=141559

Reviewed by Anders Carlsson.

  • DatabaseProcess/DatabaseProcess.cpp:

(WebKit::DatabaseProcess::DatabaseProcess):

  • Platform/IPC/Connection.h:
  • Platform/IPC/mac/ConnectionMac.mm:

(IPC::Connection::open):

  • Platform/WorkQueue.cpp:

(WorkQueue::create):

Also make create return a Ref.

(WorkQueue::WorkQueue):

  • Platform/WorkQueue.h:

Add queue type enum.

  • Platform/efl/WorkQueueEfl.cpp:

(WorkQueue::platformInitialize):

  • Platform/gtk/WorkQueueGtk.cpp:

(WorkQueue::platformInitialize):

  • Platform/mac/WorkQueueMac.cpp:

(WorkQueue::platformInitialize):

  • Shared/mac/SecItemShim.cpp:

(WebKit::SecItemShim::initializeConnection):

  • Shared/mac/SecItemShim.h:
  • UIProcess/Launcher/ProcessLauncher.cpp:

(WebKit::processLauncherWorkQueue):

  • UIProcess/mac/SecItemShimProxy.cpp:

(WebKit::SecItemShimProxy::initializeConnection):

  • UIProcess/mac/SecItemShimProxy.h:
  • WebProcess/Plugins/PluginProcessConnectionManager.cpp:

(WebKit::PluginProcessConnectionManager::initializeConnection):

  • WebProcess/Plugins/PluginProcessConnectionManager.h:
  • WebProcess/WebPage/EventDispatcher.cpp:

(WebKit::EventDispatcher::EventDispatcher):
(WebKit::EventDispatcher::initializeConnection):

  • WebProcess/WebPage/EventDispatcher.h:
  • WebProcess/WebPage/ViewUpdateDispatcher.h:
Location:
trunk/Source/WebKit2
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r180052 r180054  
     12015-02-13  Antti Koivisto  <antti@apple.com>
     2
     3        WorkQueue should support concurrent queues
     4        https://bugs.webkit.org/show_bug.cgi?id=141559
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * DatabaseProcess/DatabaseProcess.cpp:
     9        (WebKit::DatabaseProcess::DatabaseProcess):
     10        * Platform/IPC/Connection.h:
     11        * Platform/IPC/mac/ConnectionMac.mm:
     12        (IPC::Connection::open):
     13        * Platform/WorkQueue.cpp:
     14        (WorkQueue::create):
     15
     16            Also make create return a Ref.
     17
     18        (WorkQueue::WorkQueue):
     19        * Platform/WorkQueue.h:
     20
     21            Add queue type enum.
     22
     23        * Platform/efl/WorkQueueEfl.cpp:
     24        (WorkQueue::platformInitialize):
     25        * Platform/gtk/WorkQueueGtk.cpp:
     26        (WorkQueue::platformInitialize):
     27        * Platform/mac/WorkQueueMac.cpp:
     28        (WorkQueue::platformInitialize):
     29        * Shared/mac/SecItemShim.cpp:
     30        (WebKit::SecItemShim::initializeConnection):
     31        * Shared/mac/SecItemShim.h:
     32        * UIProcess/Launcher/ProcessLauncher.cpp:
     33        (WebKit::processLauncherWorkQueue):
     34        * UIProcess/mac/SecItemShimProxy.cpp:
     35        (WebKit::SecItemShimProxy::initializeConnection):
     36        * UIProcess/mac/SecItemShimProxy.h:
     37        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
     38        (WebKit::PluginProcessConnectionManager::initializeConnection):
     39        * WebProcess/Plugins/PluginProcessConnectionManager.h:
     40        * WebProcess/WebPage/EventDispatcher.cpp:
     41        (WebKit::EventDispatcher::EventDispatcher):
     42        (WebKit::EventDispatcher::initializeConnection):
     43        * WebProcess/WebPage/EventDispatcher.h:
     44        * WebProcess/WebPage/ViewUpdateDispatcher.h:
     45
    1462015-02-12  Anders Carlsson  <andersca@apple.com>
    247
  • trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp

    r179409 r180054  
    5555
    5656DatabaseProcess::DatabaseProcess()
    57     : m_queue(adoptRef(*WorkQueue::create("com.apple.WebKit.DatabaseProcess").leakRef()))
     57    : m_queue(WorkQueue::create("com.apple.WebKit.DatabaseProcess"))
    5858    , m_webOriginDataManager(std::make_unique<WebOriginDataManager>(*this, *this))
    5959{
  • trunk/Source/WebKit2/Platform/IPC/Connection.h

    r179326 r180054  
    244244
    245245    bool m_isConnected;
    246     RefPtr<WorkQueue> m_connectionQueue;
     246    Ref<WorkQueue> m_connectionQueue;
    247247    WTF::RunLoop& m_clientRunLoop;
    248248
  • trunk/Source/WebKit2/Platform/IPC/mac/ConnectionMac.mm

    r179707 r180054  
    207207    // Register the data available handler.
    208208    RefPtr<Connection> connection(this);
    209     m_receivePortDataAvailableSource = createDataAvailableSource(m_receivePort, *m_connectionQueue, [connection] {
     209    m_receivePortDataAvailableSource = createDataAvailableSource(m_receivePort, m_connectionQueue, [connection] {
    210210        connection->receiveSourceEventHandler();
    211211    });
     
    214214    // If we have an exception port, register the data available handler and send over the port to the other end.
    215215    if (m_exceptionPort) {
    216         m_exceptionPortDataAvailableSource = createDataAvailableSource(m_exceptionPort, *m_connectionQueue, [connection] {
     216        m_exceptionPortDataAvailableSource = createDataAvailableSource(m_exceptionPort, m_connectionQueue, [connection] {
    217217            connection->exceptionSourceEventHandler();
    218218        });
  • trunk/Source/WebKit2/Platform/WorkQueue.cpp

    r169926 r180054  
    2727#include "WorkQueue.h"
    2828
    29 PassRefPtr<WorkQueue> WorkQueue::create(const char* name, QOS qos)
     29Ref<WorkQueue> WorkQueue::create(const char* name, Type type, QOS qos)
    3030{
    31     return adoptRef(new WorkQueue(name, qos));
     31    return adoptRef(*new WorkQueue(name, type, qos));
    3232}
    3333
    34 WorkQueue::WorkQueue(const char* name, QOS qos)
     34WorkQueue::WorkQueue(const char* name, Type type, QOS qos)
    3535{
    36     platformInitialize(name, qos);
     36    platformInitialize(name, type, qos);
    3737}
    3838
  • trunk/Source/WebKit2/Platform/WorkQueue.h

    r179395 r180054  
    5555class WorkQueue final : public FunctionDispatcher {
    5656public:
     57    enum class Type {
     58        Serial,
     59        Concurrent
     60    };
    5761    enum class QOS {
    5862        UserInteractive,
     
    6367    };
    6468   
    65     static PassRefPtr<WorkQueue> create(const char* name, QOS = QOS::Default);
     69    static Ref<WorkQueue> create(const char* name, Type = Type::Serial, QOS = QOS::Default);
    6670    virtual ~WorkQueue();
    6771
     
    8084
    8185private:
    82     explicit WorkQueue(const char* name, QOS);
     86    explicit WorkQueue(const char* name, Type, QOS);
    8387
    84     void platformInitialize(const char* name, QOS);
     88    void platformInitialize(const char* name, Type, QOS);
    8589    void platformInvalidate();
    8690
  • trunk/Source/WebKit2/Platform/efl/WorkQueueEfl.cpp

    r170774 r180054  
    2424#include <DispatchQueueWorkItemEfl.h>
    2525
    26 void WorkQueue::platformInitialize(const char* name, QOS)
     26void WorkQueue::platformInitialize(const char* name, Type, QOS)
    2727{
    2828    m_dispatchQueue = DispatchQueue::create(name);
  • trunk/Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp

    r179395 r180054  
    3333static const size_t kVisualStudioThreadNameLimit = 31;
    3434
    35 void WorkQueue::platformInitialize(const char* name, QOS)
     35void WorkQueue::platformInitialize(const char* name, Type, QOS)
    3636{
    3737    m_eventContext = adoptGRef(g_main_context_new());
  • trunk/Source/WebKit2/Platform/mac/WorkQueueMac.cpp

    r169926 r180054  
    6363#endif
    6464
    65 void WorkQueue::platformInitialize(const char* name, QOS qos)
     65void WorkQueue::platformInitialize(const char* name, Type type, QOS qos)
    6666{
    67     dispatch_queue_attr_t attr = 0;
     67    dispatch_queue_attr_t attr = type == Type::Concurrent ? DISPATCH_QUEUE_CONCURRENT : DISPATCH_QUEUE_SERIAL;
    6868#if HAVE(QOS_CLASSES)
    69     attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, dispatchQOSClass(qos), 0);
     69    attr = dispatch_queue_attr_make_with_qos_class(attr, dispatchQOSClass(qos), 0);
    7070#endif
    7171    m_dispatchQueue = dispatch_queue_create(name, attr);
  • trunk/Source/WebKit2/Shared/mac/SecItemShim.cpp

    r179409 r180054  
    179179void SecItemShim::initializeConnection(IPC::Connection* connection)
    180180{
    181     connection->addWorkQueueMessageReceiver(Messages::SecItemShim::messageReceiverName(), m_queue.get(), this);
     181    connection->addWorkQueueMessageReceiver(Messages::SecItemShim::messageReceiverName(), &m_queue.get(), this);
    182182}
    183183
  • trunk/Source/WebKit2/Shared/mac/SecItemShim.h

    r179409 r180054  
    5252    void secItemResponse(uint64_t requestID, const SecItemResponseData&);
    5353
    54     RefPtr<WorkQueue> m_queue;
     54    Ref<WorkQueue> m_queue;
    5555};
    5656
  • trunk/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp

    r177425 r180054  
    2828
    2929#include "WorkQueue.h"
    30 #include <wtf/StdLibExtras.h>
     30#include <wtf/StdLibExtras.h> 
    3131
    3232namespace WebKit {
     
    3434static WorkQueue& processLauncherWorkQueue()
    3535{
    36     static WorkQueue& processLauncherWorkQueue = *WorkQueue::create("com.apple.WebKit.ProcessLauncher").leakRef();
     36
     37    static WorkQueue& processLauncherWorkQueue = WorkQueue::create("com.apple.WebKit.ProcessLauncher").leakRef();
    3738    return processLauncherWorkQueue;
    3839}
  • trunk/Source/WebKit2/UIProcess/mac/SecItemShimProxy.cpp

    r179409 r180054  
    5555void SecItemShimProxy::initializeConnection(IPC::Connection& connection)
    5656{
    57     connection.addWorkQueueMessageReceiver(Messages::SecItemShimProxy::messageReceiverName(), m_queue.get(), this);
     57    connection.addWorkQueueMessageReceiver(Messages::SecItemShimProxy::messageReceiverName(), &m_queue.get(), this);
    5858}
    5959
  • trunk/Source/WebKit2/UIProcess/mac/SecItemShimProxy.h

    r179409 r180054  
    5050    void secItemRequest(IPC::Connection&, uint64_t requestID, const SecItemRequestData&);
    5151
    52     RefPtr<WorkQueue> m_queue;
     52    Ref<WorkQueue> m_queue;
    5353};
    5454
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp

    r179409 r180054  
    5959void PluginProcessConnectionManager::initializeConnection(IPC::Connection* connection)
    6060{
    61     connection->addWorkQueueMessageReceiver(Messages::PluginProcessConnectionManager::messageReceiverName(), m_queue.get(), this);
     61    connection->addWorkQueueMessageReceiver(Messages::PluginProcessConnectionManager::messageReceiverName(), &m_queue.get(), this);
    6262}
    6363
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h

    r177917 r180054  
    6161    void pluginProcessCrashed(uint64_t pluginProcessToken);
    6262
    63     RefPtr<WorkQueue> m_queue;
     63    Ref<WorkQueue> m_queue;
    6464
    6565    Vector<RefPtr<PluginProcessConnection>> m_pluginProcessConnections;
  • trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp

    r179409 r180054  
    5353
    5454EventDispatcher::EventDispatcher()
    55     : m_queue(WorkQueue::create("com.apple.WebKit.EventDispatcher", WorkQueue::QOS::UserInteractive))
     55    : m_queue(WorkQueue::create("com.apple.WebKit.EventDispatcher", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive))
    5656    , m_recentWheelEventDeltaTracker(std::make_unique<WheelEventDeltaTracker>())
    5757#if ENABLE(IOS_TOUCH_EVENTS)
     
    8888void EventDispatcher::initializeConnection(IPC::Connection* connection)
    8989{
    90     connection->addWorkQueueMessageReceiver(Messages::EventDispatcher::messageReceiverName(), m_queue.get(), this);
     90    connection->addWorkQueueMessageReceiver(Messages::EventDispatcher::messageReceiverName(), &m_queue.get(), this);
    9191}
    9292
  • trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.h

    r177917 r180054  
    9090#endif
    9191
    92     RefPtr<WorkQueue> m_queue;
     92    Ref<WorkQueue> m_queue;
    9393
    9494#if ENABLE(ASYNC_SCROLLING)
  • trunk/Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.cpp

    r179409 r180054  
    5353void ViewUpdateDispatcher::initializeConnection(IPC::Connection* connection)
    5454{
    55     connection->addWorkQueueMessageReceiver(Messages::ViewUpdateDispatcher::messageReceiverName(), m_queue.get(), this);
     55    connection->addWorkQueueMessageReceiver(Messages::ViewUpdateDispatcher::messageReceiverName(), &m_queue.get(), this);
    5656}
    5757
  • trunk/Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h

    r177917 r180054  
    5757    };
    5858
    59     RefPtr<WorkQueue> m_queue;
     59    Ref<WorkQueue> m_queue;
    6060    SpinLock m_dataMutex;
    6161    HashMap<uint64_t, UpdateData> m_latestUpdate;
Note: See TracChangeset for help on using the changeset viewer.