1# Copyright 2017 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
5import("//testing/libfuzzer/fuzzer_test.gni")
6import("//third_party/blink/renderer/platform/platform.gni")
7import("//third_party/protobuf/proto_library.gni")
8
9blink_platform_sources("scheduler") {
10  configs += [ "//build/config/compiler:noshadowing" ]
11
12  sources = [
13    "common/cancelable_closure_holder.cc",
14    "common/cancelable_closure_holder.h",
15    "common/cooperative_scheduling_manager.cc",
16    "common/dummy_schedulers.cc",
17    "common/event_loop.cc",
18    "common/features.cc",
19    "common/features.h",
20    "common/frame_or_worker_scheduler.cc",
21    "common/idle_helper.cc",
22    "common/idle_helper.h",
23    "common/metrics_helper.cc",
24    "common/metrics_helper.h",
25    "common/pollable_thread_safe_flag.cc",
26    "common/pollable_thread_safe_flag.h",
27    "common/post_cancellable_task.cc",
28    "common/process_state.cc",
29    "common/process_state.h",
30    "common/scheduler_helper.cc",
31    "common/scheduler_helper.h",
32    "common/scheduling_lifecycle_state.cc",
33    "common/simple_thread_scheduler.cc",
34    "common/simple_thread_scheduler.h",
35    "common/single_thread_idle_task_runner.cc",
36    "common/single_thread_idle_task_runner.h",
37    "common/thread.cc",
38    "common/thread_cpu_throttler.cc",
39    "common/thread_load_tracker.cc",
40    "common/thread_load_tracker.h",
41    "common/thread_scheduler.cc",
42    "common/thread_scheduler_impl.h",
43    "common/thread_type.cc",
44    "common/throttling/budget_pool.cc",
45    "common/throttling/budget_pool.h",
46    "common/throttling/budget_pool_controller.h",
47    "common/throttling/cpu_time_budget_pool.cc",
48    "common/throttling/cpu_time_budget_pool.h",
49    "common/throttling/task_queue_throttler.cc",
50    "common/throttling/task_queue_throttler.h",
51    "common/throttling/throttled_time_domain.cc",
52    "common/throttling/throttled_time_domain.h",
53    "common/throttling/wake_up_budget_pool.cc",
54    "common/throttling/wake_up_budget_pool.h",
55    "common/tracing_helper.cc",
56    "common/tracing_helper.h",
57    "common/ukm_task_sampler.cc",
58    "common/ukm_task_sampler.h",
59    "common/unprioritized_resource_loading_task_runner_handle.cc",
60    "common/unprioritized_resource_loading_task_runner_handle.h",
61    "common/web_resource_loading_task_runner_handle.cc",
62    "common/web_thread_scheduler.cc",
63    "common/worker_pool.cc",
64    "main_thread/agent_group_scheduler_impl.cc",
65    "main_thread/agent_group_scheduler_impl.h",
66    "main_thread/agent_scheduling_strategy.cc",
67    "main_thread/agent_scheduling_strategy.h",
68    "main_thread/attribution_group.h",
69    "main_thread/auto_advancing_virtual_time_domain.cc",
70    "main_thread/auto_advancing_virtual_time_domain.h",
71    "main_thread/compositor_priority_experiments.cc",
72    "main_thread/compositor_priority_experiments.h",
73    "main_thread/deadline_task_runner.cc",
74    "main_thread/deadline_task_runner.h",
75    "main_thread/find_in_page_budget_pool_controller.cc",
76    "main_thread/find_in_page_budget_pool_controller.h",
77    "main_thread/frame_origin_type.cc",
78    "main_thread/frame_origin_type.h",
79    "main_thread/frame_scheduler_impl.cc",
80    "main_thread/frame_scheduler_impl.h",
81    "main_thread/frame_status.cc",
82    "main_thread/frame_task_queue_controller.cc",
83    "main_thread/frame_task_queue_controller.h",
84    "main_thread/idle_time_estimator.cc",
85    "main_thread/idle_time_estimator.h",
86    "main_thread/main_thread.cc",
87    "main_thread/main_thread.h",
88    "main_thread/main_thread_metrics_helper.cc",
89    "main_thread/main_thread_metrics_helper.h",
90    "main_thread/main_thread_scheduler_helper.cc",
91    "main_thread/main_thread_scheduler_helper.h",
92    "main_thread/main_thread_scheduler_impl.cc",
93    "main_thread/main_thread_scheduler_impl.h",
94    "main_thread/main_thread_task_queue.cc",
95    "main_thread/main_thread_task_queue.h",
96    "main_thread/memory_purge_manager.cc",
97    "main_thread/memory_purge_manager.h",
98    "main_thread/non_waking_time_domain.cc",
99    "main_thread/non_waking_time_domain.h",
100    "main_thread/page_scheduler_impl.cc",
101    "main_thread/page_scheduler_impl.h",
102    "main_thread/page_visibility_state.cc",
103    "main_thread/page_visibility_state.h",
104    "main_thread/pending_user_input.cc",
105    "main_thread/pending_user_input.h",
106    "main_thread/render_widget_signals.cc",
107    "main_thread/render_widget_signals.h",
108    "main_thread/resource_loading_task_runner_handle_impl.cc",
109    "main_thread/resource_loading_task_runner_handle_impl.h",
110    "main_thread/task_type_names.cc",
111    "main_thread/task_type_names.h",
112    "main_thread/use_case.h",
113    "main_thread/user_model.cc",
114    "main_thread/user_model.h",
115    "main_thread/web_render_widget_scheduling_state.cc",
116    "main_thread/web_scheduling_priority.cc",
117    "main_thread/web_scheduling_task_queue_impl.cc",
118    "main_thread/web_scheduling_task_queue_impl.h",
119    "main_thread/web_scoped_virtual_time_pauser.cc",
120    "main_thread/widget_scheduler.cc",
121    "main_thread/widget_scheduler.h",
122    "public/agent_group_scheduler.h",
123    "public/aggregated_metric_reporter.h",
124    "public/cooperative_scheduling_manager.h",
125    "public/dummy_schedulers.h",
126    "public/event_loop.h",
127    "public/frame_or_worker_scheduler.h",
128    "public/frame_scheduler.h",
129    "public/frame_status.h",
130    "public/page_lifecycle_state.h",
131    "public/page_scheduler.h",
132    "public/post_cancellable_task.h",
133    "public/post_cross_thread_task.h",
134    "public/rail_mode_observer.h",
135    "public/scheduling_lifecycle_state.h",
136    "public/scheduling_policy.h",
137    "public/thread.h",
138    "public/thread_cpu_throttler.h",
139    "public/thread_scheduler.h",
140    "public/thread_type.h",
141    "public/web_scheduling_priority.h",
142    "public/web_scheduling_task_queue.h",
143    "public/worker_pool.h",
144    "public/worker_scheduler.h",
145    "worker/compositor_metrics_helper.cc",
146    "worker/compositor_metrics_helper.h",
147    "worker/compositor_thread.cc",
148    "worker/compositor_thread.h",
149    "worker/compositor_thread_scheduler.cc",
150    "worker/compositor_thread_scheduler.h",
151    "worker/non_main_thread_scheduler_helper.cc",
152    "worker/non_main_thread_scheduler_helper.h",
153    "worker/non_main_thread_scheduler_impl.cc",
154    "worker/non_main_thread_scheduler_impl.h",
155    "worker/non_main_thread_task_queue.cc",
156    "worker/non_main_thread_task_queue.h",
157    "worker/worker_metrics_helper.cc",
158    "worker/worker_metrics_helper.h",
159    "worker/worker_scheduler.cc",
160    "worker/worker_scheduler_proxy.cc",
161    "worker/worker_scheduler_proxy.h",
162    "worker/worker_thread.cc",
163    "worker/worker_thread.h",
164    "worker/worker_thread_scheduler.cc",
165    "worker/worker_thread_scheduler.h",
166  ]
167
168  deps = [
169    "//base",
170    "//cc",
171    "//components/scheduling_metrics",
172    "//device/base/synchronization",
173    "//services/metrics/public/cpp:ukm_builders",
174    "//services/metrics/public/mojom",
175    "//third_party/blink/renderer/platform:make_platform_generated",
176    "//third_party/blink/renderer/platform/heap:heap",
177    "//third_party/blink/renderer/platform/instrumentation",
178    "//third_party/blink/renderer/platform/wtf",
179    "//v8",
180  ]
181
182  allow_circular_includes_from = [
183    "//third_party/blink/renderer/platform/heap:heap",
184    "//third_party/blink/renderer/platform/instrumentation",
185  ]
186}
187
188source_set("test_support") {
189  testonly = true
190
191  sources = [
192    "test/fake_frame_scheduler.h",
193    "test/fake_page_scheduler.h",
194    "test/fake_task_runner.cc",
195    "test/fake_task_runner.h",
196    "test/recording_task_time_observer.cc",
197    "test/recording_task_time_observer.h",
198    "test/renderer_scheduler_test_support.cc",
199    "test/web_fake_thread_scheduler.cc",
200    "test/web_fake_widget_scheduler.cc",
201    "test/web_fake_widget_scheduler.h",
202  ]
203
204  deps = [
205    "//base",
206    "//base/test:test_support",
207    "//mojo/public/cpp/bindings",
208    "//skia",
209    "//testing/gmock",
210    "//third_party/blink/public:test_headers",
211    "//third_party/blink/public/mojom:mojom_platform_blink_headers",
212    "//third_party/blink/renderer/platform:platform",
213  ]
214
215  configs += [ "//third_party/blink/renderer/platform:blink_platform_config" ]
216}
217
218source_set("unit_tests") {
219  testonly = true
220
221  sources = [
222    "common/cooperative_scheduling_manager_unittest.cc",
223    "common/idle_helper_unittest.cc",
224    "common/metrics_helper_unittest.cc",
225    "common/post_cancellable_task_unittest.cc",
226    "common/scheduler_helper_unittest.cc",
227    "common/thread_load_tracker_unittest.cc",
228    "common/throttling/budget_pool_unittest.cc",
229    "common/throttling/task_queue_throttler_unittest.cc",
230    "common/tracing_helper_unittest.cc",
231    "common/ukm_task_sampler_unittest.cc",
232    "common/worker_pool_unittest.cc",
233    "main_thread/agent_scheduling_strategy_unittest.cc",
234    "main_thread/auto_advancing_virtual_time_domain_unittest.cc",
235    "main_thread/deadline_task_runner_unittest.cc",
236    "main_thread/frame_scheduler_impl_unittest.cc",
237    "main_thread/frame_task_queue_controller_unittest.cc",
238    "main_thread/idle_time_estimator_unittest.cc",
239    "main_thread/main_thread_metrics_helper_unittest.cc",
240    "main_thread/main_thread_scheduler_impl_unittest.cc",
241    "main_thread/main_thread_unittest.cc",
242    "main_thread/memory_purge_manager_unittest.cc",
243    "main_thread/page_scheduler_impl_unittest.cc",
244    "main_thread/pending_user_input_unittest.cc",
245    "main_thread/render_widget_signals_unittest.cc",
246    "main_thread/user_model_unittest.cc",
247    "worker/worker_scheduler_proxy_unittest.cc",
248    "worker/worker_scheduler_unittest.cc",
249    "worker/worker_thread_scheduler_unittest.cc",
250    "worker/worker_thread_unittest.cc",
251  ]
252
253  deps = [
254    "//base",
255    "//base/test:test_support",
256    "//components/ukm:test_support",
257    "//testing/gmock",
258    "//testing/gtest",
259    "//third_party/blink/public:test_support",
260    "//third_party/googletest:gmock",
261  ]
262
263  configs += [ "//third_party/blink/renderer/platform:blink_platform_config" ]
264}
265
266source_set("scheduler_fuzzer_tests") {
267  testonly = true
268
269  sources = []
270  deps = [
271    "//base",
272    "//base/test:test_support",
273    "//testing/gmock",
274    "//testing/gtest",
275    "//third_party/blink/renderer/platform/scheduler:test_support",
276  ]
277
278  if (is_linux || is_chromeos) {
279    sources += [
280      "test/fuzzer/sequence_manager_fuzzer_processor.cc",
281      "test/fuzzer/sequence_manager_fuzzer_processor.h",
282      "test/fuzzer/sequence_manager_fuzzer_processor_unittest.cc",
283      "test/fuzzer/simple_thread_impl.cc",
284      "test/fuzzer/simple_thread_impl.h",
285      "test/fuzzer/task_queue_with_voters.h",
286      "test/fuzzer/thread_manager.cc",
287      "test/fuzzer/thread_manager.h",
288      "test/fuzzer/thread_pool_manager.cc",
289      "test/fuzzer/thread_pool_manager.h",
290    ]
291
292    deps += [
293      ":sequence_manager_test_description_proto",
294      "//third_party/blink/renderer/platform:platform",
295      "//third_party/libprotobuf-mutator",
296    ]
297  }
298
299  configs += [ "//third_party/blink/renderer/platform:blink_platform_config" ]
300}
301
302fuzzer_test("sequence_manager_fuzzer") {
303  sources = [
304    "test/fuzzer/sequence_manager_fuzzer.cc",
305    "test/fuzzer/sequence_manager_fuzzer_processor.cc",
306    "test/fuzzer/sequence_manager_fuzzer_processor.h",
307    "test/fuzzer/simple_thread_impl.cc",
308    "test/fuzzer/simple_thread_impl.h",
309    "test/fuzzer/task_queue_with_voters.h",
310    "test/fuzzer/thread_manager.cc",
311    "test/fuzzer/thread_manager.h",
312    "test/fuzzer/thread_pool_manager.cc",
313    "test/fuzzer/thread_pool_manager.h",
314  ]
315
316  deps = [
317    ":sequence_manager_test_description_proto",
318    "//base/test:test_support",
319    "//third_party/blink/renderer/platform:blink_fuzzer_test_support",
320    "//third_party/blink/renderer/platform:platform",
321    "//third_party/blink/renderer/platform:test_support",
322    "//third_party/libprotobuf-mutator",
323  ]
324}
325
326proto_library("sequence_manager_test_description_proto") {
327  sources = [ "test/fuzzer/proto/sequence_manager_test_description.proto" ]
328}
329