1 // Copyright 2018 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 "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
6 
7 #include <utility>
8 
9 #include "base/feature_list.h"
10 #include "base/message_loop/message_pump_type.h"
11 #include "base/trace_event/trace_event.h"
12 #include "build/build_config.h"
13 #include "third_party/blink/public/common/input/web_input_event_attribution.h"
14 #include "third_party/blink/public/platform/scheduler/web_widget_scheduler.h"
15 #include "third_party/blink/renderer/platform/scheduler/common/features.h"
16 #include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h"
17 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
18 
19 namespace blink {
20 namespace scheduler {
21 
22 WebThreadScheduler::~WebThreadScheduler() = default;
23 
24 // static
25 std::unique_ptr<WebThreadScheduler>
CreateMainThreadScheduler(std::unique_ptr<base::MessagePump> message_pump,base::Optional<base::Time> initial_virtual_time)26 WebThreadScheduler::CreateMainThreadScheduler(
27     std::unique_ptr<base::MessagePump> message_pump,
28     base::Optional<base::Time> initial_virtual_time) {
29   auto settings =
30       base::sequence_manager::SequenceManager::Settings::Builder()
31           .SetMessagePumpType(base::MessagePumpType::DEFAULT)
32           .SetRandomisedSamplingEnabled(true)
33           .SetAddQueueTimeToTasks(true)
34           .Build();
35   auto sequence_manager =
36       message_pump
37           ? base::sequence_manager::
38                 CreateSequenceManagerOnCurrentThreadWithPump(
39                     std::move(message_pump), std::move(settings))
40           : base::sequence_manager::CreateSequenceManagerOnCurrentThread(
41                 std::move(settings));
42   std::unique_ptr<MainThreadSchedulerImpl> scheduler(
43       new MainThreadSchedulerImpl(std::move(sequence_manager),
44                                   initial_virtual_time));
45   return std::move(scheduler);
46 }
47 
48 // static
InputEventStateToString(InputEventState input_event_state)49 const char* WebThreadScheduler::InputEventStateToString(
50     InputEventState input_event_state) {
51   switch (input_event_state) {
52     case InputEventState::EVENT_CONSUMED_BY_COMPOSITOR:
53       return "event_consumed_by_compositor";
54     case InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD:
55       return "event_forwarded_to_main_thread";
56     default:
57       NOTREACHED();
58       return nullptr;
59   }
60 }
61 
62 // Stubs for main thread only virtual functions.
63 scoped_refptr<base::SingleThreadTaskRunner>
DefaultTaskRunner()64 WebThreadScheduler::DefaultTaskRunner() {
65   NOTREACHED();
66   return nullptr;
67 }
68 
69 scoped_refptr<base::SingleThreadTaskRunner>
CompositorTaskRunner()70 WebThreadScheduler::CompositorTaskRunner() {
71   NOTREACHED();
72   return nullptr;
73 }
74 
75 scoped_refptr<base::SingleThreadTaskRunner>
DeprecatedDefaultTaskRunner()76 WebThreadScheduler::DeprecatedDefaultTaskRunner() {
77   NOTREACHED();
78   return nullptr;
79 }
80 
CreateMainThread()81 std::unique_ptr<Thread> WebThreadScheduler::CreateMainThread() {
82   NOTREACHED();
83   return nullptr;
84 }
85 
86 std::unique_ptr<WebWidgetScheduler>
CreateWidgetScheduler()87 WebThreadScheduler::CreateWidgetScheduler() {
88   NOTREACHED();
89   return nullptr;
90 }
91 
92 std::unique_ptr<WebRenderWidgetSchedulingState>
NewRenderWidgetSchedulingState()93 WebThreadScheduler::NewRenderWidgetSchedulingState() {
94   NOTREACHED();
95   return nullptr;
96 }
97 
BeginFrameNotExpectedSoon()98 void WebThreadScheduler::BeginFrameNotExpectedSoon() {
99   NOTREACHED();
100 }
101 
BeginMainFrameNotExpectedUntil(base::TimeTicks time)102 void WebThreadScheduler::BeginMainFrameNotExpectedUntil(base::TimeTicks time) {
103   NOTREACHED();
104 }
105 
WillBeginFrame(const viz::BeginFrameArgs & args)106 void WebThreadScheduler::WillBeginFrame(const viz::BeginFrameArgs& args) {
107   NOTREACHED();
108 }
109 
DidCommitFrameToCompositor()110 void WebThreadScheduler::DidCommitFrameToCompositor() {
111   NOTREACHED();
112 }
113 
DidHandleInputEventOnCompositorThread(const WebInputEvent & web_input_event,InputEventState event_state)114 void WebThreadScheduler::DidHandleInputEventOnCompositorThread(
115     const WebInputEvent& web_input_event,
116     InputEventState event_state) {
117   NOTREACHED();
118 }
119 
WillPostInputEventToMainThread(WebInputEvent::Type web_input_event_type,const WebInputEventAttribution & attribution)120 void WebThreadScheduler::WillPostInputEventToMainThread(
121     WebInputEvent::Type web_input_event_type,
122     const WebInputEventAttribution& attribution) {
123   NOTREACHED();
124 }
125 
WillHandleInputEventOnMainThread(WebInputEvent::Type web_input_event_type,const WebInputEventAttribution & attribution)126 void WebThreadScheduler::WillHandleInputEventOnMainThread(
127     WebInputEvent::Type web_input_event_type,
128     const WebInputEventAttribution& attribution) {
129   NOTREACHED();
130 }
131 
DidHandleInputEventOnMainThread(const WebInputEvent & web_input_event,WebInputEventResult result)132 void WebThreadScheduler::DidHandleInputEventOnMainThread(
133     const WebInputEvent& web_input_event,
134     WebInputEventResult result) {
135   NOTREACHED();
136 }
137 
DidAnimateForInputOnCompositorThread()138 void WebThreadScheduler::DidAnimateForInputOnCompositorThread() {
139   NOTREACHED();
140 }
141 
DidScheduleBeginMainFrame()142 void WebThreadScheduler::DidScheduleBeginMainFrame() {
143   NOTREACHED();
144 }
145 
DidRunBeginMainFrame()146 void WebThreadScheduler::DidRunBeginMainFrame() {
147   NOTREACHED();
148 }
149 
SetRendererHidden(bool hidden)150 void WebThreadScheduler::SetRendererHidden(bool hidden) {
151   NOTREACHED();
152 }
153 
SetRendererBackgrounded(bool backgrounded)154 void WebThreadScheduler::SetRendererBackgrounded(bool backgrounded) {
155   NOTREACHED();
156 }
157 
SetSchedulerKeepActive(bool keep_active)158 void WebThreadScheduler::SetSchedulerKeepActive(bool keep_active) {
159   NOTREACHED();
160 }
161 
162 #if defined(OS_ANDROID)
PauseTimersForAndroidWebView()163 void WebThreadScheduler::PauseTimersForAndroidWebView() {
164   NOTREACHED();
165 }
166 
ResumeTimersForAndroidWebView()167 void WebThreadScheduler::ResumeTimersForAndroidWebView() {
168   NOTREACHED();
169 }
170 #endif  // defined(OS_ANDROID)
171 
172 std::unique_ptr<WebThreadScheduler::RendererPauseHandle>
PauseRenderer()173 WebThreadScheduler::PauseRenderer() {
174   NOTREACHED();
175   return nullptr;
176 }
177 
IsHighPriorityWorkAnticipated()178 bool WebThreadScheduler::IsHighPriorityWorkAnticipated() {
179   NOTREACHED();
180   return false;
181 }
182 
SetTopLevelBlameContext(base::trace_event::BlameContext * blame_context)183 void WebThreadScheduler::SetTopLevelBlameContext(
184     base::trace_event::BlameContext* blame_context) {
185   NOTREACHED();
186 }
187 
SetRendererProcessType(WebRendererProcessType type)188 void WebThreadScheduler::SetRendererProcessType(WebRendererProcessType type) {
189   NOTREACHED();
190 }
191 
OnMainFrameRequestedForInput()192 void WebThreadScheduler::OnMainFrameRequestedForInput() {
193   NOTREACHED();
194 }
195 
196 }  // namespace scheduler
197 }  // namespace blink
198