• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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