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

Unified Diff: third_party/WebKit/Source/core/workers/WorkerThread.h

Issue 2806623004: Worker: Introduce per-global-scope task scheduler (Closed)
Patch Set: wip Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/workers/WorkerThread.h
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.h b/third_party/WebKit/Source/core/workers/WorkerThread.h
index 8239c850ce8cceea70c168397effc07d95effd4a..af405a6d04b61d6c89b053079698463242f7f864 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.h
@@ -37,6 +37,7 @@
#include "platform/LifecycleNotifier.h"
#include "platform/WaitableEvent.h"
#include "platform/WebTaskRunner.h"
+#include "platform/scheduler/child/global_scope_scheduler.h"
#include "public/platform/WebThread.h"
#include "v8/include/v8.h"
#include "wtf/Forward.h"
@@ -92,7 +93,6 @@ class CORE_EXPORT WorkerThreadLifecycleContext final
// If the running task is for debugger, it's guaranteed to finish without
// any interruptions.
// - Queued tasks never run.
-// - postTask() and appendDebuggerTask() reject posting new tasks.
class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
public:
// Represents how this thread is terminated. Used for UMA. Append only.
@@ -137,9 +137,6 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
return m_workerReportingProxy;
}
- void postTask(const WebTraceLocation&, std::unique_ptr<WTF::Closure>);
- void postTask(const WebTraceLocation&,
- std::unique_ptr<WTF::CrossThreadClosure>);
void appendDebuggerTask(std::unique_ptr<CrossThreadClosure>);
// Runs only debugger tasks while paused in debugger.
@@ -176,6 +173,10 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
return m_parentFrameTaskRunners.get();
}
+ scheduler::GlobalScopeScheduler* globalScopeScheduler() const {
+ return m_globalScopeScheduler.get();
+ }
+
protected:
WorkerThread(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
@@ -243,18 +244,10 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
// |m_threadStateMutex| acquired.
void forciblyTerminateExecution(const MutexLocker&, ExitCode);
- // Returns true if termination or shutdown sequence has started. This is
- // thread safe.
- // Note that this returns false when the sequence has already started but it
- // hasn't been notified to the calling thread.
- bool isInShutdown();
-
+ void initializeSchedulerOnWorkerThread(WaitableEvent*);
void initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupData>);
void prepareForShutdownOnWorkerThread();
void performShutdownOnWorkerThread();
- template <WTF::FunctionThreadAffinity threadAffinity>
- void performTaskOnWorkerThread(
- std::unique_ptr<Function<void(), threadAffinity>> task);
void performDebuggerTaskOnWorkerThread(std::unique_ptr<CrossThreadClosure>);
void performDebuggerTaskDontWaitOnWorkerThread();
@@ -294,8 +287,18 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
RefPtr<WorkerLoaderProxy> m_workerLoaderProxy;
WorkerReportingProxy& m_workerReportingProxy;
+
CrossThreadPersistent<ParentFrameTaskRunners> m_parentFrameTaskRunners;
+ // Per-global-scope scheduler. Tasks managed by this scheduler are canceled
+ // when the global scope is closed.
+ std::unique_ptr<scheduler::GlobalScopeScheduler> m_globalScopeScheduler;
Sami 2017/04/10 16:58:10 Would it make sense to call this a WorkerScheduler
nhiroki 2017/04/11 10:47:54 Current WorkerScheduler is a per-worker-thread obj
Sami 2017/04/11 11:52:02 Ah, I see. So you can have multiple global scopes
nhiroki 2017/04/12 08:54:45 Yes!
+
+ // Default task runner of the underlying thread. Tasks posted to this task
+ // runner will run even after the global scope is closed. This must be used
+ // only for control tasks.
+ RefPtr<WebTaskRunner> m_threadControlTaskRunner;
kinuko 2017/04/10 06:30:06 It feels a little confusing to have this and worke
nhiroki 2017/04/11 10:47:54 For now, I cannot come up with an idea to clean it
+
// This lock protects |m_globalScope|, |m_requestedToTerminate|,
// |m_threadState|, |m_runningDebuggerTask| and |m_exitCode|.
Mutex m_threadStateMutex;

Powered by Google App Engine
This is Rietveld 408576698