Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Side by Side Diff: third_party/WebKit/Source/core/workers/WorkerThread.h

Issue 2716853002: (WIP) Worker: Merge ParentFrameTaskRunners into TaskRunnerHelper
Patch Set: WIP Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 12 matching lines...) Expand all
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 * 24 *
25 */ 25 */
26 26
27 #ifndef WorkerThread_h 27 #ifndef WorkerThread_h
28 #define WorkerThread_h 28 #define WorkerThread_h
29 29
30 #include <memory> 30 #include <memory>
31 31
32 #include "core/CoreExport.h" 32 #include "core/CoreExport.h"
33 #include "core/dom/TaskRunnerHelper.h"
33 #include "core/frame/csp/ContentSecurityPolicy.h" 34 #include "core/frame/csp/ContentSecurityPolicy.h"
34 #include "core/workers/ParentFrameTaskRunners.h"
35 #include "core/workers/WorkerLoaderProxy.h" 35 #include "core/workers/WorkerLoaderProxy.h"
36 #include "core/workers/WorkerThreadLifecycleObserver.h" 36 #include "core/workers/WorkerThreadLifecycleObserver.h"
37 #include "platform/LifecycleNotifier.h" 37 #include "platform/LifecycleNotifier.h"
38 #include "platform/WaitableEvent.h" 38 #include "platform/WaitableEvent.h"
39 #include "platform/WebTaskRunner.h" 39 #include "platform/WebTaskRunner.h"
40 #include "public/platform/WebThread.h" 40 #include "public/platform/WebThread.h"
41 #include "v8/include/v8.h" 41 #include "v8/include/v8.h"
42 #include "wtf/Forward.h" 42 #include "wtf/Forward.h"
43 #include "wtf/Functional.h" 43 #include "wtf/Functional.h"
44 #include "wtf/PassRefPtr.h" 44 #include "wtf/PassRefPtr.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 NotTerminated, 100 NotTerminated,
101 GracefullyTerminated, 101 GracefullyTerminated,
102 SyncForciblyTerminated, 102 SyncForciblyTerminated,
103 AsyncForciblyTerminated, 103 AsyncForciblyTerminated,
104 LastEnum, 104 LastEnum,
105 }; 105 };
106 106
107 virtual ~WorkerThread(); 107 virtual ~WorkerThread();
108 108
109 // Called on the main thread. 109 // Called on the main thread.
110 void start(std::unique_ptr<WorkerThreadStartupData>, ParentFrameTaskRunners*); 110 void start(std::unique_ptr<WorkerThreadStartupData>, FrameTaskRunnersHolder*);
111 void terminate(); 111 void terminate();
112 112
113 // Called on the main thread. Internally calls terminateInternal() and wait 113 // Called on the main thread. Internally calls terminateInternal() and wait
114 // (by *blocking* the calling thread) until the worker(s) is/are shut down. 114 // (by *blocking* the calling thread) until the worker(s) is/are shut down.
115 void terminateAndWait(); 115 void terminateAndWait();
116 static void terminateAndWaitForAllWorkers(); 116 static void terminateAndWaitForAllWorkers();
117 117
118 // WebThread::TaskObserver. 118 // WebThread::TaskObserver.
119 void willProcessTask() override; 119 void willProcessTask() override;
120 void didProcessTask() override; 120 void didProcessTask() override;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 static HashSet<WorkerThread*>& workerThreads(); 164 static HashSet<WorkerThread*>& workerThreads();
165 165
166 int getWorkerThreadId() const { return m_workerThreadId; } 166 int getWorkerThreadId() const { return m_workerThreadId; }
167 167
168 PlatformThreadId platformThreadId(); 168 PlatformThreadId platformThreadId();
169 169
170 bool isForciblyTerminated(); 170 bool isForciblyTerminated();
171 171
172 void waitForShutdownForTesting() { m_shutdownEvent->wait(); } 172 void waitForShutdownForTesting() { m_shutdownEvent->wait(); }
173 173
174 ParentFrameTaskRunners* getParentFrameTaskRunners() const {
175 return m_parentFrameTaskRunners.get();
176 }
177
178 protected: 174 protected:
179 WorkerThread(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&); 175 WorkerThread(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
180 176
181 // Factory method for creating a new worker context for the thread. 177 // Factory method for creating a new worker context for the thread.
182 // Called on the worker thread. 178 // Called on the worker thread.
183 virtual WorkerOrWorkletGlobalScope* createWorkerGlobalScope( 179 virtual WorkerOrWorkletGlobalScope* createWorkerGlobalScope(
184 std::unique_ptr<WorkerThreadStartupData>) = 0; 180 std::unique_ptr<WorkerThreadStartupData>) = 0;
185 181
186 // Returns true when this WorkerThread owns the associated 182 // Returns true when this WorkerThread owns the associated
187 // WorkerBackingThread exclusively. If this function returns true, the 183 // WorkerBackingThread exclusively. If this function returns true, the
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 // Forcibly terminates the worker execution. This must be called with 237 // Forcibly terminates the worker execution. This must be called with
242 // |m_threadStateMutex| acquired. 238 // |m_threadStateMutex| acquired.
243 void forciblyTerminateExecution(const MutexLocker&, ExitCode); 239 void forciblyTerminateExecution(const MutexLocker&, ExitCode);
244 240
245 // Returns true if termination or shutdown sequence has started. This is 241 // Returns true if termination or shutdown sequence has started. This is
246 // thread safe. 242 // thread safe.
247 // Note that this returns false when the sequence has already started but it 243 // Note that this returns false when the sequence has already started but it
248 // hasn't been notified to the calling thread. 244 // hasn't been notified to the calling thread.
249 bool isInShutdown(); 245 bool isInShutdown();
250 246
251 void initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupData>); 247 void initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupData>,
248 FrameTaskRunnersHolder*);
252 void prepareForShutdownOnWorkerThread(); 249 void prepareForShutdownOnWorkerThread();
253 void performShutdownOnWorkerThread(); 250 void performShutdownOnWorkerThread();
254 void performTaskOnWorkerThread(std::unique_ptr<CrossThreadClosure>); 251 void performTaskOnWorkerThread(std::unique_ptr<CrossThreadClosure>);
255 void performDebuggerTaskOnWorkerThread(std::unique_ptr<CrossThreadClosure>); 252 void performDebuggerTaskOnWorkerThread(std::unique_ptr<CrossThreadClosure>);
256 void performDebuggerTaskDontWaitOnWorkerThread(); 253 void performDebuggerTaskDontWaitOnWorkerThread();
257 254
258 // These must be called with |m_threadStateMutex| acquired. 255 // These must be called with |m_threadStateMutex| acquired.
259 void setThreadState(const MutexLocker&, ThreadState); 256 void setThreadState(const MutexLocker&, ThreadState);
260 void setExitCode(const MutexLocker&, ExitCode); 257 void setExitCode(const MutexLocker&, ExitCode);
261 bool isThreadStateMutexLocked(const MutexLocker&); 258 bool isThreadStateMutexLocked(const MutexLocker&);
(...skipping 22 matching lines...) Expand all
284 281
285 ThreadState m_threadState = ThreadState::NotStarted; 282 ThreadState m_threadState = ThreadState::NotStarted;
286 ExitCode m_exitCode = ExitCode::NotTerminated; 283 ExitCode m_exitCode = ExitCode::NotTerminated;
287 284
288 long long m_forcibleTerminationDelayInMs; 285 long long m_forcibleTerminationDelayInMs;
289 286
290 std::unique_ptr<InspectorTaskRunner> m_inspectorTaskRunner; 287 std::unique_ptr<InspectorTaskRunner> m_inspectorTaskRunner;
291 288
292 RefPtr<WorkerLoaderProxy> m_workerLoaderProxy; 289 RefPtr<WorkerLoaderProxy> m_workerLoaderProxy;
293 WorkerReportingProxy& m_workerReportingProxy; 290 WorkerReportingProxy& m_workerReportingProxy;
294 CrossThreadPersistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; 291 Persistent<FrameTaskRunnersHolder> m_frameTaskRunners;
295 292
296 // This lock protects |m_globalScope|, |m_requestedToTerminate|, 293 // This lock protects |m_globalScope|, |m_requestedToTerminate|,
297 // |m_threadState|, |m_runningDebuggerTask| and |m_exitCode|. 294 // |m_threadState|, |m_runningDebuggerTask| and |m_exitCode|.
298 Mutex m_threadStateMutex; 295 Mutex m_threadStateMutex;
299 296
300 CrossThreadPersistent<ConsoleMessageStorage> m_consoleMessageStorage; 297 CrossThreadPersistent<ConsoleMessageStorage> m_consoleMessageStorage;
301 CrossThreadPersistent<WorkerOrWorkletGlobalScope> m_globalScope; 298 CrossThreadPersistent<WorkerOrWorkletGlobalScope> m_globalScope;
302 CrossThreadPersistent<WorkerInspectorController> m_workerInspectorController; 299 CrossThreadPersistent<WorkerInspectorController> m_workerInspectorController;
303 300
304 // Signaled when the thread completes termination on the worker thread. 301 // Signaled when the thread completes termination on the worker thread.
305 std::unique_ptr<WaitableEvent> m_shutdownEvent; 302 std::unique_ptr<WaitableEvent> m_shutdownEvent;
306 303
307 // Used to cancel a scheduled forcible termination task. See 304 // Used to cancel a scheduled forcible termination task. See
308 // mayForciblyTerminateExecution() for details. 305 // mayForciblyTerminateExecution() for details.
309 TaskHandle m_forcibleTerminationTaskHandle; 306 TaskHandle m_forcibleTerminationTaskHandle;
310 307
311 // Created on the main thread heap, but will be accessed cross-thread 308 // Created on the main thread heap, but will be accessed cross-thread
312 // when worker thread posts tasks. 309 // when worker thread posts tasks.
313 CrossThreadPersistent<WorkerThreadLifecycleContext> 310 CrossThreadPersistent<WorkerThreadLifecycleContext>
314 m_workerThreadLifecycleContext; 311 m_workerThreadLifecycleContext;
315 }; 312 };
316 313
317 } // namespace blink 314 } // namespace blink
318 315
319 #endif // WorkerThread_h 316 #endif // WorkerThread_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp ('k') | third_party/WebKit/Source/core/workers/WorkerThread.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698