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 diff --git a/logcat/event.logtags b/logcat/event.logtags index 7c40a777a..750761f42 100644 --- a/logcat/event.logtags +++ b/logcat/event.logtags @@ -67,8 +67,9 @@ # ZygoteInit class preloading ends: 3030 boot_progress_preload_end (time|2|3) -# Dalvik VM +# Dalvik VM / ART 20003 dvm_lock_sample (process|3),(main|1|5),(thread|3),(time|1|3),(file|3),(line|1|5),(ownerfile|3),(ownerline|1|5),(sample_percent|1|6) +20004 art_hidden_api_access (access_method|1),(flags|1),(class|3),(member|3),(type_signature|3) 75000 sqlite_mem_alarm_current (current|1|2) 75001 sqlite_mem_alarm_max (max|1|2)