OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 workerThreads().erase(this); | 97 workerThreads().erase(this); |
98 | 98 |
99 DCHECK_NE(ExitCode::NotTerminated, m_exitCode); | 99 DCHECK_NE(ExitCode::NotTerminated, m_exitCode); |
100 DEFINE_THREAD_SAFE_STATIC_LOCAL( | 100 DEFINE_THREAD_SAFE_STATIC_LOCAL( |
101 EnumerationHistogram, exitCodeHistogram, | 101 EnumerationHistogram, exitCodeHistogram, |
102 new EnumerationHistogram("WorkerThread.ExitCode", | 102 new EnumerationHistogram("WorkerThread.ExitCode", |
103 static_cast<int>(ExitCode::LastEnum))); | 103 static_cast<int>(ExitCode::LastEnum))); |
104 exitCodeHistogram.count(static_cast<int>(m_exitCode)); | 104 exitCodeHistogram.count(static_cast<int>(m_exitCode)); |
105 } | 105 } |
106 | 106 |
107 void WorkerThread::start(std::unique_ptr<WorkerThreadStartupData> startupData) { | 107 void WorkerThread::start(std::unique_ptr<WorkerThreadStartupData> startupData, |
| 108 ParentFrameTaskRunners* parentFrameTaskRunners) { |
108 DCHECK(isMainThread()); | 109 DCHECK(isMainThread()); |
109 | 110 |
110 if (m_requestedToStart) | 111 if (m_requestedToStart) |
111 return; | 112 return; |
112 | 113 |
113 m_requestedToStart = true; | 114 m_requestedToStart = true; |
| 115 m_parentFrameTaskRunners = parentFrameTaskRunners; |
114 workerBackingThread().backingThread().postTask( | 116 workerBackingThread().backingThread().postTask( |
115 BLINK_FROM_HERE, crossThreadBind(&WorkerThread::initializeOnWorkerThread, | 117 BLINK_FROM_HERE, crossThreadBind(&WorkerThread::initializeOnWorkerThread, |
116 crossThreadUnretained(this), | 118 crossThreadUnretained(this), |
117 WTF::passed(std::move(startupData)))); | 119 WTF::passed(std::move(startupData)))); |
118 } | 120 } |
119 | 121 |
120 void WorkerThread::terminate() { | 122 void WorkerThread::terminate() { |
121 DCHECK(isMainThread()); | 123 DCHECK(isMainThread()); |
122 terminateInternal(TerminationMode::Graceful); | 124 terminateInternal(TerminationMode::Graceful); |
123 } | 125 } |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 return true; | 279 return true; |
278 case ExitCode::LastEnum: | 280 case ExitCode::LastEnum: |
279 NOTREACHED() << static_cast<int>(m_exitCode); | 281 NOTREACHED() << static_cast<int>(m_exitCode); |
280 return false; | 282 return false; |
281 } | 283 } |
282 NOTREACHED() << static_cast<int>(m_exitCode); | 284 NOTREACHED() << static_cast<int>(m_exitCode); |
283 return false; | 285 return false; |
284 } | 286 } |
285 | 287 |
286 WorkerThread::WorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, | 288 WorkerThread::WorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, |
287 WorkerReportingProxy& workerReportingProxy, | 289 WorkerReportingProxy& workerReportingProxy) |
288 ParentFrameTaskRunners* parentFrameTaskRunners) | |
289 : m_workerThreadId(getNextWorkerThreadId()), | 290 : m_workerThreadId(getNextWorkerThreadId()), |
290 m_forcibleTerminationDelayInMs(kForcibleTerminationDelayInMs), | 291 m_forcibleTerminationDelayInMs(kForcibleTerminationDelayInMs), |
291 m_inspectorTaskRunner(WTF::makeUnique<InspectorTaskRunner>()), | 292 m_inspectorTaskRunner(WTF::makeUnique<InspectorTaskRunner>()), |
292 m_workerLoaderProxy(workerLoaderProxy), | 293 m_workerLoaderProxy(workerLoaderProxy), |
293 m_workerReportingProxy(workerReportingProxy), | 294 m_workerReportingProxy(workerReportingProxy), |
294 m_parentFrameTaskRunners(parentFrameTaskRunners), | |
295 m_shutdownEvent(WTF::wrapUnique( | 295 m_shutdownEvent(WTF::wrapUnique( |
296 new WaitableEvent(WaitableEvent::ResetPolicy::Manual, | 296 new WaitableEvent(WaitableEvent::ResetPolicy::Manual, |
297 WaitableEvent::InitialState::NonSignaled))), | 297 WaitableEvent::InitialState::NonSignaled))), |
298 m_workerThreadLifecycleContext(new WorkerThreadLifecycleContext) { | 298 m_workerThreadLifecycleContext(new WorkerThreadLifecycleContext) { |
299 DCHECK(isMainThread()); | 299 DCHECK(isMainThread()); |
300 MutexLocker lock(threadSetMutex()); | 300 MutexLocker lock(threadSetMutex()); |
301 workerThreads().insert(this); | 301 workerThreads().insert(this); |
302 } | 302 } |
303 | 303 |
304 void WorkerThread::terminateInternal(TerminationMode mode) { | 304 void WorkerThread::terminateInternal(TerminationMode mode) { |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 MutexLocker lock(m_threadStateMutex); | 642 MutexLocker lock(m_threadStateMutex); |
643 return m_requestedToTerminate; | 643 return m_requestedToTerminate; |
644 } | 644 } |
645 | 645 |
646 ExitCode WorkerThread::getExitCodeForTesting() { | 646 ExitCode WorkerThread::getExitCodeForTesting() { |
647 MutexLocker lock(m_threadStateMutex); | 647 MutexLocker lock(m_threadStateMutex); |
648 return m_exitCode; | 648 return m_exitCode; |
649 } | 649 } |
650 | 650 |
651 } // namespace blink | 651 } // namespace blink |
OLD | NEW |