OLD | NEW |
---|---|
(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 "content/renderer/scheduler/renderer_scheduler.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "base/command_line.h" | |
9 #include "base/message_loop/message_loop_proxy.h" | |
10 #include "content/public/common/content_switches.h" | |
11 #include "content/renderer/scheduler/renderer_scheduler_impl.h" | |
12 | |
13 namespace content { | |
14 | |
15 namespace { | |
16 | |
17 class NullIdleTaskRunner : public SingleThreadIdleTaskRunner { | |
18 public: | |
19 NullIdleTaskRunner(scoped_refptr<base::SingleThreadTaskRunner> task_runner); | |
20 void PostIdleTask(const tracked_objects::Location& from_here, | |
21 const IdleTask& idle_task) override; | |
22 | |
23 protected: | |
24 virtual ~NullIdleTaskRunner(); | |
25 }; | |
26 | |
27 class NullRendererScheduler : public RendererScheduler { | |
28 public: | |
29 NullRendererScheduler(); | |
30 virtual ~NullRendererScheduler(); | |
31 | |
32 scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; | |
33 scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; | |
34 scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; | |
35 | |
36 void WillBeginFrame(const cc::BeginFrameArgs& args) override; | |
37 void DidCommitFrameToCompositor() override; | |
38 void DidReceiveInputEvent() override; | |
39 bool ShouldYieldForHighPriorityWork() override; | |
40 | |
41 private: | |
42 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | |
43 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; | |
44 | |
45 DISALLOW_COPY_AND_ASSIGN(NullRendererScheduler); | |
46 }; | |
47 | |
48 NullIdleTaskRunner::NullIdleTaskRunner( | |
49 scoped_refptr<base::SingleThreadTaskRunner> task_runner) | |
50 : SingleThreadIdleTaskRunner(task_runner, | |
51 base::WeakPtr<IdleTaskDeadlineSupplier>()) { | |
52 } | |
53 | |
54 NullIdleTaskRunner::~NullIdleTaskRunner() { | |
55 } | |
56 | |
57 void NullIdleTaskRunner::PostIdleTask( | |
58 const tracked_objects::Location& from_here, | |
59 const IdleTask& idle_task) { | |
60 } | |
61 | |
62 NullRendererScheduler::NullRendererScheduler() | |
63 : task_runner_(base::MessageLoopProxy::current()), | |
64 idle_task_runner_(new NullIdleTaskRunner(task_runner_)) { | |
65 } | |
66 | |
67 NullRendererScheduler::~NullRendererScheduler() { | |
68 } | |
69 | |
70 scoped_refptr<base::SingleThreadTaskRunner> | |
71 NullRendererScheduler::DefaultTaskRunner() { | |
72 return task_runner_; | |
73 } | |
74 | |
75 scoped_refptr<base::SingleThreadTaskRunner> | |
76 NullRendererScheduler::CompositorTaskRunner() { | |
77 return task_runner_; | |
78 } | |
79 | |
80 scoped_refptr<SingleThreadIdleTaskRunner> | |
81 NullRendererScheduler::IdleTaskRunner() { | |
82 return idle_task_runner_; | |
83 } | |
84 | |
85 void NullRendererScheduler::WillBeginFrame(const cc::BeginFrameArgs& args) { | |
86 } | |
87 | |
88 void NullRendererScheduler::DidCommitFrameToCompositor() { | |
89 } | |
90 | |
91 void NullRendererScheduler::DidReceiveInputEvent() { | |
92 } | |
93 | |
94 bool NullRendererScheduler::ShouldYieldForHighPriorityWork() { | |
95 return false; | |
96 } | |
97 | |
98 } // namespace | |
99 | |
100 RendererScheduler::RendererScheduler() { | |
101 } | |
102 | |
103 RendererScheduler::~RendererScheduler() { | |
104 } | |
105 | |
106 // static | |
107 scoped_ptr<RendererScheduler> RendererScheduler::Create() { | |
108 CommandLine* command_line = CommandLine::ForCurrentProcess(); | |
109 if (command_line->HasSwitch(switches::kDisableBlinkScheduler)) { | |
Sami
2014/10/27 12:02:38
Could you hardcode this to use the null scheduler
rmcilroy
2014/10/27 16:25:01
Done.
| |
110 return make_scoped_ptr(new NullRendererScheduler()); | |
111 } else { | |
112 return make_scoped_ptr(new RendererSchedulerImpl()); | |
113 } | |
114 } | |
115 | |
116 } // namespace content | |
OLD | NEW |