Loading core/java/android/util/StatsEvent.java +216 −73 Original line number Diff line number Diff line Loading @@ -45,6 +45,166 @@ import com.android.internal.annotations.VisibleForTesting; * @hide **/ public final class StatsEvent implements Parcelable { // Type Ids. /** * @hide **/ @VisibleForTesting public static final byte TYPE_INT = 0x00; /** * @hide **/ @VisibleForTesting public static final byte TYPE_LONG = 0x01; /** * @hide **/ @VisibleForTesting public static final byte TYPE_STRING = 0x02; /** * @hide **/ @VisibleForTesting public static final byte TYPE_LIST = 0x03; /** * @hide **/ @VisibleForTesting public static final byte TYPE_FLOAT = 0x04; /** * @hide **/ @VisibleForTesting public static final byte TYPE_BOOLEAN = 0x05; /** * @hide **/ @VisibleForTesting public static final byte TYPE_BYTE_ARRAY = 0x06; /** * @hide **/ @VisibleForTesting public static final byte TYPE_OBJECT = 0x07; /** * @hide **/ @VisibleForTesting public static final byte TYPE_KEY_VALUE_PAIRS = 0x08; /** * @hide **/ @VisibleForTesting public static final byte TYPE_ATTRIBUTION_CHAIN = 0x09; /** * @hide **/ @VisibleForTesting public static final byte TYPE_ERRORS = 0x0F; // Error flags. /** * @hide **/ @VisibleForTesting public static final int ERROR_NO_TIMESTAMP = 0x1; /** * @hide **/ @VisibleForTesting public static final int ERROR_NO_ATOM_ID = 0x2; /** * @hide **/ @VisibleForTesting public static final int ERROR_OVERFLOW = 0x4; /** * @hide **/ @VisibleForTesting public static final int ERROR_ATTRIBUTION_CHAIN_TOO_LONG = 0x8; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_KEY_VALUE_PAIRS = 0x10; /** * @hide **/ @VisibleForTesting public static final int ERROR_ANNOTATION_DOES_NOT_FOLLOW_FIELD = 0x20; /** * @hide **/ @VisibleForTesting public static final int ERROR_INVALID_ANNOTATION_ID = 0x40; /** * @hide **/ @VisibleForTesting public static final int ERROR_ANNOTATION_ID_TOO_LARGE = 0x80; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_ANNOTATIONS = 0x100; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_FIELDS = 0x200; /** * @hide **/ @VisibleForTesting public static final int ERROR_ATTRIBUTION_UIDS_TAGS_SIZES_NOT_EQUAL = 0x400; // Size limits. /** * @hide **/ @VisibleForTesting public static final int MAX_ANNOTATION_COUNT = 15; /** * @hide **/ @VisibleForTesting public static final int MAX_ATTRIBUTION_NODES = 127; /** * @hide **/ @VisibleForTesting public static final int MAX_NUM_ELEMENTS = 127; /** * @hide **/ @VisibleForTesting public static final int MAX_KEY_VALUE_PAIRS = 127; private static final int LOGGER_ENTRY_MAX_PAYLOAD = 4068; // Max payload size is 4 bytes less as 4 bytes are reserved for statsEventTag. Loading @@ -69,23 +229,74 @@ public final class StatsEvent implements Parcelable { return new StatsEvent.Builder(Buffer.obtain()); } int getAtomId() { /** * Get the atom Id of the atom encoded in this StatsEvent object. * * @hide **/ public int getAtomId() { return mAtomId; } /** * Get the byte array that contains the encoded payload that can be sent to statsd. * * @hide **/ @NonNull byte[] getBytes() { public byte[] getBytes() { return mBuffer.getBytes(); } int getNumBytes() { /** * Get the number of bytes used to encode the StatsEvent payload. * * @hide **/ public int getNumBytes() { return mNumBytes; } void release() { /** * Recycle this StatsEvent object. **/ public void release() { mBuffer.release(); } /** * Boilerplate for Parcel. */ public static final @NonNull Parcelable.Creator<StatsEvent> CREATOR = new Parcelable.Creator<StatsEvent>() { public StatsEvent createFromParcel(Parcel in) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } public StatsEvent[] newArray(int size) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } }; /** * Boilerplate for Parcel. */ public void writeToParcel(Parcel out, int flags) { out.writeInt(mAtomId); out.writeInt(getNumBytes()); out.writeByteArray(getBytes()); } /** * Boilerplate for Parcel. */ public int describeContents() { return 0; } /** * Builder for constructing a StatsEvent object. * Loading Loading @@ -114,41 +325,8 @@ public final class StatsEvent implements Parcelable { * .addBooleanAnnotation(annotation1Id, true) * .build(); * </pre> * @hide **/ public static final class Builder { // Type Ids. private static final byte TYPE_INT = 0x00; private static final byte TYPE_LONG = 0x01; private static final byte TYPE_STRING = 0x02; private static final byte TYPE_LIST = 0x03; private static final byte TYPE_FLOAT = 0x04; private static final byte TYPE_BOOLEAN = 0x05; private static final byte TYPE_BYTE_ARRAY = 0x06; private static final byte TYPE_OBJECT = 0x07; private static final byte TYPE_KEY_VALUE_PAIRS = 0x08; private static final byte TYPE_ATTRIBUTION_CHAIN = 0x09; private static final byte TYPE_ERRORS = 0x0F; // Error flags. private static final int ERROR_NO_TIMESTAMP = 0x1; private static final int ERROR_NO_ATOM_ID = 0x2; private static final int ERROR_OVERFLOW = 0x4; private static final int ERROR_ATTRIBUTION_CHAIN_TOO_LONG = 0x8; private static final int ERROR_TOO_MANY_KEY_VALUE_PAIRS = 0x10; private static final int ERROR_ANNOTATION_DOES_NOT_FOLLOW_FIELD = 0x20; private static final int ERROR_INVALID_ANNOTATION_ID = 0x40; private static final int ERROR_ANNOTATION_ID_TOO_LARGE = 0x80; private static final int ERROR_TOO_MANY_ANNOTATIONS = 0x100; private static final int ERROR_TOO_MANY_FIELDS = 0x200; private static final int ERROR_ATTRIBUTION_UIDS_TAGS_SIZES_NOT_EQUAL = 0x400; // Size limits. private static final int MAX_ANNOTATION_COUNT = 15; private static final int MAX_ATTRIBUTION_NODES = 127; private static final int MAX_NUM_ELEMENTS = 127; private static final int MAX_KEY_VALUE_PAIRS = 127; // Fixed positions. private static final int POS_NUM_ELEMENTS = 1; private static final int POS_TIMESTAMP_NS = POS_NUM_ELEMENTS + Byte.BYTES; Loading Loading @@ -290,7 +468,7 @@ public final class StatsEvent implements Parcelable { * @param tags array of tags in the attribution nodes. **/ @NonNull public Builder writeAttributionNode( public Builder writeAttributionChain( @NonNull final int[] uids, @NonNull final String[] tags) { final byte numUids = (byte) uids.length; final byte numTags = (byte) tags.length; Loading Loading @@ -633,39 +811,4 @@ public final class StatsEvent implements Parcelable { return 0; } } /** * Boilerplate for Parcel. * * @hide */ public static final @NonNull Parcelable.Creator<StatsEvent> CREATOR = new Parcelable.Creator<StatsEvent>() { public StatsEvent createFromParcel(Parcel in) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } public StatsEvent[] newArray(int size) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } }; /** * @hide */ public void writeToParcel(Parcel out, int flags) { out.writeInt(mAtomId); out.writeInt(getNumBytes()); out.writeByteArray(getBytes()); } /** * Boilerplate for Parcel. */ public int describeContents() { return 0; } } Loading
core/java/android/util/StatsEvent.java +216 −73 Original line number Diff line number Diff line Loading @@ -45,6 +45,166 @@ import com.android.internal.annotations.VisibleForTesting; * @hide **/ public final class StatsEvent implements Parcelable { // Type Ids. /** * @hide **/ @VisibleForTesting public static final byte TYPE_INT = 0x00; /** * @hide **/ @VisibleForTesting public static final byte TYPE_LONG = 0x01; /** * @hide **/ @VisibleForTesting public static final byte TYPE_STRING = 0x02; /** * @hide **/ @VisibleForTesting public static final byte TYPE_LIST = 0x03; /** * @hide **/ @VisibleForTesting public static final byte TYPE_FLOAT = 0x04; /** * @hide **/ @VisibleForTesting public static final byte TYPE_BOOLEAN = 0x05; /** * @hide **/ @VisibleForTesting public static final byte TYPE_BYTE_ARRAY = 0x06; /** * @hide **/ @VisibleForTesting public static final byte TYPE_OBJECT = 0x07; /** * @hide **/ @VisibleForTesting public static final byte TYPE_KEY_VALUE_PAIRS = 0x08; /** * @hide **/ @VisibleForTesting public static final byte TYPE_ATTRIBUTION_CHAIN = 0x09; /** * @hide **/ @VisibleForTesting public static final byte TYPE_ERRORS = 0x0F; // Error flags. /** * @hide **/ @VisibleForTesting public static final int ERROR_NO_TIMESTAMP = 0x1; /** * @hide **/ @VisibleForTesting public static final int ERROR_NO_ATOM_ID = 0x2; /** * @hide **/ @VisibleForTesting public static final int ERROR_OVERFLOW = 0x4; /** * @hide **/ @VisibleForTesting public static final int ERROR_ATTRIBUTION_CHAIN_TOO_LONG = 0x8; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_KEY_VALUE_PAIRS = 0x10; /** * @hide **/ @VisibleForTesting public static final int ERROR_ANNOTATION_DOES_NOT_FOLLOW_FIELD = 0x20; /** * @hide **/ @VisibleForTesting public static final int ERROR_INVALID_ANNOTATION_ID = 0x40; /** * @hide **/ @VisibleForTesting public static final int ERROR_ANNOTATION_ID_TOO_LARGE = 0x80; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_ANNOTATIONS = 0x100; /** * @hide **/ @VisibleForTesting public static final int ERROR_TOO_MANY_FIELDS = 0x200; /** * @hide **/ @VisibleForTesting public static final int ERROR_ATTRIBUTION_UIDS_TAGS_SIZES_NOT_EQUAL = 0x400; // Size limits. /** * @hide **/ @VisibleForTesting public static final int MAX_ANNOTATION_COUNT = 15; /** * @hide **/ @VisibleForTesting public static final int MAX_ATTRIBUTION_NODES = 127; /** * @hide **/ @VisibleForTesting public static final int MAX_NUM_ELEMENTS = 127; /** * @hide **/ @VisibleForTesting public static final int MAX_KEY_VALUE_PAIRS = 127; private static final int LOGGER_ENTRY_MAX_PAYLOAD = 4068; // Max payload size is 4 bytes less as 4 bytes are reserved for statsEventTag. Loading @@ -69,23 +229,74 @@ public final class StatsEvent implements Parcelable { return new StatsEvent.Builder(Buffer.obtain()); } int getAtomId() { /** * Get the atom Id of the atom encoded in this StatsEvent object. * * @hide **/ public int getAtomId() { return mAtomId; } /** * Get the byte array that contains the encoded payload that can be sent to statsd. * * @hide **/ @NonNull byte[] getBytes() { public byte[] getBytes() { return mBuffer.getBytes(); } int getNumBytes() { /** * Get the number of bytes used to encode the StatsEvent payload. * * @hide **/ public int getNumBytes() { return mNumBytes; } void release() { /** * Recycle this StatsEvent object. **/ public void release() { mBuffer.release(); } /** * Boilerplate for Parcel. */ public static final @NonNull Parcelable.Creator<StatsEvent> CREATOR = new Parcelable.Creator<StatsEvent>() { public StatsEvent createFromParcel(Parcel in) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } public StatsEvent[] newArray(int size) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } }; /** * Boilerplate for Parcel. */ public void writeToParcel(Parcel out, int flags) { out.writeInt(mAtomId); out.writeInt(getNumBytes()); out.writeByteArray(getBytes()); } /** * Boilerplate for Parcel. */ public int describeContents() { return 0; } /** * Builder for constructing a StatsEvent object. * Loading Loading @@ -114,41 +325,8 @@ public final class StatsEvent implements Parcelable { * .addBooleanAnnotation(annotation1Id, true) * .build(); * </pre> * @hide **/ public static final class Builder { // Type Ids. private static final byte TYPE_INT = 0x00; private static final byte TYPE_LONG = 0x01; private static final byte TYPE_STRING = 0x02; private static final byte TYPE_LIST = 0x03; private static final byte TYPE_FLOAT = 0x04; private static final byte TYPE_BOOLEAN = 0x05; private static final byte TYPE_BYTE_ARRAY = 0x06; private static final byte TYPE_OBJECT = 0x07; private static final byte TYPE_KEY_VALUE_PAIRS = 0x08; private static final byte TYPE_ATTRIBUTION_CHAIN = 0x09; private static final byte TYPE_ERRORS = 0x0F; // Error flags. private static final int ERROR_NO_TIMESTAMP = 0x1; private static final int ERROR_NO_ATOM_ID = 0x2; private static final int ERROR_OVERFLOW = 0x4; private static final int ERROR_ATTRIBUTION_CHAIN_TOO_LONG = 0x8; private static final int ERROR_TOO_MANY_KEY_VALUE_PAIRS = 0x10; private static final int ERROR_ANNOTATION_DOES_NOT_FOLLOW_FIELD = 0x20; private static final int ERROR_INVALID_ANNOTATION_ID = 0x40; private static final int ERROR_ANNOTATION_ID_TOO_LARGE = 0x80; private static final int ERROR_TOO_MANY_ANNOTATIONS = 0x100; private static final int ERROR_TOO_MANY_FIELDS = 0x200; private static final int ERROR_ATTRIBUTION_UIDS_TAGS_SIZES_NOT_EQUAL = 0x400; // Size limits. private static final int MAX_ANNOTATION_COUNT = 15; private static final int MAX_ATTRIBUTION_NODES = 127; private static final int MAX_NUM_ELEMENTS = 127; private static final int MAX_KEY_VALUE_PAIRS = 127; // Fixed positions. private static final int POS_NUM_ELEMENTS = 1; private static final int POS_TIMESTAMP_NS = POS_NUM_ELEMENTS + Byte.BYTES; Loading Loading @@ -290,7 +468,7 @@ public final class StatsEvent implements Parcelable { * @param tags array of tags in the attribution nodes. **/ @NonNull public Builder writeAttributionNode( public Builder writeAttributionChain( @NonNull final int[] uids, @NonNull final String[] tags) { final byte numUids = (byte) uids.length; final byte numTags = (byte) tags.length; Loading Loading @@ -633,39 +811,4 @@ public final class StatsEvent implements Parcelable { return 0; } } /** * Boilerplate for Parcel. * * @hide */ public static final @NonNull Parcelable.Creator<StatsEvent> CREATOR = new Parcelable.Creator<StatsEvent>() { public StatsEvent createFromParcel(Parcel in) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } public StatsEvent[] newArray(int size) { // Purposefully leaving this method not implemented. throw new RuntimeException("Not implemented"); } }; /** * @hide */ public void writeToParcel(Parcel out, int flags) { out.writeInt(mAtomId); out.writeInt(getNumBytes()); out.writeByteArray(getBytes()); } /** * Boilerplate for Parcel. */ public int describeContents() { return 0; } }