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

Commit f3537c20 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Updates jank metrics in statsd to include uid."

parents 3b73ced5 77ef671c
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -753,8 +753,11 @@ message CallStateChanged {
 *   frameworks/base/libs/hwui/JankTracker.cpp
 */
message DaveyOccurred {
    // The UID that logged this atom.
    optional int32 uid = 1;

    // Amount of time it took to render the frame. Should be >=700ms.
    optional int64 jank_duration_millis = 1;
    optional int64 jank_duration_millis = 2;
}

/**
+35 −7
Original line number Diff line number Diff line
@@ -198,31 +198,59 @@ void MetricsManager::onLogEvent(const LogEvent& event) {
        // Uid is 3rd from last field and must match the caller's uid,
        // unless that caller is statsd itself (statsd is allowed to spoof uids).
        long appHookUid = event.GetLong(event.size()-2, &err);
        if (err != NO_ERROR ) {
            VLOG("APP_BREADCRUMB_REPORTED had error when parsing the uid");
            return;
        }
        int32_t loggerUid = event.GetUid();
        if (err != NO_ERROR || (loggerUid != appHookUid && loggerUid != AID_STATSD)) {
            VLOG("AppHook has invalid uid: claimed %ld but caller is %d", appHookUid, loggerUid);
        if (loggerUid != appHookUid && loggerUid != AID_STATSD) {
            VLOG("APP_BREADCRUMB_REPORTED has invalid uid: claimed %ld but caller is %d",
                 appHookUid, loggerUid);
            return;
        }

        // Label is 2nd from last field and must be from [0, 15].
        long appHookLabel = event.GetLong(event.size()-1, &err);
        if (err != NO_ERROR || appHookLabel < 0 || appHookLabel > 15) {
            VLOG("AppHook does not have valid label %ld", appHookLabel);
        if (err != NO_ERROR ) {
            VLOG("APP_BREADCRUMB_REPORTED had error when parsing the label field");
            return;
        } else if (appHookLabel < 0 || appHookLabel > 15) {
            VLOG("APP_BREADCRUMB_REPORTED does not have valid label %ld", appHookLabel);
            return;
        }

        // The state must be from 0,3. This part of code must be manually updated.
        long appHookState = event.GetLong(event.size(), &err);
        if (err != NO_ERROR || appHookState < 0 || appHookState > 3) {
            VLOG("AppHook does not have valid state %ld", appHookState);
        if (err != NO_ERROR ) {
            VLOG("APP_BREADCRUMB_REPORTED had error when parsing the state field");
            return;
        } else if (appHookState < 0 || appHookState > 3) {
            VLOG("APP_BREADCRUMB_REPORTED does not have valid state %ld", appHookState);
            return;
        }
    } else if (event.GetTagId() == android::util::DAVEY_OCCURRED) {
        // Daveys can be logged from any app since they are logged in libs/hwui/JankTracker.cpp.
        // Check that the davey duration is reasonable. Max length check is for privacy.
        status_t err = NO_ERROR;

        // Uid is the first field provided.
        long jankUid = event.GetLong(1, &err);
        if (err != NO_ERROR ) {
            VLOG("Davey occurred had error when parsing the uid");
            return;
        }
        int32_t loggerUid = event.GetUid();
        if (loggerUid != jankUid && loggerUid != AID_STATSD) {
            VLOG("DAVEY_OCCURRED has invalid uid: claimed %ld but caller is %d", jankUid,
                 loggerUid);
            return;
        }

        long duration = event.GetLong(event.size(), &err);
        if (err != NO_ERROR || duration > 100000) {
        if (err != NO_ERROR ) {
            VLOG("Davey occurred had error when parsing the duration");
            return;
        } else if (duration > 100000) {
            VLOG("Davey duration is unreasonably long: %ld", duration);
            return;
        }
+1 −1
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ void JankTracker::finishFrame(const FrameInfo& frame) {
        ALOGI("%s", ss.str().c_str());
        // Just so we have something that counts up, the value is largely irrelevant
        ATRACE_INT(ss.str().c_str(), ++sDaveyCount);
        android::util::stats_write(android::util::DAVEY_OCCURRED, ns2ms(totalDuration));
        android::util::stats_write(android::util::DAVEY_OCCURRED, getuid(), ns2ms(totalDuration));
    }
}