• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//
2// Copyright (C) 2017 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17package {
18    default_applicable_licenses: ["Android-Apache-2.0"],
19}
20
21cc_defaults {
22    name: "statsd_defaults",
23
24    cflags: [
25        "-Wno-deprecated-declarations",
26        "-Wthread-safety",
27    ],
28    tidy: true,
29    tidy_flags: [
30        // Only check our headers
31        "-header-filter=^packages/modules/StatsD/statsd",
32    ],
33
34    tidy_checks: [
35        "android-*",
36        "bugprone-*",
37        "cert-*",
38        "clang-analyzer-security*",
39        "google-*",
40        "misc-*",
41        "performance-*",
42        "-bugprone-narrowing-conversions", // lots of unsigned -> int conversions
43        "-cert-err34-c",
44        "-cert-msc30-c", // warning: rand() has limited randomness; use C++11 random library
45        "-cert-msc50-cpp", // warning: rand() has limited randomness; use C++11 random library
46    ],
47    tidy_checks_as_errors: [
48        "android-*",
49        "bugprone-*",
50        "cert-*",
51        "clang-analyzer-security*",
52        "google-*",
53        "misc-*",
54        "performance-*",
55    ],
56    srcs: [
57        "src/active_config_list.proto",
58        "src/anomaly/AlarmMonitor.cpp",
59        "src/anomaly/AlarmTracker.cpp",
60        "src/anomaly/AnomalyTracker.cpp",
61        "src/anomaly/DurationAnomalyTracker.cpp",
62        "src/anomaly/subscriber_util.cpp",
63        "src/condition/CombinationConditionTracker.cpp",
64        "src/condition/condition_util.cpp",
65        "src/condition/ConditionWizard.cpp",
66        "src/condition/SimpleConditionTracker.cpp",
67        "src/config/ConfigKey.cpp",
68        "src/config/ConfigListener.cpp",
69        "src/config/ConfigManager.cpp",
70        "src/experiment_ids.proto",
71        "src/external/Perfetto.cpp",
72        "src/external/PullResultReceiver.cpp",
73        "src/external/puller_util.cpp",
74        "src/external/StatsCallbackPuller.cpp",
75        "src/external/StatsPuller.cpp",
76        "src/external/StatsPullerManager.cpp",
77        "src/external/TrainInfoPuller.cpp",
78        "src/external/Uprobestats.cpp",
79        "src/FieldValue.cpp",
80        "src/flags/FlagProvider.cpp",
81        "src/guardrail/StatsdStats.cpp",
82        "src/hash.cpp",
83        "src/HashableDimensionKey.cpp",
84        "src/logd/LogEvent.cpp",
85        "src/logd/LogEventQueue.cpp",
86        "src/logd/logevent_util.cpp",
87        "src/matchers/CombinationAtomMatchingTracker.cpp",
88        "src/matchers/EventMatcherWizard.cpp",
89        "src/matchers/matcher_util.cpp",
90        "src/matchers/SimpleAtomMatchingTracker.cpp",
91        "src/metadata_util.cpp",
92        "src/metrics/CountMetricProducer.cpp",
93        "src/metrics/duration_helper/MaxDurationTracker.cpp",
94        "src/metrics/duration_helper/OringDurationTracker.cpp",
95        "src/metrics/DurationMetricProducer.cpp",
96        "src/metrics/EventMetricProducer.cpp",
97        "src/metrics/RestrictedEventMetricProducer.cpp",
98        "src/metrics/GaugeMetricProducer.cpp",
99        "src/metrics/KllMetricProducer.cpp",
100        "src/metrics/MetricProducer.cpp",
101        "src/metrics/MetricsManager.cpp",
102        "src/metrics/ValueMetricProducer.cpp",
103        "src/metrics/parsing_utils/config_update_utils.cpp",
104        "src/metrics/parsing_utils/metrics_manager_util.cpp",
105        "src/metrics/NumericValueMetricProducer.cpp",
106        "src/packages/UidMap.cpp",
107        "src/shell/shell_config.proto",
108        "src/shell/ShellSubscriber.cpp",
109        "src/shell/ShellSubscriberClient.cpp",
110        "src/socket/StatsSocketListener.cpp",
111        "src/state/StateManager.cpp",
112        "src/state/StateTracker.cpp",
113        "src/stats_log_util.cpp",
114        "src/stats_policy_config.proto",
115        "src/statscompanion_util.cpp",
116        "src/statsd_config.proto",
117        "src/statsd_metadata.proto",
118        "src/guardrail/stats_log_enums.proto",
119        "src/StatsLogProcessor.cpp",
120        "src/StatsService.cpp",
121        "src/storage/StorageManager.cpp",
122        "src/subscriber/IncidentdReporter.cpp",
123        "src/subscriber/SubscriberReporter.cpp",
124        "src/uid_data.proto",
125        "src/utils/MultiConditionTrigger.cpp",
126        "src/utils/DbUtils.cpp",
127        "src/utils/Regex.cpp",
128        "src/utils/RestrictedPolicyManager.cpp",
129        "src/utils/ShardOffsetProvider.cpp",
130    ],
131
132    local_include_dirs: [
133        "src",
134    ],
135
136    static_libs: [
137        "libbase",
138        "libcutils",
139        "libkll",
140        "libmodules-utils-build",
141        "libprotoutil",
142        "libstatslog_statsd",
143        "libsysutils",
144        "libutils",
145        "server_configurable_flags",
146        "statsd-aidl-ndk",
147        "libsqlite_static_noicu",
148    ],
149    shared_libs: [
150        "libbinder_ndk",
151        "libincident",
152        "liblog",
153        "libstatssocket",
154    ],
155    header_libs: [
156        "libgtest_prod_headers",
157    ],
158}
159
160genrule {
161    name: "statslog_statsd.h",
162    tools: ["stats-log-api-gen"],
163    cmd: "$(location stats-log-api-gen) " +
164        "--header $(genDir)/statslog_statsd.h " +
165        "--module statsd " +
166        "--namespace android,os,statsd,util",
167    out: [
168        "statslog_statsd.h",
169    ],
170}
171
172genrule {
173    name: "statslog_statsd.cpp",
174    tools: ["stats-log-api-gen"],
175    cmd: "$(location stats-log-api-gen) " +
176        "--cpp $(genDir)/statslog_statsd.cpp " +
177        "--module statsd " +
178        "--namespace android,os,statsd,util " +
179        "--importHeader statslog_statsd.h",
180    out: [
181        "statslog_statsd.cpp",
182    ],
183}
184
185genrule {
186    name: "statslog_statsdtest.h",
187    tools: ["stats-log-api-gen"],
188    cmd: "$(location stats-log-api-gen) " +
189        "--header $(genDir)/statslog_statsdtest.h " +
190        "--module statsdtest " +
191        "--namespace android,os,statsd,util",
192    out: [
193        "statslog_statsdtest.h",
194    ],
195}
196
197genrule {
198    name: "statslog_statsdtest.cpp",
199    tools: ["stats-log-api-gen"],
200    cmd: "$(location stats-log-api-gen) " +
201        "--cpp $(genDir)/statslog_statsdtest.cpp " +
202        "--module statsdtest " +
203        "--namespace android,os,statsd,util " +
204        "--importHeader statslog_statsdtest.h",
205    out: [
206        "statslog_statsdtest.cpp",
207    ],
208}
209
210cc_library_static {
211    name: "libstatslog_statsdtest",
212    generated_sources: ["statslog_statsdtest.cpp"],
213    generated_headers: ["statslog_statsdtest.h"],
214    export_generated_headers: ["statslog_statsdtest.h"],
215    shared_libs: [
216        "libstatssocket",
217        "libstatspull",
218    ],
219}
220
221cc_library_static {
222    name: "libstatslog_statsd",
223    generated_sources: ["statslog_statsd.cpp"],
224    generated_headers: ["statslog_statsd.h"],
225    export_generated_headers: ["statslog_statsd.h"],
226    apex_available: [
227        "com.android.os.statsd",
228        "test_com.android.os.statsd",
229    ],
230    min_sdk_version: "30",
231    shared_libs: [
232        "libstatssocket",
233        "libstatspull",
234    ],
235    export_shared_lib_headers: [
236        "libstatspull",
237    ],
238}
239
240// =========
241// statsd
242// =========
243
244cc_binary {
245    name: "statsd",
246    defaults: ["statsd_defaults"],
247
248    srcs: ["src/main.cpp"],
249
250    cflags: [
251        "-Wall",
252        "-Wextra",
253        "-Werror",
254        "-Wno-unused-parameter",
255        // optimize for size (protobuf glop can get big)
256        "-Os",
257        // "-g",
258        // "-O0",
259    ],
260
261    proto: {
262        type: "lite",
263        static: true,
264    },
265    stl: "libc++_static",
266
267    apex_available: [
268        "com.android.os.statsd",
269        "test_com.android.os.statsd",
270    ],
271    min_sdk_version: "30",
272}
273
274cc_defaults {
275    name: "statsd_test_defaults",
276    defaults: ["statsd_defaults"],
277    srcs: [
278        // atom_field_options.proto needs field_options.proto, but that is
279        // not included in libprotobuf-cpp-lite, so compile it here.
280        ":libprotobuf-internal-protos",
281        ":libstats_internal_protos",
282
283        "src/shell/shell_data.proto",
284        "src/stats_log.proto",
285    ],
286    cflags: [
287        "-Wall",
288        "-Werror",
289        "-Wno-enum-compare",
290        "-Wno-missing-field-initializers",
291        "-Wno-unused-function",
292        "-Wno-unused-parameter",
293        "-Wno-unused-variable",
294    ],
295    static_libs: [
296        "libgmock",
297        "libstatslog_statsdtest",
298    ],
299    proto: {
300        type: "lite",
301        include_dirs: [
302            "external/protobuf/src",
303            "frameworks/proto_logging/stats",
304        ],
305        static: true,
306    },
307}
308
309cc_library_static {
310    name: "libstats_test_utils",
311    defaults: ["statsd_test_defaults"],
312    srcs: [
313        "tests/metrics/metrics_test_helper.cpp",
314        "tests/statsd_test_util.cpp",
315    ],
316    tidy_timeout_srcs: [
317        "tests/statsd_test_util.cpp",
318    ],
319}
320
321// ==============
322// statsd_test
323// ==============
324
325cc_test {
326    name: "statsd_test",
327    defaults: ["statsd_test_defaults"],
328    test_suites: [
329        "device-tests",
330        "mts-statsd",
331    ],
332    test_config: "statsd_test.xml",
333
334    //TODO(b/153588990): Remove when the build system properly separates
335    //32bit and 64bit architectures.
336    compile_multilib: "both",
337    multilib: {
338        lib64: {
339            suffix: "64",
340        },
341        lib32: {
342            suffix: "32",
343        },
344    },
345
346    require_root: true,
347
348    tidy_timeout_srcs: [
349        "tests/condition/SimpleConditionTracker_test.cpp",
350        "tests/ConfigManager_test.cpp",
351        "tests/e2e/Anomaly_count_e2e_test.cpp",
352        "tests/e2e/Anomaly_duration_sum_e2e_test.cpp",
353        "tests/e2e/ConfigUpdate_e2e_ab_test.cpp",
354        "tests/e2e/ConfigUpdate_e2e_test.cpp",
355        "tests/e2e/CountMetric_e2e_test.cpp",
356        "tests/e2e/DurationMetric_e2e_test.cpp",
357        "tests/e2e/GaugeMetric_e2e_pull_test.cpp",
358        "tests/e2e/MetricActivation_e2e_test.cpp",
359        "tests/e2e/PartialBucket_e2e_test.cpp",
360        "tests/e2e/ValueMetric_pull_e2e_test.cpp",
361        "tests/e2e/WakelockDuration_e2e_test.cpp",
362        "tests/external/puller_util_test.cpp",
363        "tests/external/StatsPuller_test.cpp",
364        "tests/FieldValue_test.cpp",
365        "tests/guardrail/StatsdStats_test.cpp",
366        "tests/LogEvent_test.cpp",
367        "tests/metrics/CountMetricProducer_test.cpp",
368        "tests/metrics/DurationMetricProducer_test.cpp",
369        "tests/metrics/EventMetricProducer_test.cpp",
370        "tests/metrics/GaugeMetricProducer_test.cpp",
371        "tests/metrics/KllMetricProducer_test.cpp",
372        "tests/metrics/MaxDurationTracker_test.cpp",
373        "tests/metrics/NumericValueMetricProducer_test.cpp",
374        "tests/metrics/OringDurationTracker_test.cpp",
375        "tests/metrics/RestrictedEventMetricProducer_test.cpp",
376        "tests/MetricsManager_test.cpp",
377        "tests/metrics/parsing_utils/config_update_utils_test.cpp",
378        "tests/metrics/parsing_utils/metrics_manager_util_test.cpp",
379        "tests/state/StateTracker_test.cpp",
380        "tests/StatsLogProcessor_test.cpp",
381        "tests/UidMap_test.cpp",
382    ],
383
384    srcs: [
385        "tests/AlarmMonitor_test.cpp",
386        "tests/anomaly/AlarmTracker_test.cpp",
387        "tests/anomaly/AnomalyTracker_test.cpp",
388        "tests/condition/CombinationConditionTracker_test.cpp",
389        "tests/condition/ConditionTimer_test.cpp",
390        "tests/condition/SimpleConditionTracker_test.cpp",
391        "tests/ConfigManager_test.cpp",
392        "tests/e2e/Alarm_e2e_test.cpp",
393        "tests/e2e/Anomaly_count_e2e_test.cpp",
394        "tests/e2e/Anomaly_duration_sum_e2e_test.cpp",
395        "tests/e2e/Attribution_e2e_test.cpp",
396        "tests/e2e/ConfigTtl_e2e_test.cpp",
397        "tests/e2e/ConfigUpdate_e2e_ab_test.cpp",
398        "tests/e2e/ConfigUpdate_e2e_test.cpp",
399        "tests/e2e/CountMetric_e2e_test.cpp",
400        "tests/e2e/DurationMetric_e2e_test.cpp",
401        "tests/e2e/EventMetric_e2e_test.cpp",
402        "tests/e2e/GaugeMetric_e2e_pull_test.cpp",
403        "tests/e2e/GaugeMetric_e2e_push_test.cpp",
404        "tests/e2e/KllMetric_e2e_test.cpp",
405        "tests/e2e/MetricActivation_e2e_test.cpp",
406        "tests/e2e/MetricConditionLink_e2e_test.cpp",
407        "tests/e2e/PartialBucket_e2e_test.cpp",
408        "tests/e2e/RestrictedConfig_e2e_test.cpp",
409        "tests/e2e/RestrictedEventMetric_e2e_test.cpp",
410        "tests/e2e/StringReplace_e2e_test.cpp",
411        "tests/e2e/ValueMetric_pull_e2e_test.cpp",
412        "tests/e2e/WakelockDuration_e2e_test.cpp",
413        "tests/external/puller_util_test.cpp",
414        "tests/external/StatsCallbackPuller_test.cpp",
415        "tests/external/StatsPuller_test.cpp",
416        "tests/external/StatsPullerManager_test.cpp",
417        "tests/FieldValue_test.cpp",
418        "tests/flags/FlagProvider_test.cpp",
419        "tests/guardrail/StatsdStats_test.cpp",
420        "tests/HashableDimensionKey_test.cpp",
421        "tests/indexed_priority_queue_test.cpp",
422        "tests/log_event/LogEventQueue_test.cpp",
423        "tests/LogEntryMatcher_test.cpp",
424        "tests/LogEvent_test.cpp",
425        "tests/metadata_util_test.cpp",
426        "tests/metrics/CountMetricProducer_test.cpp",
427        "tests/metrics/DurationMetricProducer_test.cpp",
428        "tests/metrics/EventMetricProducer_test.cpp",
429        "tests/metrics/GaugeMetricProducer_test.cpp",
430        "tests/metrics/KllMetricProducer_test.cpp",
431        "tests/metrics/MaxDurationTracker_test.cpp",
432        "tests/metrics/OringDurationTracker_test.cpp",
433        "tests/metrics/NumericValueMetricProducer_test.cpp",
434        "tests/metrics/RestrictedEventMetricProducer_test.cpp",
435        "tests/metrics/parsing_utils/config_update_utils_test.cpp",
436        "tests/metrics/parsing_utils/metrics_manager_util_test.cpp",
437        "tests/subscriber/SubscriberReporter_test.cpp",
438        "tests/DataCorruptionReason_test.cpp",
439        "tests/LogEventFilter_test.cpp",
440        "tests/MetricsManager_test.cpp",
441        "tests/shell/ShellSubscriber_test.cpp",
442        "tests/state/StateTracker_test.cpp",
443        "tests/statsd_test_util_test.cpp",
444        "tests/SocketListener_test.cpp",
445        "tests/StatsLogProcessor_test.cpp",
446        "tests/StatsService_test.cpp",
447        "tests/storage/StorageManager_test.cpp",
448        "tests/UidMap_test.cpp",
449        "tests/utils/MultiConditionTrigger_test.cpp",
450        "tests/utils/DbUtils_test.cpp",
451    ],
452
453    static_libs: [
454        "libstatsgtestmatchers",
455        "libstats_test_utils",
456    ],
457
458    min_sdk_version: "30",
459    test_for: ["com.android.os.statsd"],
460}
461
462//#############################
463// statsd micro benchmark
464//#############################
465
466cc_benchmark {
467    name: "statsd_benchmark",
468    defaults: ["statsd_test_defaults"],
469
470    srcs: [
471        "benchmark/data_structures_benchmark.cpp",
472        "benchmark/db_benchmark.cpp",
473        "benchmark/duration_metric_benchmark.cpp",
474        "benchmark/filter_value_benchmark.cpp",
475        "benchmark/get_dimensions_for_condition_benchmark.cpp",
476        "benchmark/hello_world_benchmark.cpp",
477        "benchmark/log_event_benchmark.cpp",
478        "benchmark/log_event_filter_benchmark.cpp",
479        "benchmark/main.cpp",
480        "benchmark/on_log_event_benchmark.cpp",
481        "benchmark/stats_write_benchmark.cpp",
482        "benchmark/loss_info_container_benchmark.cpp",
483        "benchmark/string_transform_benchmark.cpp",
484        "benchmark/value_metric_benchmark.cpp",
485    ],
486
487    cflags: [
488        // Bug: http://b/29823425 Disable -Wvarargs for Clang update to r271374
489        "-Wno-varargs",
490    ],
491
492    static_libs: [
493        "libgtest",
494        "libstats_test_utils",
495    ],
496
497    test_for: ["com.android.os.statsd"],
498}
499
500// ====  java proto device library (for test only)  ==============================
501java_library {
502    name: "statsdprotolite",
503    sdk_version: "core_current",
504    proto: {
505        type: "lite",
506        include_dirs: [
507            "external/protobuf/src",
508            "frameworks/proto_logging/stats",
509        ],
510    },
511
512    srcs: [
513        ":libstats_atoms_proto",
514        "src/shell/shell_config.proto",
515        "src/shell/shell_data.proto",
516        "src/stats_log.proto",
517        "src/statsd_config.proto",
518        "src/guardrail/stats_log_enums.proto",
519    ],
520
521    static_libs: [
522        "platformprotoslite",
523    ],
524    // Protos have lots of MissingOverride and similar.
525    errorprone: {
526        javacflags: ["-XepDisableAllChecks"],
527    },
528}
529
530java_library {
531    name: "statsdprotonano",
532    sdk_version: "9",
533    proto: {
534        type: "nano",
535        output_params: ["store_unknown_fields=true"],
536        include_dirs: [
537            "external/protobuf/src",
538            "frameworks/proto_logging/stats",
539        ],
540    },
541    srcs: [
542        ":libstats_atoms_proto",
543        "src/shell/shell_config.proto",
544        "src/shell/shell_data.proto",
545        "src/stats_log.proto",
546        "src/statsd_config.proto",
547        "src/guardrail/stats_log_enums.proto",
548    ],
549    static_libs: [
550        "platformprotosnano",
551    ],
552    // Protos have lots of MissingOverride and similar.
553    errorprone: {
554        javacflags: ["-XepDisableAllChecks"],
555    },
556}
557
558// Filegroup for statsd config proto definition.
559filegroup {
560    name: "libstats_config_protos",
561    srcs: ["src/statsd_config.proto"],
562}
563
564// Filegroup for statsd report protos.
565filegroup {
566    name: "libstats_log_protos",
567    srcs: [
568        "src/stats_log.proto",
569        "src/guardrail/stats_log_enums.proto",
570    ],
571}
572
573// Filegroup for all statsd protos
574filegroup {
575    name: "statsd_internal_protos",
576    srcs: [
577        "src/active_config_list.proto",
578        "src/experiment_ids.proto",
579        "src/shell/shell_config.proto",
580        "src/shell/shell_data.proto",
581        "src/statsd_config.proto",
582        "src/statsd_metadata.proto",
583        "src/stats_log.proto",
584        "src/uid_data.proto",
585        "src/guardrail/stats_log_enums.proto",
586    ],
587}
588
589cc_fuzz {
590    name: "statsd_service_fuzzer",
591    defaults: [
592        "statsd_defaults",
593        "service_fuzzer_defaults",
594        "fuzzer_disable_leaks",
595    ],
596    srcs: [
597        "fuzzers/statsd_service_fuzzer.cpp",
598    ],
599    shared_libs: [
600        "libstatssocket",
601        "libvndksupport",
602    ],
603    cflags: [
604        "-Wall",
605        "-Wextra",
606        "-Werror",
607        "-Wno-unused-parameter",
608    ],
609    fuzz_config: {
610        triage_assignee: "waghpawan@google.com",
611        cc: [
612            "singhtejinder@google.com",
613            "sharaienko@google.com",
614        ],
615    },
616    proto: {
617        type: "lite",
618        static: true,
619    },
620}
621
622cc_fuzz {
623    name: "statsd_fuzzer",
624    defaults: [
625        "statsd_defaults",
626    ],
627    srcs: [
628        "fuzzers/statsd_socket_data_fuzzer.cpp",
629    ],
630    shared_libs: [
631        "libstatssocket",
632    ],
633    cflags: [
634        "-Wall",
635        "-Wextra",
636        "-Werror",
637        "-Wno-unused-parameter",
638    ],
639    fuzz_config: {
640        cc: [
641            "singhtejinder@google.com",
642            "sharaienko@google.com",
643        ],
644    },
645    proto: {
646        type: "lite",
647        static: true,
648    },
649}
650
651// Filegroup for subscription protos.
652filegroup {
653    name: "libstats_subscription_protos",
654    srcs: [
655        ":libstats_internal_protos",
656        ":libstats_config_protos",
657        "src/shell/shell_config.proto",
658        "src/shell/shell_data.proto",
659    ],
660}
661