⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 227828 in webkit


Ignore:
Timestamp:
Jan 30, 2018, 10:51:27 AM (9 years ago)
Author:
jmarcell@apple.com
Message:

Cherry-pick r227745. rdar://problem/37019493

Location:
branches/safari-605-branch/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-605-branch/Source/WebCore/ChangeLog

    r227821 r227828  
     12018-01-30  Jason Marcell  <jmarcell@apple.com>
     2
     3        Cherry-pick r227745. rdar://problem/37019493
     4
     5    2018-01-29  Chris Dumez  <cdumez@apple.com>
     6
     7            Drop unnecessary "ServiceWorker Task Thread" in SWServer
     8            https://bugs.webkit.org/show_bug.cgi?id=182253
     9
     10            Reviewed by Youenn Fablet.
     11
     12            Drop unnecessary "ServiceWorker Task Thread" in SWServer. We're spinning a thread for
     13            each SWServer that is never used.
     14
     15            * workers/service/server/SWServer.cpp:
     16            (WebCore::SWServer::~SWServer):
     17            (WebCore::SWServer::SWServer):
     18            (WebCore::SWServer::taskThreadEntryPoint): Deleted.
     19            (WebCore::SWServer::postTask): Deleted.
     20            (WebCore::SWServer::postTaskReply): Deleted.
     21            (WebCore::SWServer::handleTaskRepliesOnMainThread): Deleted.
     22            * workers/service/server/SWServer.h:
     23
    1242018-01-30  Jason Marcell  <jmarcell@apple.com>
    225
  • branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.cpp

    r227819 r227828  
    7474    RELEASE_ASSERT(m_registrations.isEmpty());
    7575    RELEASE_ASSERT(m_jobQueues.isEmpty());
    76 
    77     ASSERT(m_taskQueue.isEmpty());
    78     ASSERT(m_taskReplyQueue.isEmpty());
    79 
    80     // For a SWServer to be cleanly shut down its thread must have finished and gone away.
    81     // At this stage in development of the feature that actually never happens.
    82     // But once it does start happening, this ASSERT will catch us doing it wrong.
    83     Locker<Lock> locker(m_taskThreadLock);
    84     ASSERT(!m_taskThread);
    8576   
    8677    allServers().remove(this);
    … …  
    272263    UNUSED_PARAM(registrationDatabaseDirectory);
    273264    allServers().add(this);
    274     m_taskThread = Thread::create(ASCIILiteral("ServiceWorker Task Thread"), [this] {
    275         taskThreadEntryPoint();
    276     });
    277265}
    278266
    … …  
    667655
    668656    connection->fireActivateEvent(worker.identifier());
    669 }
    670 
    671 void SWServer::taskThreadEntryPoint()
    672 {
    673     ASSERT(!isMainThread());
    674 
    675     while (!m_taskQueue.isKilled())
    676         m_taskQueue.waitForMessage().performTask();
    677 
    678     Locker<Lock> locker(m_taskThreadLock);
    679     m_taskThread = nullptr;
    680 }
    681 
    682 void SWServer::postTask(CrossThreadTask&& task)
    683 {
    684     m_taskQueue.append(WTFMove(task));
    685 }
    686 
    687 void SWServer::postTaskReply(CrossThreadTask&& task)
    688 {
    689     m_taskReplyQueue.append(WTFMove(task));
    690 
    691     Locker<Lock> locker(m_mainThreadReplyLock);
    692     if (m_mainThreadReplyScheduled)
    693         return;
    694 
    695     m_mainThreadReplyScheduled = true;
    696     callOnMainThread([this] {
    697         handleTaskRepliesOnMainThread();
    698     });
    699 }
    700 
    701 void SWServer::handleTaskRepliesOnMainThread()
    702 {
    703     {
    704         Locker<Lock> locker(m_mainThreadReplyLock);
    705         m_mainThreadReplyScheduled = false;
    706     }
    707 
    708     while (auto task = m_taskReplyQueue.tryGetMessage())
    709         task->performTask();
    710657}
    711658
  • branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.h

    r227808 r227828  
    3838#include "ServiceWorkerRegistrationKey.h"
    3939#include "ServiceWorkerTypes.h"
    40 #include <wtf/CrossThreadQueue.h>
    41 #include <wtf/CrossThreadTask.h>
    4240#include <wtf/HashMap.h>
    4341#include <wtf/HashSet.h>
    … …  
    138136    void startScriptFetch(const ServiceWorkerJobData&, FetchOptions::Cache);
    139137
    140     void postTask(CrossThreadTask&&);
    141     void postTaskReply(CrossThreadTask&&);
    142 
    143138    void updateWorker(Connection&, const ServiceWorkerJobDataIdentifier&, SWServerRegistration&, const URL&, const String& script, const ContentSecurityPolicyResponseHeaders&, WorkerType);
    144139    void terminateWorker(SWServerWorker&);
    … …  
    187182    void unregisterConnection(Connection&);
    188183
    189     void taskThreadEntryPoint();
    190     void handleTaskRepliesOnMainThread();
    191 
    192184    void scriptFetchFinished(Connection&, const ServiceWorkerFetchResult&);
    193185
    … …  
    229221    HashMap<ServiceWorkerClientIdentifier, ServiceWorkerIdentifier> m_clientToControllingWorker;
    230222
    231     RefPtr<Thread> m_taskThread;
    232     Lock m_taskThreadLock;
    233 
    234     CrossThreadQueue<CrossThreadTask> m_taskQueue;
    235     CrossThreadQueue<CrossThreadTask> m_taskReplyQueue;
    236 
    237     Lock m_mainThreadReplyLock;
    238     bool m_mainThreadReplyScheduled { false };
    239223    UniqueRef<SWOriginStore> m_originStore;
    240224    RegistrationStore m_registrationStore;
Note: See TracChangeset for help on using the changeset viewer.