|  | # Copyright 2017 The Fuchsia Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | import("//build/components.gni") | 
|  | import("//build/config.gni") | 
|  | import("//third_party/cobalt/metrics_registry.gni") | 
|  |  | 
|  | declare_args() { | 
|  | # Selects the Cobalt environment to send data to. Choices: | 
|  | #   "LOCAL" - record log data locally to a file | 
|  | #   "DEVEL" - the non-prod environment for use in testing | 
|  | #   "PROD" - the production environment | 
|  | cobalt_environment = "PROD" | 
|  | } | 
|  |  | 
|  | # Generates the global_metrics_registry.pb file. | 
|  | metrics_registry("global_metrics_registry") { | 
|  | global = true | 
|  | } | 
|  |  | 
|  | # Include the global_metrics_registry.pb in the config data for Cobalt. | 
|  | config_data("cobalt_registry") { | 
|  | for_pkg = "cobalt" | 
|  | deps = [ ":global_metrics_registry" ] | 
|  | sources = [ "$target_gen_dir/global_metrics_registry.pb" ] | 
|  | outputs = [ "global_metrics_registry.pb" ] | 
|  | } | 
|  |  | 
|  | source_set("lib") { | 
|  | sources = [ | 
|  | "activity_listener_impl.cc", | 
|  | "activity_listener_impl.h", | 
|  | "cobalt_app.cc", | 
|  | "cobalt_app.h", | 
|  | "cobalt_controller_impl.cc", | 
|  | "cobalt_controller_impl.h", | 
|  | "configuration_data.cc", | 
|  | "configuration_data.h", | 
|  | "logger_factory_impl.cc", | 
|  | "logger_factory_impl.h", | 
|  | "logger_impl.cc", | 
|  | "logger_impl.h", | 
|  | "metric_event_logger_factory_impl.cc", | 
|  | "metric_event_logger_factory_impl.h", | 
|  | "metric_event_logger_impl.cc", | 
|  | "metric_event_logger_impl.h", | 
|  | "process_lifecycle_impl.h", | 
|  | "system_data_updater_impl.cc", | 
|  | "system_data_updater_impl.h", | 
|  | "timer_manager.cc", | 
|  | "timer_manager.h", | 
|  | "user_consent_watcher.cc", | 
|  | "user_consent_watcher.h", | 
|  | "utils.cc", | 
|  | "utils.h", | 
|  | ] | 
|  |  | 
|  | public_deps = [ | 
|  | "//garnet/public/lib/fostr/fidl/fuchsia.settings", | 
|  | "//sdk/fidl/fuchsia.cobalt", | 
|  | "//sdk/fidl/fuchsia.metrics", | 
|  | "//sdk/fidl/fuchsia.process.lifecycle", | 
|  | "//sdk/fidl/fuchsia.ui.activity", | 
|  | "//sdk/lib/sys/cpp", | 
|  | "//sdk/lib/sys/inspect/cpp", | 
|  | "//sdk/lib/syslog/cpp", | 
|  | "//src/cobalt/bin/utils:clock", | 
|  | "//src/cobalt/bin/utils:fuchsia_http_client", | 
|  | "//src/connectivity/wlan/lib/mlme/cpp:mlme", | 
|  | "//src/lib/backoff", | 
|  | "//src/lib/fsl", | 
|  | "//src/lib/fxl", | 
|  | "//src/lib/json_parser", | 
|  | "//third_party/cobalt/src/lib/util:file_util", | 
|  | "//third_party/cobalt/src/lib/util:pem_util", | 
|  | "//third_party/cobalt/src/lib/util:posix_file_system", | 
|  | "//third_party/cobalt/src/logger", | 
|  | "//third_party/cobalt/src/public:activity_listener_interface", | 
|  | "//third_party/cobalt/src/public:cobalt_config", | 
|  | "//third_party/cobalt/src/public:cobalt_service", | 
|  | "//third_party/cobalt/src/public:cobalt_service_interface", | 
|  | "//third_party/cobalt/src/system_data", | 
|  | "//third_party/cobalt/src/system_data:configuration_data", | 
|  | "//zircon/system/ulib/async-loop:async-loop-cpp", | 
|  | "//zircon/system/ulib/async-loop:async-loop-default", | 
|  | ] | 
|  | deps = [ "//sdk/lib/fit-promise" ] | 
|  | } | 
|  |  | 
|  | executable("app") { | 
|  | output_name = "cobalt" | 
|  |  | 
|  | sources = [ "cobalt_main.cc" ] | 
|  |  | 
|  | deps = [ | 
|  | ":lib", | 
|  | "//sdk/fidl/fuchsia.scheduler", | 
|  | "//sdk/fidl/fuchsia.sysinfo", | 
|  | "//zircon/system/ulib/trace", | 
|  | "//zircon/system/ulib/trace-provider:trace-provider-with-fdio", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # In the default config, Cobalt will upload all metrics (including max_release_stage=DEBUG metrics) | 
|  | config_data("config") { | 
|  | for_pkg = "cobalt" | 
|  |  | 
|  | sources = [ "configs/default_config.json" ] | 
|  | outputs = [ "config.json" ] | 
|  | } | 
|  |  | 
|  | # In the "user" config, Cobalt will behave like it will on an end-user device, meaning it will only | 
|  | # upload metrics marked with max_release_stage=GA. | 
|  | config_data("user_config") { | 
|  | for_pkg = "cobalt" | 
|  |  | 
|  | sources = [ "configs/user_config.json" ] | 
|  | outputs = [ "config.json" ] | 
|  | } | 
|  |  | 
|  | # In the "userdebug" config, Cobalt will behave like it will on an end-user device, except that it | 
|  | # will upload DEBUG metrics. | 
|  | config_data("userdebug_config") { | 
|  | for_pkg = "cobalt" | 
|  |  | 
|  | sources = [ "configs/userdebug_config.json" ] | 
|  | outputs = [ "config.json" ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("component") { | 
|  | component_name = "cobalt" | 
|  | manifest = "meta/cobalt.cmx" | 
|  | deps = [ ":app" ] | 
|  | } | 
|  |  | 
|  | resource("cobalt_environment") { | 
|  | # Environment selection for cobalt. | 
|  | if (cobalt_environment == "PROD") { | 
|  | sources = [ "configs/prod_environment" ] | 
|  | } else if (cobalt_environment == "DEVEL") { | 
|  | sources = [ "configs/devel_environment" ] | 
|  | } else if (cobalt_environment == "LOCAL") { | 
|  | sources = [ "configs/local_environment" ] | 
|  | } else { | 
|  | assert(false, "Unknown cobalt_environment: $cobalt_environment") | 
|  | } | 
|  | outputs = [ "data/cobalt_environment" ] | 
|  | } | 
|  |  | 
|  | resource("analyzer_devel_public") { | 
|  | # Cobalt 1.0 analyzer public key for devel environment. | 
|  | sources = | 
|  | [ rebase_path("//third_party/cobalt/keys/analyzer_public.cobalt_key") ] | 
|  | outputs = [ "data/keys/analyzer_devel_public" ] | 
|  | } | 
|  |  | 
|  | resource("shuffler_devel_public") { | 
|  | # Cobalt 1.0 shuffler public key for devel environment. | 
|  | sources = | 
|  | [ rebase_path("//third_party/cobalt/keys/shuffler_public.cobalt_key") ] | 
|  | outputs = [ "data/keys/shuffler_devel_public" ] | 
|  | } | 
|  |  | 
|  | resource("analyzer_prod_public") { | 
|  | # Cobalt 1.0 analyzer public key for prod environment. | 
|  | sources = [ rebase_path( | 
|  | "//third_party/cobalt/keys/analyzer_prod_public.cobalt_key") ] | 
|  | outputs = [ "data/keys/analyzer_prod_public" ] | 
|  | } | 
|  |  | 
|  | resource("shuffler_prod_public") { | 
|  | # Cobalt 1.0 shuffler public key for prod environment. | 
|  | sources = [ rebase_path( | 
|  | "//third_party/cobalt/keys/shuffler_prod_public.cobalt_key") ] | 
|  | outputs = [ "data/keys/shuffler_prod_public" ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("cobalt") { | 
|  | deps = [ | 
|  | ":analyzer_devel_public", | 
|  | ":analyzer_prod_public", | 
|  | ":cobalt_environment", | 
|  | ":component", | 
|  | ":shuffler_devel_public", | 
|  | ":shuffler_prod_public", | 
|  | ] | 
|  | } | 
|  |  | 
|  | metrics_registry("testapp_metrics_registry") { | 
|  | # This must match the ID of the test_app2 Cobalt project as specified in: | 
|  | # third_party/cobalt_config/projects.yaml | 
|  | project_id = 657579885 | 
|  | namespace = "testapp_registry" | 
|  | generate_cc = true | 
|  | generate_binarypb = true | 
|  | } | 
|  |  | 
|  | executable("cobalt_app_unittests") { | 
|  | testonly = true | 
|  | sources = [ | 
|  | "activity_listener_impl_test.cc", | 
|  | "cobalt_app_test.cc", | 
|  | "cobalt_controller_impl_test.cc", | 
|  | "configuration_data_test.cc", | 
|  | "logger_impl_test.cc", | 
|  | "metric_event_logger_impl_test.cc", | 
|  | "system_data_updater_impl_test.cc", | 
|  | "timer_manager_test.cc", | 
|  | "user_consent_watcher_test.cc", | 
|  | ] | 
|  | deps = [ | 
|  | ":lib", | 
|  | ":testapp_metrics_registry_cc", | 
|  | "//garnet/public/lib/gtest", | 
|  | "//sdk/fidl/fuchsia.cobalt", | 
|  | "//sdk/lib/sys/cpp/testing:unit", | 
|  | "//src/cobalt/bin/testing:fake_clock_lib", | 
|  | "//src/cobalt/bin/testing:fake_http_loader", | 
|  | "//src/lib/cobalt/cpp:cobalt_event_builder", | 
|  | "//src/lib/cobalt/cpp:metric_event_builder", | 
|  | "//src/lib/fsl", | 
|  | "//src/lib/fxl/test:gtest_main", | 
|  | "//third_party/cobalt/src/logger:fake_logger", | 
|  | "//third_party/cobalt/src/logger:logger_test_utils", | 
|  | "//third_party/cobalt/src/public/testing:fake_cobalt_service", | 
|  | "//third_party/googletest:gmock", | 
|  | ] | 
|  | } |