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