Merge changes from topic "hiddenapi-cherrypick"

* changes:
  Add support for logging complex events from C++.
  Add event log tag for hidden API access logging.
This commit is contained in:
David Brazdil 2018-05-09 08:10:19 +00:00 committed by Gerrit Code Review
commit b5679cdace
4 changed files with 79 additions and 1 deletions

View File

@ -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 {

View File

@ -14,6 +14,7 @@
* limitations under the License.
*/
#include <log/log_event_list.h>
#include <cstdint>
#include <string>
@ -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

View File

@ -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

View File

@ -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)