Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5679cda authored by David Brazdil's avatar David Brazdil Committed by Gerrit Code Review
Browse files

Merge changes from topic "hiddenapi-cherrypick"

* changes:
  Add support for logging complex events from C++.
  Add event log tag for hidden API access logging.
parents 0515943d 07787e60
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,13 @@ cc_library_shared {
    defaults: ["metricslogger_defaults"],
    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
// metricslogger shared library, debug
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
cc_library_shared {
cc_library_shared {
+41 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


#include <log/log_event_list.h>
#include <cstdint>
#include <cstdint>
#include <string>
#include <string>


@@ -32,6 +33,34 @@ void LogCounter(const std::string& name, int32_t val);
// |value| in the field |field|.
// |value| in the field |field|.
void LogMultiAction(int32_t category, int32_t field, const std::string& value);
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
// TODO: replace these with the metric_logger.proto definitions
enum {
enum {
    LOGBUILDER_CATEGORY = 757,
    LOGBUILDER_CATEGORY = 757,
@@ -44,11 +73,23 @@ enum {


    ACTION_BOOT = 1098,
    ACTION_BOOT = 1098,
    FIELD_PLATFORM_REASON = 1099,
    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 {
enum {
    TYPE_ACTION = 4,
    TYPE_ACTION = 4,
};
};


enum {
    ACCESS_METHOD_NONE = 0,
    ACCESS_METHOD_REFLECTION = 1,
    ACCESS_METHOD_JNI = 2,
    ACCESS_METHOD_LINKING = 3,
};

}  // namespace metricslogger
}  // namespace metricslogger
}  // namespace android
}  // namespace android
+29 −0
Original line number Original line Diff line number Diff line
@@ -23,9 +23,14 @@


namespace {
namespace {


#ifdef __ANDROID__
EventTagMap* kEventTagMap = android_openEventTagMap(nullptr);
EventTagMap* kEventTagMap = android_openEventTagMap(nullptr);
const int kSysuiMultiActionTag = android_lookupEventTagNum(
const int kSysuiMultiActionTag = android_lookupEventTagNum(
    kEventTagMap, "sysui_multi_action", "(content|4)", ANDROID_LOG_UNKNOWN);
    kEventTagMap, "sysui_multi_action", "(content|4)", ANDROID_LOG_UNKNOWN);
#else
// android_openEventTagMap does not work on host builds.
const int kSysuiMultiActionTag = 0;
#endif


}  // namespace
}  // namespace


@@ -53,5 +58,29 @@ void LogMultiAction(int32_t category, int32_t field, const std::string& value) {
        << field << value << LOG_ID_EVENTS;
        << 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 metricslogger
}  // namespace android
}  // namespace android
+2 −1
Original line number Original line Diff line number Diff line
@@ -67,8 +67,9 @@
# ZygoteInit class preloading ends:
# ZygoteInit class preloading ends:
3030 boot_progress_preload_end (time|2|3)
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)
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)
75000 sqlite_mem_alarm_current (current|1|2)
75001 sqlite_mem_alarm_max (max|1|2)
75001 sqlite_mem_alarm_max (max|1|2)