Changeset 227828 in webkit
- Timestamp:
- Jan 30, 2018, 10:51:27 AM (9 years ago)
- Location:
- branches/safari-605-branch/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
workers/service/server/SWServer.cpp (modified) (3 diffs)
-
workers/service/server/SWServer.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-605-branch/Source/WebCore/ChangeLog
r227821 r227828 1 2018-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 1 24 2018-01-30 Jason Marcell <jmarcell@apple.com> 2 25 -
branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.cpp
r227819 r227828 74 74 RELEASE_ASSERT(m_registrations.isEmpty()); 75 75 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);85 76 86 77 allServers().remove(this); … … 272 263 UNUSED_PARAM(registrationDatabaseDirectory); 273 264 allServers().add(this); 274 m_taskThread = Thread::create(ASCIILiteral("ServiceWorker Task Thread"), [this] {275 taskThreadEntryPoint();276 });277 265 } 278 266 … … 667 655 668 656 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();710 657 } 711 658 -
branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.h
r227808 r227828 38 38 #include "ServiceWorkerRegistrationKey.h" 39 39 #include "ServiceWorkerTypes.h" 40 #include <wtf/CrossThreadQueue.h>41 #include <wtf/CrossThreadTask.h>42 40 #include <wtf/HashMap.h> 43 41 #include <wtf/HashSet.h> … … 138 136 void startScriptFetch(const ServiceWorkerJobData&, FetchOptions::Cache); 139 137 140 void postTask(CrossThreadTask&&);141 void postTaskReply(CrossThreadTask&&);142 143 138 void updateWorker(Connection&, const ServiceWorkerJobDataIdentifier&, SWServerRegistration&, const URL&, const String& script, const ContentSecurityPolicyResponseHeaders&, WorkerType); 144 139 void terminateWorker(SWServerWorker&); … … 187 182 void unregisterConnection(Connection&); 188 183 189 void taskThreadEntryPoint();190 void handleTaskRepliesOnMainThread();191 192 184 void scriptFetchFinished(Connection&, const ServiceWorkerFetchResult&); 193 185 … … 229 221 HashMap<ServiceWorkerClientIdentifier, ServiceWorkerIdentifier> m_clientToControllingWorker; 230 222 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 };239 223 UniqueRef<SWOriginStore> m_originStore; 240 224 RegistrationStore m_registrationStore;
Note:
See TracChangeset
for help on using the changeset viewer.