diff --git a/libmetricslogger/Android.bp b/libmetricslogger/Android.bp index 1551b5bd0..2d327eece 100644 --- a/libmetricslogger/Android.bp +++ b/libmetricslogger/Android.bp @@ -11,7 +11,11 @@ cc_defaults { export_include_dirs: ["include"], local_include_dirs: ["include"], - shared_libs: ["liblog"], + shared_libs: [ + "libbase", + "liblog", + "libstatssocket", + ], whole_static_libs: ["libgtest_prod"], cflags: [ @@ -23,17 +27,20 @@ cc_defaults { // metricslogger shared library // ----------------------------------------------------------------------------- -cc_library_shared { +cc_library { name: "libmetricslogger", srcs: metricslogger_lib_src_files, defaults: ["metricslogger_defaults"], + export_shared_lib_headers: ["libstatssocket"], } // static version of libmetricslogger, needed by a few art static binaries +// TODO(b/117829226): Remove once dependencies are cleaned up. cc_library_static { name: "libmetricslogger_static", srcs: metricslogger_lib_src_files, defaults: ["metricslogger_defaults"], + export_shared_lib_headers: ["libstatssocket"], } // metricslogger shared library, debug diff --git a/libmetricslogger/include/metricslogger/metrics_logger.h b/libmetricslogger/include/metricslogger/metrics_logger.h index c305db2da..56bd6c456 100644 --- a/libmetricslogger/include/metricslogger/metrics_logger.h +++ b/libmetricslogger/include/metricslogger/metrics_logger.h @@ -15,6 +15,7 @@ */ #include +#include #include #include @@ -43,6 +44,7 @@ void LogMultiAction(int32_t category, int32_t field, const std::string& value); class ComplexEventLogger { private: android_log_event_list logger; + stats_event_list stats_logger; public: // Create a complex event with category|category|. diff --git a/libmetricslogger/metrics_logger.cpp b/libmetricslogger/metrics_logger.cpp index 6a32153c6..2a1b13705 100644 --- a/libmetricslogger/metrics_logger.cpp +++ b/libmetricslogger/metrics_logger.cpp @@ -18,11 +18,15 @@ #include +#include #include -#include + +using namespace android; namespace { +const static int kStatsEventTag = 1937006964; +const static int kKeyValuePairAtomId = 83; #ifdef __ANDROID__ EventTagMap* kEventTagMap = android_openEventTagMap(nullptr); const int kSysuiMultiActionTag = android_lookupEventTagNum( @@ -32,6 +36,12 @@ const int kSysuiMultiActionTag = android_lookupEventTagNum( const int kSysuiMultiActionTag = 0; #endif +int64_t getElapsedTimeNanoSinceBoot() { + return std::chrono::duration_cast( + android::base::boot_clock::now().time_since_epoch()) + .count(); +} + } // namespace namespace android { @@ -42,6 +52,12 @@ void LogHistogram(const std::string& event, int32_t data) { android_log_event_list log(kSysuiMultiActionTag); log << LOGBUILDER_CATEGORY << LOGBUILDER_HISTOGRAM << LOGBUILDER_NAME << event << LOGBUILDER_BUCKET << data << LOGBUILDER_VALUE << 1 << LOG_ID_EVENTS; + + stats_event_list stats_log(kStatsEventTag); + stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY + << LOGBUILDER_HISTOGRAM << LOGBUILDER_NAME << event << LOGBUILDER_BUCKET << data + << LOGBUILDER_VALUE << 1; + stats_log.write(LOG_ID_STATS); } // Mirror com.android.internal.logging.MetricsLogger#count(). @@ -49,6 +65,11 @@ void LogCounter(const std::string& name, int32_t val) { android_log_event_list log(kSysuiMultiActionTag); log << LOGBUILDER_CATEGORY << LOGBUILDER_COUNTER << LOGBUILDER_NAME << name << LOGBUILDER_VALUE << val << LOG_ID_EVENTS; + + stats_event_list stats_log(kStatsEventTag); + stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY + << LOGBUILDER_COUNTER << LOGBUILDER_NAME << name << LOGBUILDER_VALUE << val; + stats_log.write(LOG_ID_STATS); } // Mirror com.android.internal.logging.MetricsLogger#action(). @@ -56,34 +77,48 @@ void LogMultiAction(int32_t category, int32_t field, const std::string& value) { android_log_event_list log(kSysuiMultiActionTag); log << LOGBUILDER_CATEGORY << category << LOGBUILDER_TYPE << TYPE_ACTION << field << value << LOG_ID_EVENTS; + + stats_event_list stats_log(kStatsEventTag); + stats_log << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY + << category << LOGBUILDER_TYPE << TYPE_ACTION << field << value; + stats_log.write(LOG_ID_STATS); } -ComplexEventLogger::ComplexEventLogger(int category) : logger(kSysuiMultiActionTag) { +ComplexEventLogger::ComplexEventLogger(int category) + : logger(kSysuiMultiActionTag), stats_logger(kStatsEventTag) { logger << LOGBUILDER_CATEGORY << category; + stats_logger << getElapsedTimeNanoSinceBoot() << kKeyValuePairAtomId << LOGBUILDER_CATEGORY + << category; } void ComplexEventLogger::SetPackageName(const std::string& package_name) { logger << LOGBUILDER_PACKAGENAME << package_name; + stats_logger << LOGBUILDER_PACKAGENAME << package_name; } void ComplexEventLogger::AddTaggedData(int tag, int32_t value) { logger << tag << value; + stats_logger << tag << value; } void ComplexEventLogger::AddTaggedData(int tag, const std::string& value) { logger << tag << value; + stats_logger << tag << value; } void ComplexEventLogger::AddTaggedData(int tag, int64_t value) { logger << tag << value; + stats_logger << tag << value; } void ComplexEventLogger::AddTaggedData(int tag, float value) { logger << tag << value; + stats_logger << tag << value; } void ComplexEventLogger::Record() { logger << LOG_ID_EVENTS; + stats_logger.write(LOG_ID_STATS); } } // namespace metricslogger diff --git a/libstats/Android.bp b/libstats/Android.bp index d58f29417..f5ee1dada 100644 --- a/libstats/Android.bp +++ b/libstats/Android.bp @@ -17,12 +17,13 @@ // ========================================================== // Native library to write stats log to statsd socket // ========================================================== -cc_library_static { +cc_library { name: "libstatssocket", srcs: [ "stats_event_list.c", "statsd_writer.c", ], + host_supported: true, cflags: [ "-Wall", "-Werror", @@ -32,6 +33,7 @@ cc_library_static { ], export_include_dirs: ["include"], shared_libs: [ + "libcutils", "liblog", ], } diff --git a/libstats/statsd_writer.c b/libstats/statsd_writer.c index afe401f5c..e24dff0b6 100644 --- a/libstats/statsd_writer.c +++ b/libstats/statsd_writer.c @@ -15,7 +15,9 @@ */ #include "statsd_writer.h" +#include #include +#include #include #include #include