OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_CHILD_WEBTHREAD_IMPL_H_ | 5 #ifndef CONTENT_CHILD_WEBTHREAD_IMPL_H_ |
6 #define CONTENT_CHILD_WEBTHREAD_IMPL_H_ | 6 #define CONTENT_CHILD_WEBTHREAD_IMPL_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
12 #include "content/common/content_export.h" | 12 #include "content/common/content_export.h" |
13 #include "third_party/WebKit/public/platform/WebThread.h" | 13 #include "third_party/WebKit/public/platform/WebThread.h" |
14 | 14 |
15 namespace blink { | 15 namespace blink { |
16 class WebTraceLocation; | 16 class WebTraceLocation; |
17 } | 17 } |
18 | 18 |
19 namespace content { | 19 namespace content { |
20 class SingleThreadIdleTaskRunner; | |
20 | 21 |
21 class CONTENT_EXPORT WebThreadBase : public blink::WebThread { | 22 class CONTENT_EXPORT WebThreadBase : public blink::WebThread { |
22 public: | 23 public: |
23 virtual ~WebThreadBase(); | 24 virtual ~WebThreadBase(); |
24 | 25 |
25 // blink::WebThread implementation. | 26 // blink::WebThread implementation. |
26 virtual bool isCurrentThread() const; | 27 virtual bool isCurrentThread() const; |
27 virtual blink::PlatformThreadId threadId() const = 0; | 28 virtual blink::PlatformThreadId threadId() const = 0; |
28 | 29 |
29 virtual void postTask(const blink::WebTraceLocation& location, Task* task); | 30 virtual void postTask(const blink::WebTraceLocation& location, Task* task); |
30 virtual void postDelayedTask(const blink::WebTraceLocation& location, | 31 virtual void postDelayedTask(const blink::WebTraceLocation& location, |
31 Task* task, | 32 Task* task, |
32 long long delay_ms); | 33 long long delay_ms); |
34 virtual void postIdleTask(const blink::WebTraceLocation& location, | |
35 IdleTask* idle_task); | |
36 virtual void postIdleTaskAfterWakeup(const blink::WebTraceLocation& location, | |
37 IdleTask* idle_task); | |
kinuko
2015/04/02 13:03:08
nit: indent
alex clarke (OOO till 29th)
2015/04/02 15:19:28
Done.
| |
33 | 38 |
34 virtual void enterRunLoop(); | 39 virtual void enterRunLoop(); |
35 virtual void exitRunLoop(); | 40 virtual void exitRunLoop(); |
36 | 41 |
37 virtual void addTaskObserver(TaskObserver* observer); | 42 virtual void addTaskObserver(TaskObserver* observer); |
38 virtual void removeTaskObserver(TaskObserver* observer); | 43 virtual void removeTaskObserver(TaskObserver* observer); |
39 | 44 |
40 // Returns the base::Bind-compatible task runner for posting tasks to this | 45 // Returns the base::Bind-compatible task runner for posting tasks to this |
41 // thread. Can be called from any thread. | 46 // thread. Can be called from any thread. |
42 virtual base::SingleThreadTaskRunner* TaskRunner() const = 0; | 47 virtual base::SingleThreadTaskRunner* TaskRunner() const = 0; |
43 | 48 |
49 // Returns the base::Bind-compatible task runner for posting idle tasks to | |
50 // this thread. Can be called from any thread. | |
51 virtual SingleThreadIdleTaskRunner* IdleTaskRunner() const = 0; | |
52 | |
44 protected: | 53 protected: |
45 class TaskObserverAdapter; | 54 class TaskObserverAdapter; |
46 | 55 |
47 WebThreadBase(); | 56 WebThreadBase(); |
48 | 57 |
49 // Returns the underlying MessageLoop for this thread. Only used for entering | 58 // Returns the underlying MessageLoop for this thread. Only used for entering |
50 // and exiting a nested run loop. Only called on the thread that the | 59 // and exiting a nested run loop. Only called on the thread that the |
51 // WebThread belongs to. | 60 // WebThread belongs to. |
52 virtual base::MessageLoop* MessageLoop() const = 0; | 61 virtual base::MessageLoop* MessageLoop() const = 0; |
53 | 62 |
54 virtual void AddTaskObserverInternal( | 63 virtual void AddTaskObserverInternal( |
55 base::MessageLoop::TaskObserver* observer); | 64 base::MessageLoop::TaskObserver* observer); |
56 virtual void RemoveTaskObserverInternal( | 65 virtual void RemoveTaskObserverInternal( |
57 base::MessageLoop::TaskObserver* observer); | 66 base::MessageLoop::TaskObserver* observer); |
58 | 67 |
59 static void RunWebThreadTask(scoped_ptr<blink::WebThread::Task> task); | 68 static void RunWebThreadTask(scoped_ptr<blink::WebThread::Task> task); |
69 static void RunWebThreadIdleTask( | |
70 scoped_ptr<blink::WebThread::IdleTask> idle_task, | |
71 base::TimeTicks deadline); | |
60 | 72 |
61 private: | 73 private: |
62 typedef std::map<TaskObserver*, TaskObserverAdapter*> TaskObserverMap; | 74 typedef std::map<TaskObserver*, TaskObserverAdapter*> TaskObserverMap; |
63 TaskObserverMap task_observer_map_; | 75 TaskObserverMap task_observer_map_; |
64 }; | 76 }; |
65 | 77 |
66 class CONTENT_EXPORT WebThreadImpl : public WebThreadBase { | |
67 public: | |
68 explicit WebThreadImpl(const char* name); | |
69 virtual ~WebThreadImpl(); | |
70 | |
71 // blink::WebThread implementation. | |
72 blink::PlatformThreadId threadId() const override; | |
73 | |
74 // WebThreadBase implementation. | |
75 base::SingleThreadTaskRunner* TaskRunner() const override; | |
76 | |
77 private: | |
78 base::MessageLoop* MessageLoop() const override; | |
79 | |
80 scoped_ptr<base::Thread> thread_; | |
81 }; | |
82 | |
83 } // namespace content | 78 } // namespace content |
84 | 79 |
85 #endif // CONTENT_CHILD_WEBTHREAD_IMPL_H_ | 80 #endif // CONTENT_CHILD_WEBTHREAD_IMPL_H_ |
OLD | NEW |