blob: 2a1b137053ac5227f92d2f44b7714db3e124cf1a [file] [log] [blame]
James Hawkins6f282992016-03-22 14:13:06 -07001/*
James Hawkins9aec9262017-01-31 11:42:24 -08002 * Copyright (C) 2017 The Android Open Source Project
James Hawkins6f282992016-03-22 14:13:06 -07003 *
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
James Hawkins9aec9262017-01-31 11:42:24 -080017#include "metricslogger/metrics_logger.h"
James Hawkins6f282992016-03-22 14:13:06 -070018
19#include <cstdlib>
Mark Salyzynff2dcd92016-09-28 15:54:45 -070020
Howard Rod1730092018-10-22 17:37:42 -070021#include <android-base/chrono_utils.h>
James Hawkinsb2f42442017-09-19 16:37:00 -070022#include <log/event_tag_map.h>
Howard Rod1730092018-10-22 17:37:42 -070023
24using namespace android;
Mark Salyzynff2dcd92016-09-28 15:54:45 -070025
James Hawkinsb2f42442017-09-19 16:37:00 -070026namespace {
27
Howard Rod1730092018-10-22 17:37:42 -070028const static int kStatsEventTag = 1937006964;
29const static int kKeyValuePairAtomId = 83;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +010030#ifdef __ANDROID__
James Hawkinsb2f42442017-09-19 16:37:00 -070031EventTagMap* kEventTagMap = android_openEventTagMap(nullptr);
32const int kSysuiMultiActionTag = android_lookupEventTagNum(
33 kEventTagMap, "sysui_multi_action", "(content|4)", ANDROID_LOG_UNKNOWN);
Mathew Inwoodd0613ac2018-04-12 13:55:41 +010034#else
35// android_openEventTagMap does not work on host builds.
36const int kSysuiMultiActionTag = 0;
37#endif
James Hawkinsb2f42442017-09-19 16:37:00 -070038
Howard Rod1730092018-10-22 17:37:42 -070039int64_t getElapsedTimeNanoSinceBoot() {
40 return std::chrono::duration_cast<std::chrono::nanoseconds>(
41 android::base::boot_clock::now().time_since_epoch())
42 .count();
43}
44
James Hawkinsb2f42442017-09-19 16:37:00 -070045} // namespace
46
James Hawkins9aec9262017-01-31 11:42:24 -080047namespace android {
48namespace metricslogger {
James Hawkins6f282992016-03-22 14:13:06 -070049
Chris Wren936fbbd2017-02-28 11:34:38 -050050// Mirror com.android.internal.logging.MetricsLogger#histogram().
James Hawkins6f282992016-03-22 14:13:06 -070051void LogHistogram(const std::string& event, int32_t data) {
James Hawkinsb2f42442017-09-19 16:37:00 -070052 android_log_event_list log(kSysuiMultiActionTag);
Ruchi Kandoib63072e2017-05-15 18:03:35 -070053 log << LOGBUILDER_CATEGORY << LOGBUILDER_HISTOGRAM << LOGBUILDER_NAME << event
54 << LOGBUILDER_BUCKET << data << LOGBUILDER_VALUE << 1 << LOG_ID_EVENTS;
Howard Rod1730092018-10-22 17:37:42 -070055
56 stats_event_list stats_log(kStatsEventTag);
57 stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY
58 << LOGBUILDER_HISTOGRAM << LOGBUILDER_NAME << event << LOGBUILDER_BUCKET << data
59 << LOGBUILDER_VALUE << 1;
60 stats_log.write(LOG_ID_STATS);
Ruchi Kandoib63072e2017-05-15 18:03:35 -070061}
62
63// Mirror com.android.internal.logging.MetricsLogger#count().
64void LogCounter(const std::string& name, int32_t val) {
James Hawkinsb2f42442017-09-19 16:37:00 -070065 android_log_event_list log(kSysuiMultiActionTag);
Ruchi Kandoib63072e2017-05-15 18:03:35 -070066 log << LOGBUILDER_CATEGORY << LOGBUILDER_COUNTER << LOGBUILDER_NAME << name << LOGBUILDER_VALUE
67 << val << LOG_ID_EVENTS;
Howard Rod1730092018-10-22 17:37:42 -070068
69 stats_event_list stats_log(kStatsEventTag);
70 stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY
71 << LOGBUILDER_COUNTER << LOGBUILDER_NAME << name << LOGBUILDER_VALUE << val;
72 stats_log.write(LOG_ID_STATS);
James Hawkins6f282992016-03-22 14:13:06 -070073}
74
James Hawkins5240f202017-09-15 16:01:57 -070075// Mirror com.android.internal.logging.MetricsLogger#action().
76void LogMultiAction(int32_t category, int32_t field, const std::string& value) {
James Hawkinsb2f42442017-09-19 16:37:00 -070077 android_log_event_list log(kSysuiMultiActionTag);
James Hawkins5240f202017-09-15 16:01:57 -070078 log << LOGBUILDER_CATEGORY << category << LOGBUILDER_TYPE << TYPE_ACTION
79 << field << value << LOG_ID_EVENTS;
Howard Rod1730092018-10-22 17:37:42 -070080
81 stats_event_list stats_log(kStatsEventTag);
82 stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY
83 << category << LOGBUILDER_TYPE << TYPE_ACTION << field << value;
84 stats_log.write(LOG_ID_STATS);
James Hawkins5240f202017-09-15 16:01:57 -070085}
86
Howard Rod1730092018-10-22 17:37:42 -070087ComplexEventLogger::ComplexEventLogger(int category)
88 : logger(kSysuiMultiActionTag), stats_logger(kStatsEventTag) {
Mathew Inwoodd0613ac2018-04-12 13:55:41 +010089 logger << LOGBUILDER_CATEGORY << category;
Howard Rod1730092018-10-22 17:37:42 -070090 stats_logger << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY
91 << category;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +010092}
93
Mathew Inwood9079f7c2018-05-01 10:42:24 +010094void ComplexEventLogger::SetPackageName(const std::string& package_name) {
95 logger << LOGBUILDER_PACKAGENAME << package_name;
Howard Rod1730092018-10-22 17:37:42 -070096 stats_logger << LOGBUILDER_PACKAGENAME << package_name;
Mathew Inwood9079f7c2018-05-01 10:42:24 +010097}
98
Mathew Inwoodd0613ac2018-04-12 13:55:41 +010099void ComplexEventLogger::AddTaggedData(int tag, int32_t value) {
100 logger << tag << value;
Howard Rod1730092018-10-22 17:37:42 -0700101 stats_logger << tag << value;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +0100102}
103
104void ComplexEventLogger::AddTaggedData(int tag, const std::string& value) {
105 logger << tag << value;
Howard Rod1730092018-10-22 17:37:42 -0700106 stats_logger << tag << value;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +0100107}
108
109void ComplexEventLogger::AddTaggedData(int tag, int64_t value) {
110 logger << tag << value;
Howard Rod1730092018-10-22 17:37:42 -0700111 stats_logger << tag << value;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +0100112}
113
114void ComplexEventLogger::AddTaggedData(int tag, float value) {
115 logger << tag << value;
Howard Rod1730092018-10-22 17:37:42 -0700116 stats_logger << tag << value;
Mathew Inwoodd0613ac2018-04-12 13:55:41 +0100117}
118
119void ComplexEventLogger::Record() {
120 logger << LOG_ID_EVENTS;
Howard Rod1730092018-10-22 17:37:42 -0700121 stats_logger.write(LOG_ID_STATS);
Mathew Inwoodd0613ac2018-04-12 13:55:41 +0100122}
123
James Hawkins9aec9262017-01-31 11:42:24 -0800124} // namespace metricslogger
125} // namespace android