1 # Copyright 2014 The Chromium Authors
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 import("//build/config/chromeos/ui_mode.gni")
6 import("//build/config/cronet/config.gni")
7 import("//build/config/features.gni")
8 import("//testing/test.gni")
11 import("//build/config/android/rules.gni")
12 import("//third_party/jni_zero/jni_zero.gni")
15 # Dependency for histogram manager users: cronet and ios/webview
16 source_set("library_support") {
18 "histogram_encoder.h",
19 "library_support/histogram_manager.h",
22 "histogram_encoder.cc",
23 "library_support/histogram_manager.cc",
28 "//third_party/metrics_proto",
32 if (!is_cronet_build && is_android) {
33 generate_jni("jni_headers") {
36 "android/java/src/org/chromium/components/metrics/LowEntropySource.java",
40 java_cpp_features("java_features_srcjar") {
41 # External code should depend on ":foo_java" instead.
43 sources = [ "//components/metrics/metrics_features.cc" ]
45 "//components/metrics/android/java_templates/MetricsFeatures.java.tmpl"
48 java_cpp_strings("java_switches_srcjar") {
49 # External code should depend on ":metrics_java" instead.
51 sources = [ "//components/metrics/metrics_switches.cc" ]
53 "//components/metrics/android/java_templates/MetricsSwitches.java.tmpl"
56 java_cpp_enum("java_enum_srcjar") {
57 # External code should depend on ":metrics_java" instead.
59 sources = [ "stability_metrics_helper.h" ]
62 android_library("metrics_java") {
63 # Right now, this only includes the Java switches. But if we need more Java
64 # files, they should be added here as necessary.
67 ":java_features_srcjar",
68 ":java_switches_srcjar",
71 "android/java/src/org/chromium/components/metrics/LowEntropySource.java",
75 "//third_party/androidx:androidx_annotation_annotation_java",
76 "//third_party/jni_zero:jni_zero_java",
81 # Used by the Chrome installer, which doesn't need the whole metrics library.
82 source_set("client_info") {
89 # Used by the Chrome installer, which doesn't need the whole metrics library.
90 source_set("metrics_pref_names") {
92 "metrics_pref_names.cc",
93 "metrics_pref_names.h",
97 if (!is_cronet_build || is_ios) {
98 static_library("metrics") {
100 "android_metrics_helper.cc",
101 "android_metrics_helper.h",
102 "call_stack_profile_metrics_provider.cc",
103 "call_stack_profile_metrics_provider.h",
104 "clean_exit_beacon.cc",
105 "clean_exit_beacon.h",
106 "cloned_install_detector.cc",
107 "cloned_install_detector.h",
108 "cpu_metrics_provider.cc",
109 "cpu_metrics_provider.h",
112 "data_use_tracker.cc",
113 "data_use_tracker.h",
114 "date_changed_helper.cc",
115 "date_changed_helper.h",
116 "delegating_provider.cc",
117 "delegating_provider.h",
118 "drive_metrics_provider.cc",
119 "drive_metrics_provider.h",
120 "enabled_state_provider.cc",
121 "enabled_state_provider.h",
124 "entropy_state_provider.cc",
125 "entropy_state_provider.h",
126 "environment_recorder.cc",
127 "environment_recorder.h",
128 "expired_histogram_util.cc",
129 "expired_histogram_util.h",
130 "expired_histograms_checker.cc",
131 "expired_histograms_checker.h",
132 "field_trials_provider.cc",
133 "field_trials_provider.h",
134 "file_metrics_provider.cc",
135 "file_metrics_provider.h",
139 "machine_id_provider.h",
140 "metrics_data_validation.cc",
141 "metrics_data_validation.h",
142 "metrics_features.cc",
143 "metrics_features.h",
146 "metrics_log_store.cc",
147 "metrics_log_store.h",
148 "metrics_log_uploader.h",
149 "metrics_logs_event_manager.cc",
150 "metrics_logs_event_manager.h",
151 "metrics_provider.cc",
152 "metrics_provider.h",
153 "metrics_reporting_default_state.cc",
154 "metrics_reporting_default_state.h",
155 "metrics_reporting_service.cc",
156 "metrics_reporting_service.h",
157 "metrics_rotation_scheduler.cc",
158 "metrics_rotation_scheduler.h",
159 "metrics_scheduler.cc",
160 "metrics_scheduler.h",
161 "metrics_service.cc",
163 "metrics_service_accessor.cc",
164 "metrics_service_accessor.h",
165 "metrics_service_client.cc",
166 "metrics_service_client.h",
167 "metrics_service_observer.cc",
168 "metrics_service_observer.h",
169 "metrics_shutdown.cc",
170 "metrics_shutdown.h",
171 "metrics_state_manager.cc",
172 "metrics_state_manager.h",
173 "metrics_switches.cc",
174 "metrics_switches.h",
175 "metrics_upload_scheduler.cc",
176 "metrics_upload_scheduler.h",
177 "persistent_histograms.cc",
178 "persistent_histograms.h",
179 "persistent_synthetic_trial_observer.cc",
180 "persistent_synthetic_trial_observer.h",
181 "persistent_system_profile.cc",
182 "persistent_system_profile.h",
183 "reporting_service.cc",
184 "reporting_service.h",
185 "sampling_metrics_provider.cc",
186 "sampling_metrics_provider.h",
187 "stability_metrics_helper.cc",
188 "stability_metrics_helper.h",
189 "stability_metrics_provider.cc",
190 "stability_metrics_provider.h",
191 "system_memory_stats_recorder.h",
192 "ukm_demographic_metrics_provider.h",
193 "unsent_log_store.cc",
194 "unsent_log_store.h",
195 "unsent_log_store_metrics.cc",
196 "unsent_log_store_metrics.h",
197 "unsent_log_store_metrics_impl.cc",
198 "unsent_log_store_metrics_impl.h",
204 if (is_chrome_branded) {
205 sources += [ "internal/url_constants.cc" ]
207 sources += [ "url_constants.cc" ]
211 "//components/metrics:client_info",
212 "//components/metrics:metrics_pref_names",
213 "//third_party/metrics_proto",
214 "//third_party/zlib/google:compression_utils",
220 "//base:base_static",
222 "//build:branding_buildflags",
223 "//build:chromeos_buildflags",
224 "//components/flags_ui:switches",
225 "//components/network_time",
226 "//components/prefs",
227 "//components/variations",
228 "//components/variations/field_trial_config",
229 "//components/version_info:version_info",
231 "//extensions/buildflags",
238 "android_metrics_provider.cc",
239 "android_metrics_provider.h",
240 "drive_metrics_provider_android.cc",
241 "gms_metrics_provider.cc",
242 "gms_metrics_provider.h",
244 deps += [ ":jni_headers" ]
246 deps += [ "//components/keep_alive_registry" ]
251 "clean_exit_beacon_ios.mm",
252 "drive_metrics_provider_ios.mm",
256 if (is_linux || is_chromeos || is_tizen) {
258 "drive_metrics_provider_linux.cc",
259 "psi_memory_parser.h",
260 "psi_memory_parser_linux.cc",
261 "system_memory_stats_recorder_linux.cc",
266 sources += [ "drive_metrics_provider_mac.mm" ]
268 # The below are all needed for drive_metrics_provider_mac.mm.
269 "CoreFoundation.framework",
270 "DiskArbitration.framework",
271 "Foundation.framework",
278 "drive_metrics_provider_win.cc",
279 "machine_id_provider_win.cc",
280 "system_session_analyzer/system_session_analyzer_win.cc",
281 "system_session_analyzer/system_session_analyzer_win.h",
283 libs = [ "wevtapi.lib" ]
285 sources += [ "machine_id_provider_nonwin.cc" ]
289 sources += [ "drive_metrics_provider_fuchsia.cc" ]
292 if (is_win || is_linux || is_tizen) {
296 "motherboard_metrics_provider.cc",
297 "motherboard_metrics_provider.h",
302 static_library("test_support") {
305 "test/test_enabled_state_provider.cc",
306 "test/test_enabled_state_provider.h",
307 "test/test_metrics_log_uploader.cc",
308 "test/test_metrics_log_uploader.h",
309 "test/test_metrics_provider.cc",
310 "test/test_metrics_provider.h",
311 "test/test_metrics_service_client.cc",
312 "test/test_metrics_service_client.h",
315 public_deps = [ ":metrics" ]
320 if (!is_cronet_build) {
321 # The component metrics provider is a separate target because it depends upon
322 # (the large) component_updater code, and is not needed for some entities that
323 # depend on :metrics.
324 static_library("component_metrics") {
326 "component_metrics_provider.cc",
327 "component_metrics_provider.h",
330 public_deps = [ "//third_party/metrics_proto" ]
335 "//components/component_updater",
340 static_library("content") {
342 # ChromeOS accessibility metrics provider is in chromeos_metrics_provider.
343 "content/accessibility_metrics_provider.cc",
344 "content/accessibility_metrics_provider.h",
345 "content/content_stability_metrics_provider.cc",
346 "content/content_stability_metrics_provider.h",
347 "content/extensions_helper.h",
348 "content/gpu_metrics_provider.cc",
349 "content/gpu_metrics_provider.h",
350 "content/rendering_perf_metrics_provider.cc",
351 "content/rendering_perf_metrics_provider.h",
352 "content/subprocess_metrics_provider.cc",
353 "content/subprocess_metrics_provider.h",
355 public_deps = [ ":metrics" ]
358 "//content/public/browser",
359 "//extensions/buildflags",
363 deps += [ "//components/crash/content/browser" ]
368 static_library("net") {
370 "net/cellular_logic_helper.cc",
371 "net/cellular_logic_helper.h",
372 "net/net_metrics_log_uploader.cc",
373 "net/net_metrics_log_uploader.h",
374 "net/network_metrics_provider.cc",
375 "net/network_metrics_provider.h",
378 public_deps = [ ":metrics" ]
379 allow_circular_includes_from = [ ":metrics" ]
383 "//build:chromeos_buildflags",
384 "//components/encrypted_messages:encrypted_message_proto",
385 "//components/encrypted_messages:encrypted_messages",
386 "//components/variations",
388 "//services/network/public/cpp",
389 "//services/network/public/mojom",
390 "//third_party/metrics_proto",
391 "//third_party/zlib/google:compression_utils",
396 static_library("ui") {
398 "ui/form_factor_metrics_provider.cc",
399 "ui/form_factor_metrics_provider.h",
400 "ui/screen_info_metrics_provider.cc",
401 "ui/screen_info_metrics_provider.h",
404 public_deps = [ ":metrics" ]
407 "//build/config/chromebox_for_meetings:buildflags",
415 static_library("single_sample_metrics") {
417 "single_sample_metrics.cc",
418 "single_sample_metrics.h",
419 "single_sample_metrics_factory_impl.cc",
420 "single_sample_metrics_factory_impl.h",
424 "//mojo/public/cpp/bindings",
425 "//services/service_manager/public/cpp",
426 "//services/service_manager/public/mojom",
430 "//components/metrics/public/mojom:single_sample_metrics_mojo_bindings",
434 source_set("call_stack_profile_params") {
436 "call_stack_profile_encoding.h",
437 "call_stack_profile_params.h",
439 sources = [ "call_stack_profile_encoding.cc" ]
443 "//third_party/metrics_proto",
447 # Dependency for child processes that use the CallStackProfileBuilder.
448 source_set("child_call_stack_profile_builder") {
450 "call_stack_profile_builder.h",
451 "call_stack_profile_metadata.h",
452 "child_call_stack_profile_collector.h",
455 "call_stack_profile_builder.cc",
456 "call_stack_profile_metadata.cc",
457 "child_call_stack_profile_collector.cc",
459 public_deps = [ ":call_stack_profile_params" ]
462 "//components/metrics/public/mojom:call_stack_mojo_bindings",
463 "//third_party/metrics_proto",
466 # This target must not depend on :metrics because that code is intended solely
467 # for use in the browser process.
468 assert_no_deps = [ ":metrics" ]
471 # Dependency for browser process use of the CallStackProfileBuilder.
472 source_set("call_stack_profile_builder") {
473 deps = [ ":metrics" ]
474 public_deps = [ ":child_call_stack_profile_builder" ]
477 # The browser process mojo service for collecting profiles from child
479 source_set("call_stack_profile_collector") {
481 "call_stack_profile_collector.cc",
482 "call_stack_profile_collector.h",
485 ":call_stack_profile_params",
487 "//components/metrics/public/mojom:call_stack_mojo_bindings",
491 if (is_linux || is_chromeos) {
492 static_library("serialization") {
494 "serialization/metric_sample.cc",
495 "serialization/metric_sample.h",
496 "serialization/serialization_utils.cc",
497 "serialization/serialization_utils.h",
503 source_set("unit_tests") {
506 "android_metrics_helper_unittest.cc",
507 "call_stack_profile_builder_unittest.cc",
508 "call_stack_profile_metadata_unittest.cc",
509 "call_stack_profile_metrics_provider_unittest.cc",
510 "child_call_stack_profile_collector_unittest.cc",
511 "clean_exit_beacon_unittest.cc",
512 "cloned_install_detector_unittest.cc",
513 "component_metrics_provider_unittest.cc",
514 "daily_event_unittest.cc",
515 "data_use_tracker_unittest.cc",
516 "date_changed_helper_unittest.cc",
517 "drive_metrics_provider_unittest.cc",
518 "entropy_state_provider_unittest.cc",
519 "entropy_state_unittest.cc",
520 "environment_recorder_unittest.cc",
521 "expired_histograms_checker_unittest.cc",
522 "field_trials_provider_unittest.cc",
523 "file_metrics_provider_unittest.cc",
524 "histogram_encoder_unittest.cc",
525 "library_support/histogram_manager_unittest.cc",
526 "log_decoder_unittest.cc",
527 "metrics_data_validation_unittest.cc",
528 "metrics_log_store_unittest.cc",
529 "metrics_log_unittest.cc",
530 "metrics_service_client_unittest.cc",
531 "metrics_service_observer_unittest.cc",
532 "metrics_service_unittest.cc",
533 "metrics_state_manager_unittest.cc",
534 "net/net_metrics_log_uploader_unittest.cc",
535 "net/network_metrics_provider_unittest.cc",
536 "persistent_synthetic_trial_observer_unittest.cc",
537 "persistent_system_profile_unittest.cc",
538 "reporting_service_unittest.cc",
539 "single_sample_metrics_factory_impl_unittest.cc",
540 "stability_metrics_helper_unittest.cc",
541 "stability_metrics_provider_unittest.cc",
542 "ui/form_factor_metrics_provider_unittest.cc",
543 "ui/screen_info_metrics_provider_unittest.cc",
544 "unsent_log_store_metrics_impl_unittest.cc",
545 "unsent_log_store_unittest.cc",
549 ":call_stack_profile_builder",
550 ":component_metrics",
554 ":single_sample_metrics",
558 "//base:base_stack_sampling_profiler_test_util",
559 "//base/test:test_support",
560 "//build:chromeos_buildflags",
561 "//components/component_updater:test_support",
562 "//components/encrypted_messages:encrypted_message_proto",
563 "//components/metrics/public/mojom:call_stack_mojo_bindings",
564 "//components/network_time:network_time_test_support",
565 "//components/prefs:test_support",
566 "//components/sync:test_support",
567 "//components/sync/base",
568 "//components/variations",
569 "//components/variations:test_support",
570 "//extensions/buildflags",
571 "//mojo/public/cpp/bindings",
572 "//net:test_support",
573 "//services/network:test_support",
574 "//services/network/public/cpp:cpp",
575 "//services/service_manager/public/cpp",
578 "//third_party/metrics_proto",
579 "//third_party/zlib/google:compression_utils",
585 "machine_id_provider_win_unittest.cc",
586 "system_session_analyzer/system_session_analyzer_win_unittest.cc",
589 sources += [ "machine_id_provider_nonwin_unittest.cc" ]
592 if (is_linux || is_chromeos) {
594 "psi_memory_parser_linux_unittest.cc",
595 "serialization/serialization_utils_unittest.cc",
597 deps += [ ":serialization" ]
600 if (is_chromeos_ash) {
602 "//chromeos/ash/components/dbus:test_support",
603 "//chromeos/ash/components/network:test_support",
609 "android_metrics_provider_unittest.cc",
610 "gms_metrics_provider_unittest.cc",
617 "//content/test:test_support",
621 # iOS is not supported by the profiler and the ios-simulator bot chokes on
624 sources -= [ "child_call_stack_profile_collector_unittest.cc" ]
625 deps += [ "//ios/web/public/test" ]
628 "content/content_stability_metrics_provider_unittest.cc",
629 "content/subprocess_metrics_provider_unittest.cc",
631 deps += [ "//extensions/buildflags" ]
634 if (is_win || is_linux) {
635 sources += [ "motherboard_metrics_provider_unittest.cc" ]
639 # Convenience testing target
640 test("metrics_unittests") {
641 sources = [ "//components/test/run_all_unittests.cc" ]
644 "//components/metrics/demographics:unit_tests",
645 "//components/test:test_support",