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

Commit 77a2330d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add support for UIDs in bootstrap atoms" into main

parents 5aabf107 ecc781ba
Loading
Loading
Loading
Loading
+33 −9
Original line number Diff line number Diff line
@@ -19,7 +19,8 @@ package android.os;
 *
 * @hide
 */
union StatsBootstrapAtomValue {
parcelable StatsBootstrapAtomValue {
    union Primitive {
        boolean boolValue;
        int intValue;
        long longValue;
@@ -28,3 +29,26 @@ union StatsBootstrapAtomValue {
        byte[] bytesValue;
	String[] stringArrayValue;
    }

    Primitive value;

    parcelable Annotation {
        // Match the definitions in
        // packages/modules/StatsD/framework/java/android/util/StatsLog.java
        // Only supports UIDs for now.
        @Backing(type="byte")
        enum Id {
            NONE,
            IS_UID,
        }
        Id id;

        union Primitive {
            boolean boolValue;
            int intValue;
        }
        Primitive value;
    }

    Annotation[] annotations;
}
+28 −8
Original line number Diff line number Diff line
@@ -42,27 +42,28 @@ public class StatsBootstrapAtomService extends IStatsBootstrapAtomService.Stub {
            return;
        }
        StatsEvent.Builder builder = StatsEvent.newBuilder().setAtomId(atom.atomId);
        for (StatsBootstrapAtomValue value : atom.values) {
        for (StatsBootstrapAtomValue atomValue : atom.values) {
            StatsBootstrapAtomValue.Primitive value = atomValue.value;
            switch (value.getTag()) {
                case StatsBootstrapAtomValue.boolValue:
                case StatsBootstrapAtomValue.Primitive.boolValue:
                    builder.writeBoolean(value.getBoolValue());
                    break;
                case StatsBootstrapAtomValue.intValue:
                case StatsBootstrapAtomValue.Primitive.intValue:
                    builder.writeInt(value.getIntValue());
                    break;
                case StatsBootstrapAtomValue.longValue:
                case StatsBootstrapAtomValue.Primitive.longValue:
                    builder.writeLong(value.getLongValue());
                    break;
                case StatsBootstrapAtomValue.floatValue:
                case StatsBootstrapAtomValue.Primitive.floatValue:
                    builder.writeFloat(value.getFloatValue());
                    break;
                case StatsBootstrapAtomValue.stringValue:
                case StatsBootstrapAtomValue.Primitive.stringValue:
                    builder.writeString(value.getStringValue());
                    break;
                case StatsBootstrapAtomValue.bytesValue:
                case StatsBootstrapAtomValue.Primitive.bytesValue:
                    builder.writeByteArray(value.getBytesValue());
                    break;
                case StatsBootstrapAtomValue.stringArrayValue:
                case StatsBootstrapAtomValue.Primitive.stringArrayValue:
                    builder.writeStringArray(value.getStringArrayValue());
                    break;
                default:
@@ -71,6 +72,25 @@ public class StatsBootstrapAtomService extends IStatsBootstrapAtomService.Stub {
                    return;

            }
            StatsBootstrapAtomValue.Annotation[] annotations = atomValue.annotations;
            for (StatsBootstrapAtomValue.Annotation annotation : atomValue.annotations) {
                if (annotation.id != StatsBootstrapAtomValue.Annotation.Id.IS_UID) {
                    Slog.e(TAG, "Unexpected annotation ID: " + annotation.id
                            + ", for atom " + atom.atomId + ": only UIDs are supported!");
                    return;
                }

                switch (annotation.value.getTag()) {
                    case StatsBootstrapAtomValue.Annotation.Primitive.boolValue:
                        builder.addBooleanAnnotation(
                                annotation.id, annotation.value.getBoolValue());
                        break;
                    default:
                        Slog.e(TAG, "Unexpected value type " + annotation.value.getTag()
                                + " when logging UID for atom " + atom.atomId);
                        return;
                }
            }
        }
        StatsLog.write(builder.usePooledBuffer().build());
    }