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

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

Merge "Add uid field annotation in atoms.proto and statd memory usage optimization." into pi-dev

parents 8cf1ae49 c40a19d2
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -112,8 +112,8 @@ void updateUid(Value* value, int hostUid) {
}

void StatsLogProcessor::mapIsolatedUidToHostUidIfNecessaryLocked(LogEvent* event) const {
    if (android::util::kAtomsWithAttributionChain.find(event->GetTagId()) !=
        android::util::kAtomsWithAttributionChain.end()) {
    if (android::util::AtomsInfo::kAtomsWithAttributionChain.find(event->GetTagId()) !=
        android::util::AtomsInfo::kAtomsWithAttributionChain.end()) {
        for (auto& value : *(event->getMutableValues())) {
            if (value.mField.getPosAtDepth(0) > kAttributionField) {
                break;
@@ -123,12 +123,20 @@ void StatsLogProcessor::mapIsolatedUidToHostUidIfNecessaryLocked(LogEvent* event
                updateUid(&value.mValue, hostUid);
            }
        }
    } else if (android::util::kAtomsWithUidField.find(event->GetTagId()) !=
                       android::util::kAtomsWithUidField.end() &&
               event->getValues().size() > 0 && (event->getValues())[0].mValue.getType() == INT) {
        Value& value = (*event->getMutableValues())[0].mValue;
    } else {
        auto it = android::util::AtomsInfo::kAtomsWithUidField.find(event->GetTagId());
        if (it != android::util::AtomsInfo::kAtomsWithUidField.end()) {
            int uidField = it->second;  // uidField is the field number in proto,
                                        // starting from 1
            if (uidField > 0 && (int)event->getValues().size() >= uidField &&
                (event->getValues())[uidField - 1].mValue.getType() == INT) {
                Value& value = (*event->getMutableValues())[uidField - 1].mValue;
                const int hostUid = mUidMap->getHostUidOrSelf(value.int_value);
                updateUid(&value, hostUid);
            } else {
                ALOGE("Malformed log, uid not found. %s", event->ToString().c_str());
            }
        }
    }
}

+3 −0
Original line number Diff line number Diff line
@@ -67,4 +67,7 @@ message StateAtomFieldOption {
extend google.protobuf.FieldOptions {
    // Flags to decorate an atom that presents a state change.
    optional StateAtomFieldOption stateFieldOption = 50000;

    // Flags to decorate the uid fields in an atom.
    optional bool is_uid = 50001 [default = false];
}
 No newline at end of file
+35 −31
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ message ScreenStateChanged {
 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
 */
message UidProcessStateChanged {
    optional int32 uid = 1 [(stateFieldOption).option = PRIMARY];
    optional int32 uid = 1 [(stateFieldOption).option = PRIMARY, (is_uid) = true];

    // The state, from frameworks/base/core/proto/android/app/enums.proto.
    optional android.app.ProcessStateEnum state = 2 [(stateFieldOption).option = EXCLUSIVE];
@@ -223,7 +223,7 @@ message UidProcessStateChanged {
 */
message ProcessLifeCycleStateChanged {
    // TODO: should be a string tagged w/ uid annotation
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The process name (usually same as the app name).
    optional string name = 2;
@@ -593,7 +593,7 @@ message WakeupAlarmOccurred {
 */
message MobileRadioPowerStateChanged {
    // TODO: Add attribution instead of uid?
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
    optional android.telephony.DataConnectionPowerStateEnum state = 2;
@@ -608,7 +608,7 @@ message MobileRadioPowerStateChanged {
 */
message WifiRadioPowerStateChanged {
    // TODO: Add attribution instead of uid?
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
    optional android.telephony.DataConnectionPowerStateEnum state = 2;
@@ -1130,7 +1130,8 @@ message ChargeCyclesReported {
 */
message DaveyOccurred {
    // The UID that logged this atom.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    ;

    // Amount of time it took to render the frame. Should be >=700ms.
    optional int64 jank_duration_millis = 2;
@@ -1187,7 +1188,7 @@ message SettingChanged {
  *   frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java
 */
message ActivityForegroundStateChanged {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    optional string pkg_name = 2;
    optional string class_name = 3;

@@ -1205,7 +1206,7 @@ message ActivityForegroundStateChanged {
 */
message DropboxErrorChanged {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // Tag used when recording this error to dropbox. Contains data_ or system_ prefix.
    optional string tag = 2;
@@ -1236,7 +1237,7 @@ message DropboxErrorChanged {
 */
message AppBreadcrumbReported {
    // The uid of the application that sent this custom atom.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // An arbitrary label chosen by the developer. For Android P, the label should be in [0, 16).
    optional int32 label = 2;
@@ -1260,7 +1261,7 @@ message AppBreadcrumbReported {
 */
message AnomalyDetected {
    // Uid that owns the config whose anomaly detection alert fired.
    optional int32 config_uid = 1;
    optional int32 config_uid = 1 [(is_uid) = true];

    // Id of the config whose anomaly detection alert fired.
    optional int64 config_id = 2;
@@ -1271,7 +1272,7 @@ message AnomalyDetected {

message AppStartChanged {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The app package name.
    optional string pkg_name = 2;
@@ -1318,7 +1319,7 @@ message AppStartChanged {

message AppStartCancelChanged {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The app package name.
    optional string pkg_name = 2;
@@ -1338,7 +1339,7 @@ message AppStartCancelChanged {

message AppStartFullyDrawnChanged {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The app package name.
    optional string pkg_name = 2;
@@ -1369,7 +1370,7 @@ message AppStartFullyDrawnChanged {
 */
message PictureInPictureStateChanged {
    // -1 if it is not available
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    optional string short_name = 2;

@@ -1388,7 +1389,7 @@ message PictureInPictureStateChanged {
 *     services/core/java/com/android/server/wm/Session.java
 */
message OverlayStateChanged {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    optional string package_name = 2;

@@ -1409,7 +1410,7 @@ message OverlayStateChanged {
 *     //frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
 */
message ForegroundServiceStateChanged {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    // package_name + "/" + class_name
    optional string short_name = 2;

@@ -1429,6 +1430,7 @@ message ForegroundServiceStateChanged {
 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
 */
message IsolatedUidChanged {
    // NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd.
    // The host UID. Generally, we should attribute metrics from the isolated uid to the host uid.
    optional int32 parent_uid = 1;

@@ -1450,7 +1452,7 @@ message IsolatedUidChanged {
message PacketWakeupOccurred {
    // The uid owning the socket into which the packet was delivered, or -1 if the packet was
    // delivered nowhere.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    // The interface name on which the packet was received.
    optional string iface = 2;
    // The ethertype value of the packet.
@@ -1478,7 +1480,7 @@ message PacketWakeupOccurred {
 */
message AppStartMemoryStateCaptured {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The process name.
    optional string process_name = 2;
@@ -1524,7 +1526,7 @@ message LmkStateChanged {
 */
message LmkKillOccurred {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The process name.
    optional string process_name = 2;
@@ -1556,7 +1558,7 @@ message LmkKillOccurred {
 */
message AppDied {
    // timestamp(elapsedRealtime) of record creation
    optional uint64 timestamp_millis = 1;
    optional uint64 timestamp_millis = 1 [(stateFieldOption).option = EXCLUSIVE];
}

//////////////////////////////////////////////////////////////////////
@@ -1570,7 +1572,7 @@ message AppDied {
 *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
 */
message WifiBytesTransfer {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    optional int64 rx_bytes = 2;

@@ -1588,9 +1590,10 @@ message WifiBytesTransfer {
 *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
 */
message WifiBytesTransferByFgBg {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats.
    // 1 denotes foreground and 0 denotes background. This is called Set in
    // NetworkStats.
    optional int32 is_foreground = 2;

    optional int64 rx_bytes = 3;
@@ -1609,7 +1612,7 @@ message WifiBytesTransferByFgBg {
 *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
 */
message MobileBytesTransfer {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    optional int64 rx_bytes = 2;

@@ -1627,9 +1630,10 @@ message MobileBytesTransfer {
 *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
 */
message MobileBytesTransferByFgBg {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats.
    // 1 denotes foreground and 0 denotes background. This is called Set in
    // NetworkStats.
    optional int32 is_foreground = 2;

    optional int64 rx_bytes = 3;
@@ -1648,7 +1652,7 @@ message MobileBytesTransferByFgBg {
 *   StatsCompanionService
 */
message BluetoothBytesTransfer {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    optional int64 rx_bytes = 2;

@@ -1708,7 +1712,7 @@ message CpuTimePerFreq {
 * Note that isolated process uid time should be attributed to host uids.
 */
message CpuTimePerUid {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    optional uint64 user_time_millis = 2;
    optional uint64 sys_time_millis = 3;
}
@@ -1719,7 +1723,7 @@ message CpuTimePerUid {
 * For each uid, we order the time by descending frequencies.
 */
message CpuTimePerUidFreq {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    optional uint32 freq_index = 2;
    optional uint64 time_millis = 3;
}
@@ -1801,7 +1805,7 @@ message BluetoothActivityInfo {
 */
message ProcessMemoryState {
    // The uid if available. -1 means not available.
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];

    // The process name.
    optional string process_name = 2;
@@ -1853,7 +1857,7 @@ message SystemUptime {
 * The file contains a monotonically increasing count of time for a single boot.
 */
message CpuActiveTime {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    optional uint64 time_millis = 2;
}

@@ -1867,7 +1871,7 @@ message CpuActiveTime {
 * The file contains a monotonically increasing count of time for a single boot.
 */
message CpuClusterTime {
    optional int32 uid = 1;
    optional int32 uid = 1 [(is_uid) = true];
    optional int32 cluster_index = 2;
    optional uint64 time_millis = 3;
}
+2 −1
Original line number Diff line number Diff line
@@ -112,7 +112,8 @@ void mergeIsolatedUidsToHostUid(vector<shared_ptr<LogEvent>>& data, const sp<Uid
        VLOG("Unknown pull atom id %d", tagId);
        return;
    }
    if (android::util::kAtomsWithUidField.find(tagId) == android::util::kAtomsWithUidField.end()) {
    if (android::util::AtomsInfo::kAtomsWithUidField.find(tagId) ==
        android::util::AtomsInfo::kAtomsWithUidField.end()) {
        VLOG("No uid to merge for atom %d", tagId);
        return;
    }
+2 −2
Original line number Diff line number Diff line
@@ -134,8 +134,8 @@ void EventMetricProducer::onMatchedLogEventInternalLocked(
    uint64_t wrapperToken =
            mProto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_DATA);
    const bool truncateTimestamp =
        android::util::kNotTruncatingTimestampAtomWhiteList.find(event.GetTagId()) ==
        android::util::kNotTruncatingTimestampAtomWhiteList.end();
            android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.find(event.GetTagId()) ==
            android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.end();
    if (truncateTimestamp) {
        mProto->write(FIELD_TYPE_INT64 | FIELD_ID_ELAPSED_TIMESTAMP_NANOS,
            (long long)truncateTimestampNsToFiveMinutes(event.GetElapsedTimestampNs()));
Loading