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

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

Issue 2440063002: Worker: Make WorkerThread inherit WebThread::TaskObserver instead of WorkerMicrotaskRunner (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerThread.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/workers/WorkerThread.cpp
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
index f03dfb3508ee3a50d82574df321b0017c5fc9281..3a7332a8a4e21786ab42e66192e3a5c695a291c1 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
@@ -48,7 +48,6 @@
#include "platform/heap/ThreadState.h"
#include "platform/scheduler/CancellableTaskFactory.h"
#include "platform/weborigin/KURL.h"
-#include "public/platform/WebThread.h"
#include "wtf/Functional.h"
#include "wtf/Noncopyable.h"
#include "wtf/PtrUtil.h"
@@ -112,42 +111,6 @@ class WorkerThread::ForceTerminationTask final {
std::unique_ptr<CancellableTaskFactory> m_cancellableTaskFactory;
};
-class WorkerThread::WorkerMicrotaskRunner final
- : public WebThread::TaskObserver {
- public:
- explicit WorkerMicrotaskRunner(WorkerThread* workerThread)
- : m_workerThread(workerThread) {}
-
- void willProcessTask() override {
- // No tasks should get executed after we have closed.
- DCHECK(!m_workerThread->globalScope()->isClosing());
-
- if (m_workerThread->isForciblyTerminated()) {
- // The script has been terminated forcibly, which means we need to
- // ask objects in the thread to stop working as soon as possible.
- m_workerThread->prepareForShutdownOnWorkerThread();
- }
- }
-
- void didProcessTask() override {
- Microtask::performCheckpoint(m_workerThread->isolate());
- WorkerOrWorkletGlobalScope* globalScope = m_workerThread->globalScope();
- globalScope->scriptController()->getRejectedPromises()->processQueue();
- if (globalScope->isClosing()) {
- // |m_workerThread| will eventually be requested to terminate.
- m_workerThread->workerReportingProxy().didCloseWorkerGlobalScope();
-
- // Stop further worker tasks to run after this point.
- m_workerThread->prepareForShutdownOnWorkerThread();
- }
- }
-
- private:
- // Thread owns the microtask runner; reference remains
- // valid for the lifetime of this object.
- WorkerThread* m_workerThread;
-};
-
static Mutex& threadSetMutex() {
DEFINE_THREAD_SAFE_STATIC_LOCAL(Mutex, mutex, new Mutex);
return mutex;
@@ -237,6 +200,32 @@ void WorkerThread::terminateAndWaitForAllWorkers() {
thread->clearWorkerBackingThread();
}
+void WorkerThread::willProcessTask() {
+ DCHECK(isCurrentThread());
+
+ // No tasks should get executed after we have closed.
+ DCHECK(!globalScope()->isClosing());
+
+ if (isForciblyTerminated()) {
+ // The script has been terminated forcibly, which means we need to
+ // ask objects in the thread to stop working as soon as possible.
+ prepareForShutdownOnWorkerThread();
+ }
+}
+
+void WorkerThread::didProcessTask() {
+ DCHECK(isCurrentThread());
+ Microtask::performCheckpoint(isolate());
+ globalScope()->scriptController()->getRejectedPromises()->processQueue();
+ if (globalScope()->isClosing()) {
+ // This WorkerThread will eventually be requested to terminate.
+ workerReportingProxy().didCloseWorkerGlobalScope();
+
+ // Stop further worker tasks to run after this point.
+ prepareForShutdownOnWorkerThread();
+ }
+}
+
v8::Isolate* WorkerThread::isolate() {
return workerBackingThread().isolate();
}
@@ -489,9 +478,7 @@ void WorkerThread::initializeOnWorkerThread(
if (shouldAttachThreadDebugger())
V8PerIsolateData::from(isolate())->setThreadDebugger(
wrapUnique(new WorkerThreadDebugger(this, isolate())));
- m_microtaskRunner = wrapUnique(new WorkerMicrotaskRunner(this));
- workerBackingThread().backingThread().addTaskObserver(
- m_microtaskRunner.get());
+ workerBackingThread().backingThread().addTaskObserver(this);
// Optimize for memory usage instead of latency for the worker isolate.
isolate()->IsolateInBackgroundNotification();
@@ -560,8 +547,7 @@ void WorkerThread::prepareForShutdownOnWorkerThread() {
m_workerInspectorController.clear();
}
m_consoleMessageStorage.clear();
- workerBackingThread().backingThread().removeTaskObserver(
- m_microtaskRunner.get());
+ workerBackingThread().backingThread().removeTaskObserver(this);
}
void WorkerThread::performShutdownOnWorkerThread() {
@@ -580,8 +566,6 @@ void WorkerThread::performShutdownOnWorkerThread() {
workerBackingThread().shutdown();
// We must not touch workerBackingThread() from now on.
- m_microtaskRunner = nullptr;
-
// Notify the proxy that the WorkerOrWorkletGlobalScope has been disposed
// of. This can free this thread object, hence it must not be touched
// afterwards.
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerThread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698