From 07787e6059b257e62531abd38061336b85f2ebb5 Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Thu, 12 Apr 2018 13:55:41 +0100 Subject: [PATCH] Add support for logging complex events from C++. Also include relevant new metric_logger.proto values. Test: m Test: Exercised by ag/3890335 in art Bug: 77517571 Merged-In: Ia527f2b94c7a6147ad9d537376266e5ffc597b04 Change-Id: Ia527f2b94c7a6147ad9d537376266e5ffc597b04 (cherry picked from commit d0613ac54a1a620dedda9f0563e112068fd1e9f0) --- libmetricslogger/Android.bp | 7 ++++ .../include/metricslogger/metrics_logger.h | 41 +++++++++++++++++++ libmetricslogger/metrics_logger.cpp | 29 +++++++++++++ 3 files changed, 77 insertions(+) diff --git a/libmetricslogger/Android.bp b/libmetricslogger/Android.bp index 6549b8d56..e6e17ce87 100644 --- a/libmetricslogger/Android.bp +++ b/libmetricslogger/Android.bp @@ -29,6 +29,13 @@ cc_library_shared { defaults: ["metricslogger_defaults"], } +// static version of libmetricslogger, needed by a few art static binaries +cc_library_static { + name: "libmetricslogger_static", + srcs: metricslogger_lib_src_files, + defaults: ["metricslogger_defaults"], +} + // metricslogger shared library, debug // ----------------------------------------------------------------------------- cc_library_shared { diff --git a/libmetricslogger/include/metricslogger/metrics_logger.h b/libmetricslogger/include/metricslogger/metrics_logger.h index 189bc4b63..2c768695d 100644 --- a/libmetricslogger/include/metricslogger/metrics_logger.h +++ b/libmetricslogger/include/metricslogger/metrics_logger.h @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include #include @@ -32,6 +33,34 @@ void LogCounter(const std::string& name, int32_t val); // |value| in the field |field|. void LogMultiAction(int32_t category, int32_t field, const std::string& value); +// Logs a Tron complex event. +// +// A complex event can include data in a structure not suppored by the other +// log event types above. +// +// Note that instances of this class are single use. You must call Record() +// to write the event to the event log. +class ComplexEventLogger { + private: + android_log_event_list logger; + + public: + // Create a complex event with category|category|. + explicit ComplexEventLogger(int category); + // Add tagged data to the event, with the given tag and integer value. + void AddTaggedData(int tag, int32_t value); + // Add tagged data to the event, with the given tag and string value. + void AddTaggedData(int tag, const std::string& value); + // Add tagged data to the event, with the given tag and integer value. + void AddTaggedData(int tag, int64_t value); + // Add tagged data to the event, with the given tag and float value. + void AddTaggedData(int tag, float value); + // Record this event. This method can only be used once per instance + // of ComplexEventLogger. Do not made any subsequent calls to AddTaggedData + // after recording an event. + void Record(); +}; + // TODO: replace these with the metric_logger.proto definitions enum { LOGBUILDER_CATEGORY = 757, @@ -44,11 +73,23 @@ enum { ACTION_BOOT = 1098, FIELD_PLATFORM_REASON = 1099, + + ACTION_HIDDEN_API_ACCESSED = 1391, + FIELD_HIDDEN_API_ACCESS_METHOD = 1392, + FIELD_HIDDEN_API_ACCESS_DENIED = 1393, + FIELD_HIDDEN_API_SIGNATURE = 1394, }; enum { TYPE_ACTION = 4, }; +enum { + ACCESS_METHOD_NONE = 0, + ACCESS_METHOD_REFLECTION = 1, + ACCESS_METHOD_JNI = 2, + ACCESS_METHOD_LINKING = 3, +}; + } // namespace metricslogger } // namespace android diff --git a/libmetricslogger/metrics_logger.cpp b/libmetricslogger/metrics_logger.cpp index fdc44071b..912fa1281 100644 --- a/libmetricslogger/metrics_logger.cpp +++ b/libmetricslogger/metrics_logger.cpp @@ -23,9 +23,14 @@ namespace { +#ifdef __ANDROID__ EventTagMap* kEventTagMap = android_openEventTagMap(nullptr); const int kSysuiMultiActionTag = android_lookupEventTagNum( kEventTagMap, "sysui_multi_action", "(content|4)", ANDROID_LOG_UNKNOWN); +#else +// android_openEventTagMap does not work on host builds. +const int kSysuiMultiActionTag = 0; +#endif } // namespace @@ -53,5 +58,29 @@ void LogMultiAction(int32_t category, int32_t field, const std::string& value) { << field << value << LOG_ID_EVENTS; } +ComplexEventLogger::ComplexEventLogger(int category) : logger(kSysuiMultiActionTag) { + logger << LOGBUILDER_CATEGORY << category; +} + +void ComplexEventLogger::AddTaggedData(int tag, int32_t value) { + logger << tag << value; +} + +void ComplexEventLogger::AddTaggedData(int tag, const std::string& value) { + logger << tag << value; +} + +void ComplexEventLogger::AddTaggedData(int tag, int64_t value) { + logger << tag << value; +} + +void ComplexEventLogger::AddTaggedData(int tag, float value) { + logger << tag << value; +} + +void ComplexEventLogger::Record() { + logger << LOG_ID_EVENTS; +} + } // namespace metricslogger } // namespace android