diff options
| -rw-r--r-- | core/java/android/os/StatsBootstrapAtomValue.aidl | 42 | ||||
| -rw-r--r-- | services/core/java/com/android/server/stats/bootstrap/StatsBootstrapAtomService.java | 36 |
2 files changed, 61 insertions, 17 deletions
diff --git a/core/java/android/os/StatsBootstrapAtomValue.aidl b/core/java/android/os/StatsBootstrapAtomValue.aidl index b59bc062648f..b31eb6f78355 100644 --- a/core/java/android/os/StatsBootstrapAtomValue.aidl +++ b/core/java/android/os/StatsBootstrapAtomValue.aidl @@ -19,12 +19,36 @@ package android.os; * * @hide */ -union StatsBootstrapAtomValue { - boolean boolValue; - int intValue; - long longValue; - float floatValue; - String stringValue; - byte[] bytesValue; - String[] stringArrayValue; -}
\ No newline at end of file +parcelable StatsBootstrapAtomValue { + union Primitive { + boolean boolValue; + int intValue; + long longValue; + float floatValue; + String stringValue; + 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; +} diff --git a/services/core/java/com/android/server/stats/bootstrap/StatsBootstrapAtomService.java b/services/core/java/com/android/server/stats/bootstrap/StatsBootstrapAtomService.java index dcb47a7b60b6..4c9cbc449656 100644 --- a/services/core/java/com/android/server/stats/bootstrap/StatsBootstrapAtomService.java +++ b/services/core/java/com/android/server/stats/bootstrap/StatsBootstrapAtomService.java @@ -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()); } |