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. 4 5import("//build/config/chromeos/ui_mode.gni") 6import("//build/config/cronet/config.gni") 7import("//build/config/features.gni") 8import("//testing/test.gni") 9 10if (is_android) { 11 import("//build/config/android/rules.gni") 12 import("//third_party/jni_zero/jni_zero.gni") 13} 14 15# Dependency for histogram manager users: cronet and ios/webview 16source_set("library_support") { 17 public = [ 18 "histogram_encoder.h", 19 "library_support/histogram_manager.h", 20 ] 21 sources = [ 22 "histogram_encoder.cc", 23 "library_support/histogram_manager.cc", 24 ] 25 26 deps = [ 27 "//base", 28 "//third_party/metrics_proto", 29 ] 30} 31 32if (!is_cronet_build && is_android) { 33 generate_jni("jni_headers") { 34 namespace = "metrics" 35 sources = [ 36 "android/java/src/org/chromium/components/metrics/LowEntropySource.java", 37 ] 38 } 39 40 java_cpp_features("java_features_srcjar") { 41 # External code should depend on ":foo_java" instead. 42 visibility = [ ":*" ] 43 sources = [ "//components/metrics/metrics_features.cc" ] 44 template = 45 "//components/metrics/android/java_templates/MetricsFeatures.java.tmpl" 46 } 47 48 java_cpp_strings("java_switches_srcjar") { 49 # External code should depend on ":metrics_java" instead. 50 visibility = [ ":*" ] 51 sources = [ "//components/metrics/metrics_switches.cc" ] 52 template = 53 "//components/metrics/android/java_templates/MetricsSwitches.java.tmpl" 54 } 55 56 java_cpp_enum("java_enum_srcjar") { 57 # External code should depend on ":metrics_java" instead. 58 visibility = [ ":*" ] 59 sources = [ "stability_metrics_helper.h" ] 60 } 61 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. 65 srcjar_deps = [ 66 ":java_enum_srcjar", 67 ":java_features_srcjar", 68 ":java_switches_srcjar", 69 ] 70 sources = [ 71 "android/java/src/org/chromium/components/metrics/LowEntropySource.java", 72 ] 73 deps = [ 74 "//base:base_java", 75 "//third_party/androidx:androidx_annotation_annotation_java", 76 "//third_party/jni_zero:jni_zero_java", 77 ] 78 } 79} 80 81# Used by the Chrome installer, which doesn't need the whole metrics library. 82source_set("client_info") { 83 sources = [ 84 "client_info.cc", 85 "client_info.h", 86 ] 87} 88 89# Used by the Chrome installer, which doesn't need the whole metrics library. 90source_set("metrics_pref_names") { 91 sources = [ 92 "metrics_pref_names.cc", 93 "metrics_pref_names.h", 94 ] 95} 96 97if (!is_cronet_build || is_ios) { 98 static_library("metrics") { 99 sources = [ 100 "android_metrics_helper.cc", 101 "android_metrics_helper.h", 102 "call_stacks/call_stack_profile_metrics_provider.cc", 103 "call_stacks/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", 110 "daily_event.cc", 111 "daily_event.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", 122 "entropy_state.cc", 123 "entropy_state.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", 136 "log_decoder.cc", 137 "log_decoder.h", 138 "log_store.h", 139 "machine_id_provider.h", 140 "metrics_data_validation.cc", 141 "metrics_data_validation.h", 142 "metrics_features.cc", 143 "metrics_features.h", 144 "metrics_log.cc", 145 "metrics_log.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", 162 "metrics_service.h", 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 "ukm_demographic_metrics_provider.h", 192 "unsent_log_store.cc", 193 "unsent_log_store.h", 194 "unsent_log_store_metrics.cc", 195 "unsent_log_store_metrics.h", 196 "unsent_log_store_metrics_impl.cc", 197 "unsent_log_store_metrics_impl.h", 198 "url_constants.h", 199 "version_utils.cc", 200 "version_utils.h", 201 ] 202 203 if (is_chrome_branded) { 204 sources += [ "internal/url_constants.cc" ] 205 } else { 206 sources += [ "url_constants.cc" ] 207 } 208 209 public_deps = [ 210 "//components/metrics:client_info", 211 "//components/metrics:metrics_pref_names", 212 "//third_party/metrics_proto", 213 "//third_party/zlib/google:compression_utils", 214 ] 215 216 deps = [ 217 ":library_support", 218 "//base", 219 "//base:base_static", 220 "//base:i18n", 221 "//build:branding_buildflags", 222 "//build:chromeos_buildflags", 223 "//components/flags_ui:switches", 224 "//components/network_time", 225 "//components/prefs", 226 "//components/variations", 227 "//components/variations/field_trial_config", 228 "//components/version_info:version_info", 229 "//crypto", 230 "//extensions/buildflags", 231 "//third_party/icu", 232 "//url", 233 ] 234 235 if (is_android) { 236 sources += [ 237 "android_metrics_provider.cc", 238 "android_metrics_provider.h", 239 "drive_metrics_provider_android.cc", 240 "gms_metrics_provider.cc", 241 "gms_metrics_provider.h", 242 ] 243 deps += [ ":jni_headers" ] 244 } else { 245 deps += [ "//components/keep_alive_registry" ] 246 } 247 248 if (is_ios) { 249 sources += [ 250 "clean_exit_beacon_ios.mm", 251 "drive_metrics_provider_ios.mm", 252 ] 253 } 254 255 if (is_linux || is_chromeos) { 256 sources += [ 257 "drive_metrics_provider_linux.cc", 258 "psi_memory_parser.h", 259 "psi_memory_parser_linux.cc", 260 ] 261 } 262 263 if (is_mac) { 264 sources += [ "drive_metrics_provider_mac.mm" ] 265 frameworks = [ 266 # The below are all needed for drive_metrics_provider_mac.mm. 267 "CoreFoundation.framework", 268 "DiskArbitration.framework", 269 "Foundation.framework", 270 "IOKit.framework", 271 ] 272 } 273 274 if (is_win) { 275 sources += [ 276 "drive_metrics_provider_win.cc", 277 "machine_id_provider_win.cc", 278 "system_session_analyzer/system_session_analyzer_win.cc", 279 "system_session_analyzer/system_session_analyzer_win.h", 280 ] 281 libs = [ "wevtapi.lib" ] 282 } else { 283 sources += [ "machine_id_provider_nonwin.cc" ] 284 } 285 286 if (is_fuchsia) { 287 sources += [ "drive_metrics_provider_fuchsia.cc" ] 288 } 289 290 if (is_win || is_linux) { 291 sources += [ 292 "motherboard.cc", 293 "motherboard.h", 294 "motherboard_metrics_provider.cc", 295 "motherboard_metrics_provider.h", 296 ] 297 } 298 } 299 300 static_library("test_support") { 301 testonly = true 302 sources = [ 303 "test/test_enabled_state_provider.cc", 304 "test/test_enabled_state_provider.h", 305 "test/test_metrics_log_uploader.cc", 306 "test/test_metrics_log_uploader.h", 307 "test/test_metrics_provider.cc", 308 "test/test_metrics_provider.h", 309 "test/test_metrics_service_client.cc", 310 "test/test_metrics_service_client.h", 311 ] 312 313 public_deps = [ ":metrics" ] 314 deps = [ "//base" ] 315 } 316} 317 318if (!is_cronet_build) { 319 # The component metrics provider is a separate target because it depends upon 320 # (the large) component_updater code, and is not needed for some entities that 321 # depend on :metrics. 322 static_library("component_metrics") { 323 sources = [ 324 "component_metrics_provider.cc", 325 "component_metrics_provider.h", 326 ] 327 328 public_deps = [ "//third_party/metrics_proto" ] 329 330 deps = [ 331 ":metrics", 332 "//base", 333 "//components/component_updater", 334 ] 335 } 336 337 if (use_blink) { 338 static_library("content") { 339 sources = [ 340 # ChromeOS accessibility metrics provider is in chromeos_metrics_provider. 341 "content/accessibility_metrics_provider.cc", 342 "content/accessibility_metrics_provider.h", 343 "content/content_stability_metrics_provider.cc", 344 "content/content_stability_metrics_provider.h", 345 "content/extensions_helper.h", 346 "content/gpu_metrics_provider.cc", 347 "content/gpu_metrics_provider.h", 348 "content/metrics_services_web_contents_observer.cc", 349 "content/metrics_services_web_contents_observer.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", 354 ] 355 public_deps = [ ":metrics" ] 356 deps = [ 357 "//base", 358 "//content/public/browser", 359 "//extensions/buildflags", 360 "//gpu/config", 361 ] 362 if (is_android) { 363 deps += [ "//components/crash/content/browser" ] 364 } 365 } 366 } 367 368 static_library("net") { 369 sources = [ 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", 376 ] 377 378 public_deps = [ ":metrics" ] 379 allow_circular_includes_from = [ ":metrics" ] 380 381 deps = [ 382 "//base", 383 "//build:chromeos_buildflags", 384 "//components/encrypted_messages:encrypted_message_proto", 385 "//components/encrypted_messages:encrypted_messages", 386 "//components/variations", 387 "//net", 388 "//services/network/public/cpp", 389 "//services/network/public/mojom", 390 "//third_party/metrics_proto", 391 "//third_party/zlib/google:compression_utils", 392 "//url", 393 ] 394 } 395 396 static_library("ui") { 397 sources = [ 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", 402 ] 403 404 public_deps = [ ":metrics" ] 405 deps = [ 406 "//base", 407 "//build/config/chromebox_for_meetings:buildflags", 408 "//ui/base", 409 "//ui/display", 410 "//ui/gfx", 411 "//ui/gfx/geometry", 412 ] 413 } 414 415 static_library("single_sample_metrics") { 416 sources = [ 417 "single_sample_metrics.cc", 418 "single_sample_metrics.h", 419 "single_sample_metrics_factory_impl.cc", 420 "single_sample_metrics_factory_impl.h", 421 ] 422 423 deps = [ 424 "//mojo/public/cpp/bindings", 425 "//services/service_manager/public/cpp", 426 "//services/service_manager/public/mojom", 427 ] 428 429 public_deps = [ 430 "//components/metrics/public/mojom:single_sample_metrics_mojo_bindings", 431 ] 432 } 433 434 source_set("call_stack_profile_params") { 435 public = [ 436 "call_stacks/call_stack_profile_encoding.h", 437 "call_stacks/call_stack_profile_params.h", 438 ] 439 sources = [ "call_stacks/call_stack_profile_encoding.cc" ] 440 441 deps = [ 442 "//base:base", 443 "//third_party/metrics_proto", 444 ] 445 } 446 447 # Dependency for child processes that use the CallStackProfileBuilder. 448 source_set("child_call_stack_profile_builder") { 449 public = [ 450 "call_stacks/call_stack_profile_builder.h", 451 "call_stacks/call_stack_profile_metadata.h", 452 "call_stacks/child_call_stack_profile_collector.h", 453 ] 454 sources = [ 455 "call_stacks/call_stack_profile_builder.cc", 456 "call_stacks/call_stack_profile_metadata.cc", 457 "call_stacks/child_call_stack_profile_collector.cc", 458 ] 459 public_deps = [ ":call_stack_profile_params" ] 460 deps = [ 461 "//base", 462 "//components/metrics/public/mojom:call_stack_mojo_bindings", 463 "//third_party/metrics_proto", 464 ] 465 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" ] 469 } 470 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" ] 475 } 476 477 # The browser process mojo service for collecting profiles from child 478 # processes. 479 source_set("call_stack_profile_collector") { 480 sources = [ 481 "call_stacks/call_stack_profile_collector.cc", 482 "call_stacks/call_stack_profile_collector.h", 483 ] 484 deps = [ 485 ":call_stack_profile_params", 486 ":metrics", 487 "//components/metrics/public/mojom:call_stack_mojo_bindings", 488 ] 489 } 490 491 if (is_linux || is_chromeos) { 492 static_library("serialization") { 493 sources = [ 494 "serialization/metric_sample.cc", 495 "serialization/metric_sample.h", 496 "serialization/serialization_utils.cc", 497 "serialization/serialization_utils.h", 498 ] 499 deps = [ "//base" ] 500 } 501 } 502 503 source_set("unit_tests") { 504 testonly = true 505 sources = [ 506 "android_metrics_helper_unittest.cc", 507 "call_stacks/call_stack_profile_builder_unittest.cc", 508 "call_stacks/call_stack_profile_metadata_unittest.cc", 509 "call_stacks/call_stack_profile_metrics_provider_unittest.cc", 510 "call_stacks/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", 546 ] 547 548 deps = [ 549 ":call_stack_profile_builder", 550 ":component_metrics", 551 ":library_support", 552 ":metrics", 553 ":net", 554 ":single_sample_metrics", 555 ":test_support", 556 ":ui", 557 "//base", 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", 576 "//testing/gmock", 577 "//testing/gtest", 578 "//third_party/metrics_proto", 579 "//third_party/zlib/google:compression_utils", 580 "//ui/gfx/geometry", 581 ] 582 583 if (is_win) { 584 sources += [ 585 "machine_id_provider_win_unittest.cc", 586 "system_session_analyzer/system_session_analyzer_win_unittest.cc", 587 ] 588 } else { 589 sources += [ "machine_id_provider_nonwin_unittest.cc" ] 590 } 591 592 if (is_linux || is_chromeos) { 593 sources += [ 594 "psi_memory_parser_linux_unittest.cc", 595 "serialization/serialization_utils_unittest.cc", 596 ] 597 deps += [ ":serialization" ] 598 } 599 600 if (is_chromeos_ash) { 601 deps += [ 602 "//chromeos/ash/components/dbus:test_support", 603 "//chromeos/ash/components/network:test_support", 604 ] 605 } 606 607 if (is_android) { 608 sources += [ 609 "android_metrics_provider_unittest.cc", 610 "gms_metrics_provider_unittest.cc", 611 ] 612 } 613 614 if (use_blink) { 615 deps += [ 616 ":content", 617 "//content/test:test_support", 618 ] 619 } 620 621 # iOS is not supported by the profiler and the ios-simulator bot chokes on 622 # these tests. 623 if (is_ios) { 624 sources -= 625 [ "call_stacks/child_call_stack_profile_collector_unittest.cc" ] 626 deps += [ "//ios/web/public/test" ] 627 } else { 628 sources += [ 629 "content/content_stability_metrics_provider_unittest.cc", 630 "content/subprocess_metrics_provider_unittest.cc", 631 ] 632 deps += [ "//extensions/buildflags" ] 633 } 634 635 if (is_win || is_linux) { 636 sources += [ "motherboard_metrics_provider_unittest.cc" ] 637 } 638 } 639 640 # Convenience testing target 641 test("metrics_unittests") { 642 sources = [ "//components/test/run_all_unittests.cc" ] 643 deps = [ 644 ":unit_tests", 645 "//components/metrics/demographics:unit_tests", 646 "//components/test:test_support", 647 ] 648 } 649} 650