BUILD.gn 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. # Copyright 2014 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. import("//build/config/chromeos/ui_mode.gni")
  5. import("//testing/test.gni")
  6. if (is_android) {
  7. import("//build/config/android/rules.gni")
  8. }
  9. static_library("metrics") {
  10. sources = [
  11. "android_metrics_provider.cc",
  12. "android_metrics_provider.h",
  13. "call_stack_profile_metrics_provider.cc",
  14. "call_stack_profile_metrics_provider.h",
  15. "clean_exit_beacon.cc",
  16. "clean_exit_beacon.h",
  17. "client_info.cc",
  18. "client_info.h",
  19. "cloned_install_detector.cc",
  20. "cloned_install_detector.h",
  21. "cpu_metrics_provider.cc",
  22. "cpu_metrics_provider.h",
  23. "daily_event.cc",
  24. "daily_event.h",
  25. "data_use_tracker.cc",
  26. "data_use_tracker.h",
  27. "date_changed_helper.cc",
  28. "date_changed_helper.h",
  29. "delegating_provider.cc",
  30. "delegating_provider.h",
  31. "drive_metrics_provider.cc",
  32. "drive_metrics_provider.h",
  33. "enabled_state_provider.cc",
  34. "enabled_state_provider.h",
  35. "entropy_state.cc",
  36. "entropy_state.h",
  37. "entropy_state_provider.cc",
  38. "entropy_state_provider.h",
  39. "environment_recorder.cc",
  40. "environment_recorder.h",
  41. "expired_histogram_util.cc",
  42. "expired_histogram_util.h",
  43. "expired_histograms_checker.cc",
  44. "expired_histograms_checker.h",
  45. "field_trials_provider.cc",
  46. "field_trials_provider.h",
  47. "file_metrics_provider.cc",
  48. "file_metrics_provider.h",
  49. "form_factor_metrics_provider.cc",
  50. "form_factor_metrics_provider.h",
  51. "log_decoder.cc",
  52. "log_decoder.h",
  53. "log_store.h",
  54. "machine_id_provider.h",
  55. "metrics_data_validation.cc",
  56. "metrics_data_validation.h",
  57. "metrics_log.cc",
  58. "metrics_log.h",
  59. "metrics_log_manager.cc",
  60. "metrics_log_manager.h",
  61. "metrics_log_store.cc",
  62. "metrics_log_store.h",
  63. "metrics_log_uploader.h",
  64. "metrics_pref_names.cc",
  65. "metrics_pref_names.h",
  66. "metrics_provider.cc",
  67. "metrics_provider.h",
  68. "metrics_reporting_default_state.cc",
  69. "metrics_reporting_default_state.h",
  70. "metrics_reporting_service.cc",
  71. "metrics_reporting_service.h",
  72. "metrics_rotation_scheduler.cc",
  73. "metrics_rotation_scheduler.h",
  74. "metrics_scheduler.cc",
  75. "metrics_scheduler.h",
  76. "metrics_service.cc",
  77. "metrics_service.h",
  78. "metrics_service_accessor.cc",
  79. "metrics_service_accessor.h",
  80. "metrics_service_client.cc",
  81. "metrics_service_client.h",
  82. "metrics_state_manager.cc",
  83. "metrics_state_manager.h",
  84. "metrics_switches.cc",
  85. "metrics_switches.h",
  86. "metrics_upload_scheduler.cc",
  87. "metrics_upload_scheduler.h",
  88. "persistent_histograms.cc",
  89. "persistent_histograms.h",
  90. "persistent_system_profile.cc",
  91. "persistent_system_profile.h",
  92. "reporting_service.cc",
  93. "reporting_service.h",
  94. "sampling_metrics_provider.cc",
  95. "sampling_metrics_provider.h",
  96. "stability_metrics_helper.cc",
  97. "stability_metrics_helper.h",
  98. "stability_metrics_provider.cc",
  99. "stability_metrics_provider.h",
  100. "system_memory_stats_recorder.h",
  101. "ukm_demographic_metrics_provider.h",
  102. "unsent_log_store.cc",
  103. "unsent_log_store.h",
  104. "unsent_log_store_metrics.cc",
  105. "unsent_log_store_metrics.h",
  106. "unsent_log_store_metrics_impl.cc",
  107. "unsent_log_store_metrics_impl.h",
  108. "url_constants.cc",
  109. "url_constants.h",
  110. "version_utils.cc",
  111. "version_utils.h",
  112. ]
  113. public_deps = [
  114. "//third_party/metrics_proto",
  115. "//third_party/zlib/google:compression_utils",
  116. ]
  117. deps = [
  118. ":library_support",
  119. "//base",
  120. "//base:base_static",
  121. "//build:branding_buildflags",
  122. "//build:chromeos_buildflags",
  123. "//components/flags_ui:switches",
  124. "//components/prefs",
  125. "//components/variations",
  126. "//components/variations/field_trial_config",
  127. "//components/version_info:version_info",
  128. "//crypto",
  129. "//extensions/buildflags",
  130. "//third_party/icu",
  131. "//ui/base",
  132. "//url",
  133. ]
  134. if (is_chromeos_ash) {
  135. deps += [
  136. ":serialization",
  137. "//components/metrics/structured:neutrino_logging",
  138. ]
  139. }
  140. if (is_android) {
  141. sources += [ "drive_metrics_provider_android.cc" ]
  142. }
  143. if (is_ios) {
  144. sources += [
  145. "clean_exit_beacon_ios.mm",
  146. "drive_metrics_provider_ios.mm",
  147. ]
  148. }
  149. if (is_linux || is_chromeos) {
  150. sources += [
  151. "drive_metrics_provider_linux.cc",
  152. "psi_memory_parser.h",
  153. "psi_memory_parser_linux.cc",
  154. "system_memory_stats_recorder_linux.cc",
  155. ]
  156. }
  157. if (is_mac) {
  158. sources += [ "drive_metrics_provider_mac.mm" ]
  159. frameworks = [
  160. # The below are all needed for drive_metrics_provider_mac.mm.
  161. "CoreFoundation.framework",
  162. "DiskArbitration.framework",
  163. "Foundation.framework",
  164. "IOKit.framework",
  165. ]
  166. }
  167. if (is_win) {
  168. sources += [
  169. "drive_metrics_provider_win.cc",
  170. "machine_id_provider_win.cc",
  171. "system_session_analyzer/system_session_analyzer_win.cc",
  172. "system_session_analyzer/system_session_analyzer_win.h",
  173. ]
  174. deps += [ "//components/browser_watcher:stability_client" ]
  175. libs = [ "wevtapi.lib" ]
  176. } else {
  177. sources += [ "machine_id_provider_nonwin.cc" ]
  178. }
  179. if (is_fuchsia) {
  180. sources += [ "drive_metrics_provider_fuchsia.cc" ]
  181. }
  182. if (is_win || is_linux) {
  183. sources += [
  184. "motherboard.cc",
  185. "motherboard.h",
  186. "motherboard_metrics_provider.cc",
  187. "motherboard_metrics_provider.h",
  188. ]
  189. }
  190. }
  191. if (is_android) {
  192. java_cpp_strings("java_switches_srcjar") {
  193. # External code should depend on ":metrics_java" instead.
  194. visibility = [ ":*" ]
  195. sources = [ "//components/metrics/metrics_switches.cc" ]
  196. template =
  197. "//components/metrics/android/java_templates/MetricsSwitches.java.tmpl"
  198. }
  199. java_cpp_enum("java_enum_srcjar") {
  200. # External code should depend on ":metrics_java" instead.
  201. visibility = [ ":*" ]
  202. sources = [ "stability_metrics_helper.h" ]
  203. }
  204. android_library("metrics_java") {
  205. # Right now, this only includes the Java switches. But if we need more Java
  206. # files, they should be added here as necessary.
  207. srcjar_deps = [
  208. ":java_enum_srcjar",
  209. ":java_switches_srcjar",
  210. ]
  211. deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
  212. }
  213. }
  214. # The component metrics provider is a separate target because it depends upon
  215. # (the large) component_updater code, and is not needed for some entities that
  216. # depend on :metrics.
  217. static_library("component_metrics") {
  218. sources = [
  219. "component_metrics_provider.cc",
  220. "component_metrics_provider.h",
  221. ]
  222. public_deps = [ "//third_party/metrics_proto" ]
  223. deps = [
  224. ":metrics",
  225. "//base",
  226. "//components/component_updater",
  227. ]
  228. }
  229. if (!is_ios) {
  230. static_library("content") {
  231. sources = [
  232. # ChromeOS accessibility metrics provider is in chromeos_metrics_provider.
  233. "content/accessibility_metrics_provider.cc",
  234. "content/accessibility_metrics_provider.h",
  235. "content/content_stability_metrics_provider.cc",
  236. "content/content_stability_metrics_provider.h",
  237. "content/extensions_helper.h",
  238. "content/gpu_metrics_provider.cc",
  239. "content/gpu_metrics_provider.h",
  240. "content/rendering_perf_metrics_provider.cc",
  241. "content/rendering_perf_metrics_provider.h",
  242. "content/subprocess_metrics_provider.cc",
  243. "content/subprocess_metrics_provider.h",
  244. ]
  245. public_deps = [ ":metrics" ]
  246. deps = [
  247. "//base",
  248. "//content/public/browser",
  249. "//extensions/buildflags",
  250. "//gpu/config",
  251. ]
  252. if (is_android) {
  253. deps += [ "//components/crash/content/browser" ]
  254. }
  255. }
  256. }
  257. # Dependency for histogram manager users: cronet and ios/webview
  258. source_set("library_support") {
  259. public = [
  260. "histogram_encoder.h",
  261. "library_support/histogram_manager.h",
  262. ]
  263. sources = [
  264. "histogram_encoder.cc",
  265. "library_support/histogram_manager.cc",
  266. ]
  267. deps = [
  268. "//base",
  269. "//third_party/metrics_proto",
  270. ]
  271. }
  272. static_library("net") {
  273. sources = [
  274. "net/cellular_logic_helper.cc",
  275. "net/cellular_logic_helper.h",
  276. "net/net_metrics_log_uploader.cc",
  277. "net/net_metrics_log_uploader.h",
  278. "net/network_metrics_provider.cc",
  279. "net/network_metrics_provider.h",
  280. ]
  281. public_deps = [ ":metrics" ]
  282. allow_circular_includes_from = [ ":metrics" ]
  283. deps = [
  284. "//base",
  285. "//build:chromeos_buildflags",
  286. "//components/encrypted_messages:encrypted_message_proto",
  287. "//components/encrypted_messages:encrypted_messages",
  288. "//components/variations",
  289. "//net",
  290. "//services/network/public/cpp",
  291. "//services/network/public/mojom",
  292. "//third_party/metrics_proto",
  293. "//third_party/zlib/google:compression_utils",
  294. "//url",
  295. ]
  296. }
  297. static_library("ui") {
  298. sources = [
  299. "ui/screen_info_metrics_provider.cc",
  300. "ui/screen_info_metrics_provider.h",
  301. ]
  302. public_deps = [ ":metrics" ]
  303. deps = [
  304. "//base",
  305. "//ui/display",
  306. "//ui/gfx",
  307. "//ui/gfx/geometry",
  308. ]
  309. }
  310. static_library("single_sample_metrics") {
  311. sources = [
  312. "single_sample_metrics.cc",
  313. "single_sample_metrics.h",
  314. "single_sample_metrics_factory_impl.cc",
  315. "single_sample_metrics_factory_impl.h",
  316. ]
  317. deps = [
  318. "//mojo/public/cpp/bindings",
  319. "//services/service_manager/public/cpp",
  320. "//services/service_manager/public/mojom",
  321. ]
  322. public_deps = [
  323. "//components/metrics/public/mojom:single_sample_metrics_mojo_bindings",
  324. ]
  325. }
  326. source_set("call_stack_profile_params") {
  327. public = [
  328. "call_stack_profile_encoding.h",
  329. "call_stack_profile_params.h",
  330. ]
  331. sources = [ "call_stack_profile_encoding.cc" ]
  332. deps = [
  333. "//base:base",
  334. "//third_party/metrics_proto",
  335. ]
  336. }
  337. # Dependency for child processes that use the CallStackProfileBuilder.
  338. source_set("child_call_stack_profile_builder") {
  339. public = [
  340. "call_stack_profile_builder.h",
  341. "call_stack_profile_metadata.h",
  342. "child_call_stack_profile_collector.h",
  343. ]
  344. sources = [
  345. "call_stack_profile_builder.cc",
  346. "call_stack_profile_metadata.cc",
  347. "child_call_stack_profile_collector.cc",
  348. ]
  349. public_deps = [ ":call_stack_profile_params" ]
  350. deps = [
  351. "//base",
  352. "//components/metrics/public/mojom:call_stack_mojo_bindings",
  353. "//third_party/metrics_proto",
  354. ]
  355. # This target must not depend on :metrics because that code is intended solely
  356. # for use in the browser process.
  357. assert_no_deps = [ ":metrics" ]
  358. }
  359. # Dependency for browser process use of the CallStackProfileBuilder.
  360. source_set("call_stack_profile_builder") {
  361. deps = [ ":metrics" ]
  362. public_deps = [ ":child_call_stack_profile_builder" ]
  363. }
  364. # The browser process mojo service for collecting profiles from child
  365. # processes.
  366. source_set("call_stack_profile_collector") {
  367. sources = [
  368. "call_stack_profile_collector.cc",
  369. "call_stack_profile_collector.h",
  370. ]
  371. deps = [
  372. ":call_stack_profile_params",
  373. ":metrics",
  374. "//components/metrics/public/mojom:call_stack_mojo_bindings",
  375. ]
  376. }
  377. static_library("test_support") {
  378. testonly = true
  379. sources = [
  380. "test/test_enabled_state_provider.cc",
  381. "test/test_enabled_state_provider.h",
  382. "test/test_metrics_log_uploader.cc",
  383. "test/test_metrics_log_uploader.h",
  384. "test/test_metrics_provider.cc",
  385. "test/test_metrics_provider.h",
  386. "test/test_metrics_service_client.cc",
  387. "test/test_metrics_service_client.h",
  388. ]
  389. public_deps = [ ":metrics" ]
  390. deps = [ "//base" ]
  391. }
  392. if (is_linux || is_chromeos) {
  393. static_library("serialization") {
  394. sources = [
  395. "serialization/metric_sample.cc",
  396. "serialization/metric_sample.h",
  397. "serialization/serialization_utils.cc",
  398. "serialization/serialization_utils.h",
  399. ]
  400. deps = [ "//base" ]
  401. }
  402. }
  403. source_set("unit_tests") {
  404. testonly = true
  405. sources = [
  406. "android_metrics_provider_unittest.cc",
  407. "call_stack_profile_builder_unittest.cc",
  408. "call_stack_profile_metadata_unittest.cc",
  409. "call_stack_profile_metrics_provider_unittest.cc",
  410. "child_call_stack_profile_collector_unittest.cc",
  411. "clean_exit_beacon_unittest.cc",
  412. "cloned_install_detector_unittest.cc",
  413. "component_metrics_provider_unittest.cc",
  414. "daily_event_unittest.cc",
  415. "data_use_tracker_unittest.cc",
  416. "date_changed_helper_unittest.cc",
  417. "drive_metrics_provider_unittest.cc",
  418. "entropy_state_provider_unittest.cc",
  419. "entropy_state_unittest.cc",
  420. "environment_recorder_unittest.cc",
  421. "expired_histograms_checker_unittest.cc",
  422. "field_trials_provider_unittest.cc",
  423. "file_metrics_provider_unittest.cc",
  424. "form_factor_metrics_provider_unittest.cc",
  425. "histogram_encoder_unittest.cc",
  426. "library_support/histogram_manager_unittest.cc",
  427. "log_decoder_unittest.cc",
  428. "metrics_data_validation_unittest.cc",
  429. "metrics_log_manager_unittest.cc",
  430. "metrics_log_store_unittest.cc",
  431. "metrics_log_unittest.cc",
  432. "metrics_service_client_unittest.cc",
  433. "metrics_service_unittest.cc",
  434. "metrics_state_manager_unittest.cc",
  435. "net/net_metrics_log_uploader_unittest.cc",
  436. "net/network_metrics_provider_unittest.cc",
  437. "persistent_system_profile_unittest.cc",
  438. "reporting_service_unittest.cc",
  439. "single_sample_metrics_factory_impl_unittest.cc",
  440. "stability_metrics_helper_unittest.cc",
  441. "stability_metrics_provider_unittest.cc",
  442. "ui/screen_info_metrics_provider_unittest.cc",
  443. "unsent_log_store_metrics_impl_unittest.cc",
  444. "unsent_log_store_unittest.cc",
  445. ]
  446. deps = [
  447. ":call_stack_profile_builder",
  448. ":component_metrics",
  449. ":library_support",
  450. ":metrics",
  451. ":net",
  452. ":single_sample_metrics",
  453. ":test_support",
  454. ":ui",
  455. "//base",
  456. "//base:base_stack_sampling_profiler_test_util",
  457. "//base/test:test_support",
  458. "//build:chromeos_buildflags",
  459. "//components/component_updater:test_support",
  460. "//components/encrypted_messages:encrypted_message_proto",
  461. "//components/metrics/public/mojom:call_stack_mojo_bindings",
  462. "//components/network_time:network_time_test_support",
  463. "//components/prefs:test_support",
  464. "//components/sync:test_support",
  465. "//components/sync/base",
  466. "//components/variations",
  467. "//components/variations:test_support",
  468. "//extensions/buildflags",
  469. "//mojo/public/cpp/bindings",
  470. "//net:test_support",
  471. "//services/network:test_support",
  472. "//services/network/public/cpp:cpp",
  473. "//services/service_manager/public/cpp",
  474. "//testing/gmock",
  475. "//testing/gtest",
  476. "//third_party/metrics_proto",
  477. "//third_party/zlib/google:compression_utils",
  478. "//ui/gfx/geometry",
  479. ]
  480. if (is_win) {
  481. sources += [
  482. "machine_id_provider_win_unittest.cc",
  483. "system_session_analyzer/system_session_analyzer_win_unittest.cc",
  484. ]
  485. } else {
  486. sources += [ "machine_id_provider_nonwin_unittest.cc" ]
  487. }
  488. if (is_linux || is_chromeos) {
  489. sources += [
  490. "psi_memory_parser_linux_unittest.cc",
  491. "serialization/serialization_utils_unittest.cc",
  492. ]
  493. deps += [ ":serialization" ]
  494. }
  495. if (is_chromeos_ash) {
  496. deps += [
  497. "//chromeos/ash/components/dbus:test_support",
  498. "//chromeos/ash/components/network:test_support",
  499. ]
  500. }
  501. # iOS is not supported by the profiler and the ios-simulator bot chokes on
  502. # these tests.
  503. if (is_ios) {
  504. sources -= [ "child_call_stack_profile_collector_unittest.cc" ]
  505. deps += [ "//ios/web/public/test" ]
  506. } else {
  507. sources += [
  508. "content/content_stability_metrics_provider_unittest.cc",
  509. "content/subprocess_metrics_provider_unittest.cc",
  510. ]
  511. deps += [
  512. ":content",
  513. "//content/test:test_support",
  514. "//extensions/buildflags",
  515. ]
  516. }
  517. if (is_win || is_linux) {
  518. sources += [ "motherboard_metrics_provider_unittest.cc" ]
  519. }
  520. }
  521. # Convenience testing target
  522. test("metrics_unittests") {
  523. sources = [ "//components/test/run_all_unittests.cc" ]
  524. deps = [
  525. ":unit_tests",
  526. "//components/metrics/demographics:unit_tests",
  527. "//components/test:test_support",
  528. ]
  529. }