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

Side by Side Diff: Source/platform/scheduler/Scheduler.cpp

Issue 364873002: Introduce a basic Blink Scheduler (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Review feedback. Created 6 years, 5 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 | Annotate | Revision Log
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 #include "config.h"
6 #include "platform/scheduler/Scheduler.h"
7
8 #include "platform/Task.h"
9 #include "platform/TraceEvent.h"
10 #include "public/platform/Platform.h"
11
12 namespace WebCore {
13
14 namespace {
15
16 class MainThreadTaskAdapter : public blink::WebThread::Task {
17 public:
18 explicit MainThreadTaskAdapter(const Scheduler::Task& task)
19 : m_task(task)
20 {
21 }
22
23 // WebThread::Task implementation.
24 virtual void run() OVERRIDE
25 {
26 TRACE_EVENT0("blink", "MainThreadTaskAdapter::run");
27 m_task();
28 }
29
30 private:
31 Scheduler::Task m_task;
32 };
33
34 }
35
36 Scheduler* Scheduler::s_sharedScheduler = nullptr;
37
38 void Scheduler::initializeOnMainThread()
39 {
40 s_sharedScheduler = new Scheduler();
41 }
42
43 void Scheduler::shutdown()
44 {
45 delete s_sharedScheduler;
46 s_sharedScheduler = nullptr;
47 }
48
49 Scheduler* Scheduler::shared()
50 {
51 return s_sharedScheduler;
52 }
53
54 Scheduler::Scheduler()
55 : m_mainThread(blink::Platform::current()->currentThread())
56 , m_sharedTimerFunction(nullptr)
57 {
58 }
59
60 Scheduler::~Scheduler()
61 {
62 }
63
64 void Scheduler::scheduleTask(const Task& task)
65 {
66 m_mainThread->postTask(new MainThreadTaskAdapter(task));
67 }
68
69 void Scheduler::postTask(const Task& task)
70 {
71 scheduleTask(task);
72 }
73
74 void Scheduler::postInputTask(const Task& task)
75 {
76 scheduleTask(task);
77 }
78
79 void Scheduler::postCompositorTask(const Task& task)
80 {
81 scheduleTask(task);
82 }
83
84 void Scheduler::tickSharedTimer()
85 {
86 TRACE_EVENT0("blink", "Scheduler::tickSharedTimer");
87 m_sharedTimerFunction();
88 }
89
90 void Scheduler::sharedTimerAdapter()
91 {
92 shared()->tickSharedTimer();
93 }
94
95 void Scheduler::setSharedTimerFiredFunction(void (*function)())
96 {
97 m_sharedTimerFunction = function;
98 blink::Platform::current()->setSharedTimerFiredFunction(function ? &Schedule r::sharedTimerAdapter : nullptr);
99 }
100
101 void Scheduler::setSharedTimerFireInterval(double interval)
102 {
103 blink::Platform::current()->setSharedTimerFireInterval(interval);
104 }
105
106 void Scheduler::stopSharedTimer()
107 {
108 blink::Platform::current()->stopSharedTimer();
109 }
110
111 bool Scheduler::shouldYieldForHighPriorityWork()
112 {
113 return false;
114 }
115
116 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698