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

Side by Side Diff: content/renderer/scheduler/task_queue_manager.h

Issue 637303003: content: Add task queue manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First stab at blink integration. Created 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_SCHEDULER_TASK_QUEUE_MANAGER_H_
6 #define CONTENT_RENDERER_SCHEDULER_TASK_QUEUE_MANAGER_H_
7
8 #include "base/atomic_sequence_num.h"
9 #include "base/debug/task_annotator.h"
10 #include "base/macros.h"
11 #include "base/memory/scoped_vector.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/pending_task.h"
14 #include "base/single_thread_task_runner.h"
15 #include "base/synchronization/lock.h"
16 #include "base/threading/thread_checker.h"
17
18 namespace content {
19 class TaskQueueScheduler;
20
21 class TaskQueueManager {
22 public:
23 enum QueueId {
alexclarke 2014/10/13 10:06:23 Needs a comment explaining it should be kept in sy
Sami 2014/10/13 18:16:21 Right, I think I'll move this to RendererBlinkPlat
24 kDefaultTaskQueue,
25 kCompositorTaskQueue,
26 // Must be the last entry.
27 kTaskQueueCount,
28 };
29
30 explicit TaskQueueManager(
31 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner);
32 ~TaskQueueManager();
33
34 scoped_refptr<base::SingleThreadTaskRunner> TaskRunnerForQueue(QueueId queue);
35
36 void SetScheduler(scoped_ptr<TaskQueueScheduler> scheduler);
37
38 private:
39 class TaskRunner : public base::SingleThreadTaskRunner {
40 public:
41 TaskRunner(TaskQueueManager* task_queue_manager, QueueId queue);
42
43 // base::SingleThreadTaskRunner implementation.
44 virtual bool RunsTasksOnCurrentThread() const override;
45 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
46 const base::Closure& task,
47 base::TimeDelta delay) override;
48 virtual bool PostNonNestableDelayedTask(
49 const tracked_objects::Location& from_here,
50 const base::Closure& task,
51 base::TimeDelta delay) override;
52
53 private:
54 virtual ~TaskRunner();
55
56 TaskQueueManager* task_queue_manager_;
57 const QueueId queue_;
58 };
59 friend class TaskRunner;
60
61 void ScheduleWork();
62 void DoWork();
63 bool ReloadWorkQueues();
64 bool ReloadWorkQueue(QueueId queue);
65 void RunTaskFromWorkQueue(QueueId queue);
66
67 bool RunsTasksOnCurrentThread() const;
68 bool PostDelayedTask(QueueId queue,
69 const tracked_objects::Location& from_here,
70 const base::Closure& task,
71 base::TimeDelta delay);
72 bool PostNonNestableDelayedTask(QueueId queue,
73 const tracked_objects::Location& from_here,
74 const base::Closure& task,
75 base::TimeDelta delay);
76
77 void EnqueueTask(QueueId queue, base::PendingTask pending_task);
78
79 struct TaskQueue {
80 TaskQueue(QueueId id);
81 ~TaskQueue();
82
83 const QueueId id;
84 scoped_refptr<TaskRunner> task_runner;
85
86 base::Lock incoming_queue_lock;
87 base::TaskQueue incoming_queue;
88
89 base::TaskQueue work_queue;
90 };
91
92 ScopedVector<TaskQueue> queues_;
93 base::AtomicSequenceNumber task_sequence_num_;
94 base::debug::TaskAnnotator task_annotator_;
95
96 base::ThreadChecker main_thread_checker_;
97 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
98 scoped_ptr<TaskQueueScheduler> scheduler_;
99
100 base::WeakPtrFactory<TaskQueueManager> weak_factory_;
101
102 DISALLOW_COPY_AND_ASSIGN(TaskQueueManager);
103 };
104
105 } // namespace content
106
107 #endif // CONTENT_RENDERER_SCHEDULER_TASK_QUEUE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698