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

Unified Diff: third_party/WebKit/Source/core/dom/TaskRunnerHelper.h

Issue 2716853002: (WIP) Worker: Merge ParentFrameTaskRunners into TaskRunnerHelper
Patch Set: WIP Created 3 years, 10 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 | « no previous file | third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/dom/TaskRunnerHelper.h
diff --git a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.h b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.h
index 4a08df5ab2851b49f8b26f5ece82f310abd86af6..c7cd6cb6a01fa154dc9dc52b817a31ef16c12fff 100644
--- a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.h
+++ b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.h
@@ -5,9 +5,14 @@
#ifndef TaskRunnerHelper_h
#define TaskRunnerHelper_h
+#include <memory>
#include "core/CoreExport.h"
+#include "core/dom/ContextLifecycleObserver.h"
+#include "platform/WebTaskRunner.h"
+#include "platform/heap/Handle.h"
#include "wtf/Allocator.h"
#include "wtf/HashTraits.h"
+#include "wtf/PtrUtil.h"
namespace blink {
@@ -15,7 +20,8 @@ class Document;
class ExecutionContext;
class LocalFrame;
class ScriptState;
-class WebTaskRunner;
+class WorkerOrWorkletGlobalScope;
+class WorkerThread;
enum class TaskType : unsigned {
// Speced tasks and related internal tasks should be posted to one of
@@ -121,6 +127,9 @@ enum class TaskType : unsigned {
// Tasks that must not be throttled should be posted here, but the usage
// should be very limited.
Unthrottled,
+
+ // Add a new type before this.
+ NumberOfTaskTypes,
};
// HashTraits for TaskType.
@@ -135,19 +144,61 @@ struct TaskTypeTraits : WTF::GenericHashTraits<TaskType> {
}
};
+class CORE_EXPORT FrameTaskRunnersHolder final
+ : public GarbageCollectedFinalized<FrameTaskRunnersHolder>,
+ public ContextLifecycleObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(FrameTaskRunnersHolder);
+ WTF_MAKE_NONCOPYABLE(FrameTaskRunnersHolder);
+
+ public:
+ static FrameTaskRunnersHolder* create(LocalFrame* frame) {
+ return new FrameTaskRunnersHolder(frame);
+ }
+
+ // Might return nullptr for unsupported task types.
+ RefPtr<WebTaskRunner> get(TaskType);
+
+ DECLARE_VIRTUAL_TRACE();
+
+ private:
+ using TaskRunnerHashMap = HashMap<TaskType,
+ RefPtr<WebTaskRunner>,
+ WTF::IntHash<TaskType>,
+ TaskTypeTraits>;
+
+ // LocalFrame could be nullptr if the worker is not associated with a
+ // particular local frame.
+ explicit FrameTaskRunnersHolder(LocalFrame*);
+
+ void contextDestroyed(ExecutionContext*) override;
+
+ Mutex m_taskRunnersMutex;
+ TaskRunnerHashMap m_taskRunners;
+};
+
// A set of helper functions to get a WebTaskRunner for TaskType and a context
// object. The posted tasks are guaranteed to run in a sequence if they have the
// same TaskType and the context objects belong to the same frame.
-class CORE_EXPORT TaskRunnerHelper final {
- STATIC_ONLY(TaskRunnerHelper);
+class CORE_EXPORT FrameTaskRunnerHelper {
+ STATIC_ONLY(FrameTaskRunnerHelper);
public:
+ static void setTaskRunners(ExecutionContext*, FrameTaskRunnersHolder*);
+
+ // Used for posting a task from the main thread.
static RefPtr<WebTaskRunner> get(TaskType, LocalFrame*);
static RefPtr<WebTaskRunner> get(TaskType, Document*);
static RefPtr<WebTaskRunner> get(TaskType, ExecutionContext*);
static RefPtr<WebTaskRunner> get(TaskType, ScriptState*);
+
+ // Used for posting a task from a worker thread.
+ static RefPtr<WebTaskRunner> get(TaskType, WorkerThread*);
+ static RefPtr<WebTaskRunner> get(TaskType, WorkerOrWorkletGlobalScope*);
};
+// TODO(nhiroki): Remove this workaround.
+using TaskRunnerHelper = FrameTaskRunnerHelper;
+
} // namespace blink
#endif
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698