1*6777b538SAndroid Build Coastguard Worker# Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/python.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//components/metrics/structured/buildflags/buildflags.gni") 7*6777b538SAndroid Build Coastguard Workerimport("//testing/test.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//third_party/protobuf/proto_library.gni") 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker# Structured metrics is subcomponent of UMA that gathers and reports structured 11*6777b538SAndroid Build Coastguard Worker# events with several attached metrics. 12*6777b538SAndroid Build Coastguard Workerstatic_library("structured") { 13*6777b538SAndroid Build Coastguard Worker sources = [ 14*6777b538SAndroid Build Coastguard Worker "key_data_prefs_delegate.cc", 15*6777b538SAndroid Build Coastguard Worker "key_data_prefs_delegate.h", 16*6777b538SAndroid Build Coastguard Worker "key_data_provider_file.cc", 17*6777b538SAndroid Build Coastguard Worker "key_data_provider_file.h", 18*6777b538SAndroid Build Coastguard Worker "key_data_provider_prefs.cc", 19*6777b538SAndroid Build Coastguard Worker "key_data_provider_prefs.h", 20*6777b538SAndroid Build Coastguard Worker "reporting/structured_metrics_log_metrics.cc", 21*6777b538SAndroid Build Coastguard Worker "reporting/structured_metrics_log_metrics.h", 22*6777b538SAndroid Build Coastguard Worker "reporting/structured_metrics_reporting_service.cc", 23*6777b538SAndroid Build Coastguard Worker "reporting/structured_metrics_reporting_service.h", 24*6777b538SAndroid Build Coastguard Worker "structured_metrics_prefs.cc", 25*6777b538SAndroid Build Coastguard Worker "structured_metrics_prefs.h", 26*6777b538SAndroid Build Coastguard Worker "structured_metrics_recorder.cc", 27*6777b538SAndroid Build Coastguard Worker "structured_metrics_recorder.h", 28*6777b538SAndroid Build Coastguard Worker "structured_metrics_scheduler.cc", 29*6777b538SAndroid Build Coastguard Worker "structured_metrics_scheduler.h", 30*6777b538SAndroid Build Coastguard Worker "structured_metrics_service.cc", 31*6777b538SAndroid Build Coastguard Worker "structured_metrics_service.h", 32*6777b538SAndroid Build Coastguard Worker ] 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker public_deps = [ 35*6777b538SAndroid Build Coastguard Worker ":common", 36*6777b538SAndroid Build Coastguard Worker ":events", 37*6777b538SAndroid Build Coastguard Worker ":proto", 38*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/buildflags", 39*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib:proto", 40*6777b538SAndroid Build Coastguard Worker "//third_party/metrics_proto", 41*6777b538SAndroid Build Coastguard Worker ] 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker deps = [ 44*6777b538SAndroid Build Coastguard Worker ":structured_events", 45*6777b538SAndroid Build Coastguard Worker ":structured_metrics_validator", 46*6777b538SAndroid Build Coastguard Worker "//base", 47*6777b538SAndroid Build Coastguard Worker "//components/metrics", 48*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib", 49*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib:proto", 50*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/mojom", 51*6777b538SAndroid Build Coastguard Worker "//components/prefs", 52*6777b538SAndroid Build Coastguard Worker "//crypto", 53*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf:protobuf_lite", 54*6777b538SAndroid Build Coastguard Worker ] 55*6777b538SAndroid Build Coastguard Worker} 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Workerif (is_chromeos_ash) { 58*6777b538SAndroid Build Coastguard Worker static_library("external_metrics") { 59*6777b538SAndroid Build Coastguard Worker sources = [ 60*6777b538SAndroid Build Coastguard Worker "external_metrics.cc", 61*6777b538SAndroid Build Coastguard Worker "external_metrics.h", 62*6777b538SAndroid Build Coastguard Worker ] 63*6777b538SAndroid Build Coastguard Worker deps = [ 64*6777b538SAndroid Build Coastguard Worker ":common", 65*6777b538SAndroid Build Coastguard Worker ":proto", 66*6777b538SAndroid Build Coastguard Worker ":structured_events", 67*6777b538SAndroid Build Coastguard Worker "//base", 68*6777b538SAndroid Build Coastguard Worker ] 69*6777b538SAndroid Build Coastguard Worker } 70*6777b538SAndroid Build Coastguard Worker} 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Workerstatic_library("events") { 73*6777b538SAndroid Build Coastguard Worker sources = [ 74*6777b538SAndroid Build Coastguard Worker "enums.h", 75*6777b538SAndroid Build Coastguard Worker "event.cc", 76*6777b538SAndroid Build Coastguard Worker "event.h", 77*6777b538SAndroid Build Coastguard Worker "structured_metrics_client.cc", 78*6777b538SAndroid Build Coastguard Worker "structured_metrics_client.h", 79*6777b538SAndroid Build Coastguard Worker ] 80*6777b538SAndroid Build Coastguard Worker deps = [ "//base" ] 81*6777b538SAndroid Build Coastguard Worker} 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Workerproto_library("proto") { 84*6777b538SAndroid Build Coastguard Worker # These protos are only used internally, so make them visible only to 85*6777b538SAndroid Build Coastguard Worker # subdirectories. 86*6777b538SAndroid Build Coastguard Worker visibility = [ "./*" ] 87*6777b538SAndroid Build Coastguard Worker proto_in_dir = "//" 88*6777b538SAndroid Build Coastguard Worker generate_python = false 89*6777b538SAndroid Build Coastguard Worker sources = [ "proto/event_storage.proto" ] 90*6777b538SAndroid Build Coastguard Worker 91*6777b538SAndroid Build Coastguard Worker # This is required because metrics_proto/BUILD.gn sets proto_in_dir as ".", 92*6777b538SAndroid Build Coastguard Worker # which means protos can't be referred to by absolute paths from within other 93*6777b538SAndroid Build Coastguard Worker # protos. 94*6777b538SAndroid Build Coastguard Worker import_dirs = [ "//third_party/metrics_proto" ] 95*6777b538SAndroid Build Coastguard Worker proto_deps = [ "//third_party/metrics_proto" ] 96*6777b538SAndroid Build Coastguard Worker link_deps = [ "//third_party/metrics_proto" ] 97*6777b538SAndroid Build Coastguard Worker} 98*6777b538SAndroid Build Coastguard Worker 99*6777b538SAndroid Build Coastguard Worker# Sources used by all static libraries in this BUILD file. 100*6777b538SAndroid Build Coastguard Workersource_set("common") { 101*6777b538SAndroid Build Coastguard Worker sources = [ 102*6777b538SAndroid Build Coastguard Worker "delegating_events_processor.cc", 103*6777b538SAndroid Build Coastguard Worker "delegating_events_processor.h", 104*6777b538SAndroid Build Coastguard Worker "events_processor_interface.h", 105*6777b538SAndroid Build Coastguard Worker "histogram_util.cc", 106*6777b538SAndroid Build Coastguard Worker "histogram_util.h", 107*6777b538SAndroid Build Coastguard Worker "recorder.cc", 108*6777b538SAndroid Build Coastguard Worker "recorder.h", 109*6777b538SAndroid Build Coastguard Worker ] 110*6777b538SAndroid Build Coastguard Worker 111*6777b538SAndroid Build Coastguard Worker public_deps = [ 112*6777b538SAndroid Build Coastguard Worker ":events", 113*6777b538SAndroid Build Coastguard Worker ":structured_metrics_features", 114*6777b538SAndroid Build Coastguard Worker ] 115*6777b538SAndroid Build Coastguard Worker 116*6777b538SAndroid Build Coastguard Worker deps = [ 117*6777b538SAndroid Build Coastguard Worker ":proto", 118*6777b538SAndroid Build Coastguard Worker ":structured_metrics_validator", 119*6777b538SAndroid Build Coastguard Worker "//base", 120*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib", 121*6777b538SAndroid Build Coastguard Worker "//components/prefs", 122*6777b538SAndroid Build Coastguard Worker "//third_party/metrics_proto", 123*6777b538SAndroid Build Coastguard Worker ] 124*6777b538SAndroid Build Coastguard Worker} 125*6777b538SAndroid Build Coastguard Worker 126*6777b538SAndroid Build Coastguard Workerstatic_library("structured_metrics_features") { 127*6777b538SAndroid Build Coastguard Worker sources = [ 128*6777b538SAndroid Build Coastguard Worker "structured_metrics_features.cc", 129*6777b538SAndroid Build Coastguard Worker "structured_metrics_features.h", 130*6777b538SAndroid Build Coastguard Worker ] 131*6777b538SAndroid Build Coastguard Worker 132*6777b538SAndroid Build Coastguard Worker public_deps = [ "//base" ] 133*6777b538SAndroid Build Coastguard Worker} 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Workeraction("gen_structured_events") { 136*6777b538SAndroid Build Coastguard Worker script = "//tools/metrics/structured/gen_events.py" 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker # Re-generate the outputs if the codegen code changes: 139*6777b538SAndroid Build Coastguard Worker inputs = [ 140*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/codegen.py", 141*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/gen_events.py", 142*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/sync/model.py", 143*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/sync/model_util.py", 144*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/templates_events.py", 145*6777b538SAndroid Build Coastguard Worker ] 146*6777b538SAndroid Build Coastguard Worker sources = [ "//tools/metrics/structured/sync/structured.xml" ] 147*6777b538SAndroid Build Coastguard Worker 148*6777b538SAndroid Build Coastguard Worker outdir = "$target_gen_dir" 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Worker outputs = [ 151*6777b538SAndroid Build Coastguard Worker outdir + "/structured_events.cc", 152*6777b538SAndroid Build Coastguard Worker outdir + "/structured_events.h", 153*6777b538SAndroid Build Coastguard Worker ] 154*6777b538SAndroid Build Coastguard Worker 155*6777b538SAndroid Build Coastguard Worker args = [ 156*6777b538SAndroid Build Coastguard Worker "--input", 157*6777b538SAndroid Build Coastguard Worker rebase_path(sources[0], root_build_dir), 158*6777b538SAndroid Build Coastguard Worker "--output", 159*6777b538SAndroid Build Coastguard Worker rebase_path(outdir, root_build_dir), 160*6777b538SAndroid Build Coastguard Worker ] 161*6777b538SAndroid Build Coastguard Worker} 162*6777b538SAndroid Build Coastguard Worker 163*6777b538SAndroid Build Coastguard Worker# TODO(b/309122738): Generate the events by platform. 164*6777b538SAndroid Build Coastguard Workerstatic_library("structured_events") { 165*6777b538SAndroid Build Coastguard Worker sources = get_target_outputs(":gen_structured_events") 166*6777b538SAndroid Build Coastguard Worker 167*6777b538SAndroid Build Coastguard Worker public_deps = [ 168*6777b538SAndroid Build Coastguard Worker ":events", 169*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/buildflags", 170*6777b538SAndroid Build Coastguard Worker ] 171*6777b538SAndroid Build Coastguard Worker 172*6777b538SAndroid Build Coastguard Worker deps = [ 173*6777b538SAndroid Build Coastguard Worker ":gen_structured_events", 174*6777b538SAndroid Build Coastguard Worker "//base", 175*6777b538SAndroid Build Coastguard Worker ] 176*6777b538SAndroid Build Coastguard Worker} 177*6777b538SAndroid Build Coastguard Worker 178*6777b538SAndroid Build Coastguard Workeraction("gen_structured_metrics_validator") { 179*6777b538SAndroid Build Coastguard Worker script = "//tools/metrics/structured/gen_validator.py" 180*6777b538SAndroid Build Coastguard Worker 181*6777b538SAndroid Build Coastguard Worker # Re-generate the outputs if the codegen code changes: 182*6777b538SAndroid Build Coastguard Worker inputs = [ 183*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/codegen.py", 184*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/gen_validator.py", 185*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/sync/model.py", 186*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/sync/model_util.py", 187*6777b538SAndroid Build Coastguard Worker "//tools/metrics/structured/templates_validator.py", 188*6777b538SAndroid Build Coastguard Worker ] 189*6777b538SAndroid Build Coastguard Worker sources = [ "//tools/metrics/structured/sync/structured.xml" ] 190*6777b538SAndroid Build Coastguard Worker 191*6777b538SAndroid Build Coastguard Worker outdir = "$target_gen_dir" 192*6777b538SAndroid Build Coastguard Worker 193*6777b538SAndroid Build Coastguard Worker outputs = [ 194*6777b538SAndroid Build Coastguard Worker outdir + "/structured_metrics_validator.cc", 195*6777b538SAndroid Build Coastguard Worker outdir + "/structured_metrics_validator.h", 196*6777b538SAndroid Build Coastguard Worker ] 197*6777b538SAndroid Build Coastguard Worker 198*6777b538SAndroid Build Coastguard Worker args = [ 199*6777b538SAndroid Build Coastguard Worker "--input", 200*6777b538SAndroid Build Coastguard Worker rebase_path(sources[0], root_build_dir), 201*6777b538SAndroid Build Coastguard Worker "--output", 202*6777b538SAndroid Build Coastguard Worker rebase_path(outdir, root_build_dir), 203*6777b538SAndroid Build Coastguard Worker ] 204*6777b538SAndroid Build Coastguard Worker 205*6777b538SAndroid Build Coastguard Worker if (is_chromeos_ash) { 206*6777b538SAndroid Build Coastguard Worker sources += [ "//tools/metrics/structured/sync/structured_chromiumos.xml" ] 207*6777b538SAndroid Build Coastguard Worker 208*6777b538SAndroid Build Coastguard Worker args += [ 209*6777b538SAndroid Build Coastguard Worker "--cros_input", 210*6777b538SAndroid Build Coastguard Worker rebase_path(sources[1], root_build_dir), 211*6777b538SAndroid Build Coastguard Worker ] 212*6777b538SAndroid Build Coastguard Worker } 213*6777b538SAndroid Build Coastguard Worker} 214*6777b538SAndroid Build Coastguard Worker 215*6777b538SAndroid Build Coastguard Workerstatic_library("structured_metrics_validator") { 216*6777b538SAndroid Build Coastguard Worker sources = get_target_outputs(":gen_structured_metrics_validator") + [ 217*6777b538SAndroid Build Coastguard Worker "event_validator.cc", 218*6777b538SAndroid Build Coastguard Worker "event_validator.h", 219*6777b538SAndroid Build Coastguard Worker "project_validator.cc", 220*6777b538SAndroid Build Coastguard Worker "project_validator.h", 221*6777b538SAndroid Build Coastguard Worker ] 222*6777b538SAndroid Build Coastguard Worker 223*6777b538SAndroid Build Coastguard Worker deps = [ 224*6777b538SAndroid Build Coastguard Worker ":events", 225*6777b538SAndroid Build Coastguard Worker ":gen_structured_metrics_validator", 226*6777b538SAndroid Build Coastguard Worker "//base", 227*6777b538SAndroid Build Coastguard Worker "//third_party/metrics_proto", 228*6777b538SAndroid Build Coastguard Worker ] 229*6777b538SAndroid Build Coastguard Worker} 230*6777b538SAndroid Build Coastguard Worker 231*6777b538SAndroid Build Coastguard Workerstatic_library("test_support") { 232*6777b538SAndroid Build Coastguard Worker testonly = true 233*6777b538SAndroid Build Coastguard Worker sources = [ 234*6777b538SAndroid Build Coastguard Worker "test/test_event_storage.cc", 235*6777b538SAndroid Build Coastguard Worker "test/test_event_storage.h", 236*6777b538SAndroid Build Coastguard Worker "test/test_key_data_provider.cc", 237*6777b538SAndroid Build Coastguard Worker "test/test_key_data_provider.h", 238*6777b538SAndroid Build Coastguard Worker "test/test_structured_metrics_provider.cc", 239*6777b538SAndroid Build Coastguard Worker "test/test_structured_metrics_provider.h", 240*6777b538SAndroid Build Coastguard Worker "test/test_structured_metrics_recorder.cc", 241*6777b538SAndroid Build Coastguard Worker "test/test_structured_metrics_recorder.h", 242*6777b538SAndroid Build Coastguard Worker ] 243*6777b538SAndroid Build Coastguard Worker deps = [ 244*6777b538SAndroid Build Coastguard Worker ":structured", 245*6777b538SAndroid Build Coastguard Worker ":structured_metrics_validator", 246*6777b538SAndroid Build Coastguard Worker "//base", 247*6777b538SAndroid Build Coastguard Worker "//base/test:test_support", 248*6777b538SAndroid Build Coastguard Worker "//components/metrics:metrics", 249*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib", 250*6777b538SAndroid Build Coastguard Worker ] 251*6777b538SAndroid Build Coastguard Worker} 252*6777b538SAndroid Build Coastguard Worker 253*6777b538SAndroid Build Coastguard Workersource_set("unit_tests") { 254*6777b538SAndroid Build Coastguard Worker testonly = true 255*6777b538SAndroid Build Coastguard Worker sources = [ 256*6777b538SAndroid Build Coastguard Worker "key_data_prefs_delegate_unittest.cc", 257*6777b538SAndroid Build Coastguard Worker "structured_metrics_recorder_unittest.cc", 258*6777b538SAndroid Build Coastguard Worker "structured_metrics_service_unittest.cc", 259*6777b538SAndroid Build Coastguard Worker ] 260*6777b538SAndroid Build Coastguard Worker 261*6777b538SAndroid Build Coastguard Worker deps = [ 262*6777b538SAndroid Build Coastguard Worker ":events", 263*6777b538SAndroid Build Coastguard Worker ":proto", 264*6777b538SAndroid Build Coastguard Worker ":structured", 265*6777b538SAndroid Build Coastguard Worker ":structured_events", 266*6777b538SAndroid Build Coastguard Worker ":structured_metrics_validator", 267*6777b538SAndroid Build Coastguard Worker ":test_support", 268*6777b538SAndroid Build Coastguard Worker "//base", 269*6777b538SAndroid Build Coastguard Worker "//base/test:test_support", 270*6777b538SAndroid Build Coastguard Worker "//components/metrics", 271*6777b538SAndroid Build Coastguard Worker "//components/metrics:test_support", 272*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib", 273*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib:proto", 274*6777b538SAndroid Build Coastguard Worker "//components/prefs", 275*6777b538SAndroid Build Coastguard Worker "//components/prefs:test_support", 276*6777b538SAndroid Build Coastguard Worker "//testing/gtest", 277*6777b538SAndroid Build Coastguard Worker ] 278*6777b538SAndroid Build Coastguard Worker 279*6777b538SAndroid Build Coastguard Worker if (is_chromeos_ash) { 280*6777b538SAndroid Build Coastguard Worker sources += [ "external_metrics_unittest.cc" ] 281*6777b538SAndroid Build Coastguard Worker 282*6777b538SAndroid Build Coastguard Worker deps += [ ":external_metrics" ] 283*6777b538SAndroid Build Coastguard Worker } 284*6777b538SAndroid Build Coastguard Worker} 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard Worker# Convenience testing target 287*6777b538SAndroid Build Coastguard Workertest("structured_metrics_unittests") { 288*6777b538SAndroid Build Coastguard Worker deps = [ 289*6777b538SAndroid Build Coastguard Worker ":unit_tests", 290*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/lib:unit_tests", 291*6777b538SAndroid Build Coastguard Worker "//components/metrics/structured/mojom:unit_tests", 292*6777b538SAndroid Build Coastguard Worker "//components/test:run_all_unittests", 293*6777b538SAndroid Build Coastguard Worker ] 294*6777b538SAndroid Build Coastguard Worker} 295