diff options
| author | 2021-03-10 17:50:48 -0800 | |
|---|---|---|
| committer | 2021-03-19 18:34:47 -0700 | |
| commit | be0b58d62ae1e90de8ab420ce311a8e8a5911b75 (patch) | |
| tree | e4fd30e2b5a7a4fe3ba70ee4860d6542edd676bc | |
| parent | 11bc52ed429fce95ba8732061d51471459dc9196 (diff) | |
Unhide media metrics APIs
1. playbackId class
2. metrics bundle for future backwards compatibility
3. new enums and fields
Bug: 167036690
Test: atest android.media.metrics.cts
Change-Id: I09889dfd247017ee43fb833d9df98420dccf54a6
| -rw-r--r-- | core/api/current.txt | 78 | ||||
| -rw-r--r-- | core/api/test-current.txt | 8 | ||||
| -rw-r--r-- | media/java/android/media/metrics/Event.java | 15 | ||||
| -rw-r--r-- | media/java/android/media/metrics/LogSessionId.java | 15 | ||||
| -rw-r--r-- | media/java/android/media/metrics/MediaMetricsManager.java | 1 | ||||
| -rw-r--r-- | media/java/android/media/metrics/NetworkEvent.java | 53 | ||||
| -rw-r--r-- | media/java/android/media/metrics/PlaybackErrorEvent.java | 145 | ||||
| -rw-r--r-- | media/java/android/media/metrics/PlaybackMetrics.java | 59 | ||||
| -rw-r--r-- | media/java/android/media/metrics/PlaybackSession.java | 7 | ||||
| -rw-r--r-- | media/java/android/media/metrics/PlaybackStateEvent.java | 39 | ||||
| -rw-r--r-- | media/java/android/media/metrics/RecordingSession.java | 5 | ||||
| -rw-r--r-- | media/java/android/media/metrics/TrackChangeEvent.java | 78 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java | 5 |
13 files changed, 336 insertions, 172 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 481850e5c138..7907ee6ed4ea 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -24412,11 +24412,16 @@ package android.media.metrics { public abstract class Event { ctor protected Event(long); + method @NonNull public android.os.Bundle getMetricsBundle(); method @IntRange(from=0xffffffff) public long getTimeSinceCreatedMillis(); } + public final class LogSessionId { + } + public class MediaMetricsManager { method @NonNull public android.media.metrics.PlaybackSession createPlaybackSession(); + method @NonNull public android.media.metrics.RecordingSession createRecordingSession(); field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL } @@ -24431,14 +24436,16 @@ package android.media.metrics { field public static final int NETWORK_TYPE_5G_NSA = 7; // 0x7 field public static final int NETWORK_TYPE_5G_SA = 8; // 0x8 field public static final int NETWORK_TYPE_ETHERNET = 3; // 0x3 - field public static final int NETWORK_TYPE_NONE = 0; // 0x0 + field public static final int NETWORK_TYPE_OFFLINE = 9; // 0x9 field public static final int NETWORK_TYPE_OTHER = 1; // 0x1 + field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0 field public static final int NETWORK_TYPE_WIFI = 2; // 0x2 } public static final class NetworkEvent.Builder { ctor public NetworkEvent.Builder(); method @NonNull public android.media.metrics.NetworkEvent build(); + method @NonNull public android.media.metrics.NetworkEvent.Builder setMetricsBundle(@NonNull android.os.Bundle); method @NonNull public android.media.metrics.NetworkEvent.Builder setNetworkType(int); method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); } @@ -24454,9 +24461,37 @@ package android.media.metrics { method @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) public int getSubErrorCode(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackErrorEvent> CREATOR; - field public static final int ERROR_CODE_OTHER = 1; // 0x1 - field public static final int ERROR_CODE_RUNTIME = 2; // 0x2 - field public static final int ERROR_CODE_UNKNOWN = 0; // 0x0 + field public static final int ERROR_AUDIOTRACK_INIT = 17; // 0x11 + field public static final int ERROR_AUDIOTRACK_OTHER = 19; // 0x13 + field public static final int ERROR_AUDIOTRACK_WRITE = 18; // 0x12 + field public static final int ERROR_DECODER_DECODE = 14; // 0xe + field public static final int ERROR_DECODER_INIT = 13; // 0xd + field public static final int ERROR_DECODER_OOM = 15; // 0xf + field public static final int ERROR_DECODER_OTHER = 16; // 0x10 + field public static final int ERROR_DRM_CONTENT_ERROR = 28; // 0x1c + field public static final int ERROR_DRM_DISALLOWED = 26; // 0x1a + field public static final int ERROR_DRM_LICENSE_ERROR = 25; // 0x19 + field public static final int ERROR_DRM_OTHER = 30; // 0x1e + field public static final int ERROR_DRM_PROVISIONING_FAILED = 24; // 0x18 + field public static final int ERROR_DRM_REVOKED = 29; // 0x1d + field public static final int ERROR_DRM_SYSTEM_ERROR = 27; // 0x1b + field public static final int ERROR_DRM_UNAVAILABLE = 23; // 0x17 + field public static final int ERROR_MEDIA_MANIFEST = 10; // 0xa + field public static final int ERROR_MEDIA_OTHER = 12; // 0xc + field public static final int ERROR_MEDIA_PARSER = 11; // 0xb + field public static final int ERROR_NETWORK_BAD_STATUS = 5; // 0x5 + field public static final int ERROR_NETWORK_CLOSED = 8; // 0x8 + field public static final int ERROR_NETWORK_CONNECT = 4; // 0x4 + field public static final int ERROR_NETWORK_DNS = 6; // 0x6 + field public static final int ERROR_NETWORK_OFFLINE = 3; // 0x3 + field public static final int ERROR_NETWORK_OTHER = 9; // 0x9 + field public static final int ERROR_NETWORK_TIMEOUT = 7; // 0x7 + field public static final int ERROR_OTHER = 1; // 0x1 + field public static final int ERROR_PLAYER_BEHIND_LIVE_WINDOW = 21; // 0x15 + field public static final int ERROR_PLAYER_OTHER = 22; // 0x16 + field public static final int ERROR_PLAYER_REMOTE = 20; // 0x14 + field public static final int ERROR_RUNTIME = 2; // 0x2 + field public static final int ERROR_UNKNOWN = 0; // 0x0 } public static final class PlaybackErrorEvent.Builder { @@ -24464,6 +24499,7 @@ package android.media.metrics { method @NonNull public android.media.metrics.PlaybackErrorEvent build(); method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setErrorCode(int); method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setException(@NonNull Exception); + method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setMetricsBundle(@NonNull android.os.Bundle); method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setSubErrorCode(@IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); } @@ -24472,10 +24508,12 @@ package android.media.metrics { method public int describeContents(); method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioUnderrunCount(); method public int getContentType(); + method @NonNull public byte[] getDrmSessionId(); method public int getDrmType(); method @NonNull public long[] getExperimentIds(); method @IntRange(from=0xffffffff) public long getLocalBytesRead(); method @IntRange(from=0xffffffff) public long getMediaDurationMillis(); + method @NonNull public android.os.Bundle getMetricsBundle(); method @IntRange(from=0xffffffff) public long getNetworkBytesRead(); method @IntRange(from=0xffffffff) public long getNetworkTransferDurationMillis(); method public int getPlaybackType(); @@ -24486,9 +24524,10 @@ package android.media.metrics { method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesDropped(); method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesPlayed(); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final int CONTENT_TYPE_AD = 1; // 0x1 - field public static final int CONTENT_TYPE_MAIN = 0; // 0x0 - field public static final int CONTENT_TYPE_OTHER = 2; // 0x2 + field public static final int CONTENT_TYPE_AD = 2; // 0x2 + field public static final int CONTENT_TYPE_MAIN = 1; // 0x1 + field public static final int CONTENT_TYPE_OTHER = 3; // 0x3 + field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0 field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackMetrics> CREATOR; field public static final int DRM_TYPE_CLEARKEY = 6; // 0x6 field public static final int DRM_TYPE_NONE = 0; // 0x0 @@ -24497,9 +24536,10 @@ package android.media.metrics { field public static final int DRM_TYPE_WIDEVINE_L1 = 3; // 0x3 field public static final int DRM_TYPE_WIDEVINE_L3 = 4; // 0x4 field public static final int DRM_TYPE_WV_L3_FALLBACK = 5; // 0x5 - field public static final int PLAYBACK_TYPE_LIVE = 1; // 0x1 - field public static final int PLAYBACK_TYPE_OTHER = 2; // 0x2 - field public static final int PLAYBACK_TYPE_VOD = 0; // 0x0 + field public static final int PLAYBACK_TYPE_LIVE = 2; // 0x2 + field public static final int PLAYBACK_TYPE_OTHER = 3; // 0x3 + field public static final int PLAYBACK_TYPE_UNKNOWN = 0; // 0x0 + field public static final int PLAYBACK_TYPE_VOD = 1; // 0x1 field public static final int STREAM_SOURCE_DEVICE = 2; // 0x2 field public static final int STREAM_SOURCE_MIXED = 3; // 0x3 field public static final int STREAM_SOURCE_NETWORK = 1; // 0x1 @@ -24518,9 +24558,11 @@ package android.media.metrics { method @NonNull public android.media.metrics.PlaybackMetrics build(); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setAudioUnderrunCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setContentType(int); + method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmSessionId(@NonNull byte[]); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmType(int); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setLocalBytesRead(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMediaDurationMillis(@IntRange(from=0xffffffff) long); + method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMetricsBundle(@NonNull android.os.Bundle); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkBytesRead(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkTransferDurationMillis(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlaybackType(int); @@ -24534,7 +24576,7 @@ package android.media.metrics { public final class PlaybackSession implements java.lang.AutoCloseable { method public void close(); - method @NonNull public String getId(); + method @NonNull public android.media.metrics.LogSessionId getSessionId(); method public void reportNetworkEvent(@NonNull android.media.metrics.NetworkEvent); method public void reportPlaybackErrorEvent(@NonNull android.media.metrics.PlaybackErrorEvent); method public void reportPlaybackMetrics(@NonNull android.media.metrics.PlaybackMetrics); @@ -24567,13 +24609,19 @@ package android.media.metrics { public static final class PlaybackStateEvent.Builder { ctor public PlaybackStateEvent.Builder(); method @NonNull public android.media.metrics.PlaybackStateEvent build(); + method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setMetricsBundle(@NonNull android.os.Bundle); method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setState(int); method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); } + public final class RecordingSession implements java.lang.AutoCloseable { + method public void close(); + method @NonNull public android.media.metrics.LogSessionId getSessionId(); + } + public final class TrackChangeEvent extends android.media.metrics.Event implements android.os.Parcelable { - ctor public TrackChangeEvent(int, int, @Nullable String, @Nullable String, @Nullable String, int, long, int, @Nullable String, @Nullable String, int, int, int, int); method public int describeContents(); + method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioSampleRate(); method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getBitrate(); method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getChannelCount(); method @Nullable public String getCodecName(); @@ -24582,10 +24630,10 @@ package android.media.metrics { method @Nullable public String getLanguage(); method @Nullable public String getLanguageRegion(); method @Nullable public String getSampleMimeType(); - method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getSampleRate(); method public int getTrackChangeReason(); method public int getTrackState(); method public int getTrackType(); + method @FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) public float getVideoFrameRate(); method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getWidth(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.TrackChangeEvent> CREATOR; @@ -24604,6 +24652,7 @@ package android.media.metrics { public static final class TrackChangeEvent.Builder { ctor public TrackChangeEvent.Builder(int); method @NonNull public android.media.metrics.TrackChangeEvent build(); + method @NonNull public android.media.metrics.TrackChangeEvent.Builder setAudioSampleRate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setBitrate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setChannelCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setCodecName(@NonNull String); @@ -24611,11 +24660,12 @@ package android.media.metrics { method @NonNull public android.media.metrics.TrackChangeEvent.Builder setHeight(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguage(@NonNull String); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguageRegion(@NonNull String); + method @NonNull public android.media.metrics.TrackChangeEvent.Builder setMetricsBundle(@NonNull android.os.Bundle); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setSampleMimeType(@NonNull String); - method @NonNull public android.media.metrics.TrackChangeEvent.Builder setSampleRate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackChangeReason(int); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackState(int); + method @NonNull public android.media.metrics.TrackChangeEvent.Builder setVideoFrameRate(@FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) float); method @NonNull public android.media.metrics.TrackChangeEvent.Builder setWidth(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); } diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 92dada62b264..d16b237ae8bb 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1473,6 +1473,14 @@ package android.media.audiopolicy { } +package android.media.metrics { + + public final class LogSessionId { + method @NonNull public String getStringId(); + } + +} + package android.media.tv { public final class TvInputManager { diff --git a/media/java/android/media/metrics/Event.java b/media/java/android/media/metrics/Event.java index 96b61d2eaf4d..17218f09b5d6 100644 --- a/media/java/android/media/metrics/Event.java +++ b/media/java/android/media/metrics/Event.java @@ -17,6 +17,7 @@ package android.media.metrics; import android.annotation.IntRange; +import android.annotation.NonNull; import android.os.Bundle; /** @@ -24,7 +25,7 @@ import android.os.Bundle; */ public abstract class Event { final long mTimeSinceCreatedMillis; - Bundle mExtras; + Bundle mMetricsBundle = new Bundle(); // hide default constructor /* package */ Event() { @@ -38,7 +39,7 @@ public abstract class Event { /* package */ Event(long timeSinceCreatedMillis, Bundle extras) { mTimeSinceCreatedMillis = timeSinceCreatedMillis; - mExtras = extras; + mMetricsBundle = extras; } /** @@ -50,8 +51,12 @@ public abstract class Event { return mTimeSinceCreatedMillis; } - /** @hide */ - public Bundle getExtras() { - return mExtras; + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; } } diff --git a/media/java/android/media/metrics/LogSessionId.java b/media/java/android/media/metrics/LogSessionId.java index 7ddb259f7f28..f68ef4b68de1 100644 --- a/media/java/android/media/metrics/LogSessionId.java +++ b/media/java/android/media/metrics/LogSessionId.java @@ -16,19 +16,28 @@ package android.media.metrics; +import android.annotation.NonNull; +import android.annotation.TestApi; + /** * An instances of this class represents the ID of a log session. - * @hide */ -public class LogSessionId { +public final class LogSessionId { private final String mSessionId; - /* package */ LogSessionId(String id) { + /* package */ LogSessionId(@NonNull String id) { mSessionId = id; } /** @hide */ + @TestApi + @NonNull public String getStringId() { return mSessionId; } + + @Override + public String toString() { + return mSessionId; + } } diff --git a/media/java/android/media/metrics/MediaMetricsManager.java b/media/java/android/media/metrics/MediaMetricsManager.java index 9710e88cf24b..b4a74a33197a 100644 --- a/media/java/android/media/metrics/MediaMetricsManager.java +++ b/media/java/android/media/metrics/MediaMetricsManager.java @@ -104,7 +104,6 @@ public class MediaMetricsManager { /** * Creates a recording session. - * @hide */ @NonNull public RecordingSession createRecordingSession() { diff --git a/media/java/android/media/metrics/NetworkEvent.java b/media/java/android/media/metrics/NetworkEvent.java index 186606825104..0e805439e603 100644 --- a/media/java/android/media/metrics/NetworkEvent.java +++ b/media/java/android/media/metrics/NetworkEvent.java @@ -32,10 +32,7 @@ import java.util.Objects; * Media network event. */ public final class NetworkEvent extends Event implements Parcelable { - /** Network type is not specified. Default type. */ - public static final int NETWORK_TYPE_NONE = 0; - // TODO: replace NONE with UNKNOWN - /** @hide */ + /** Network type is not known. Default type. */ public static final int NETWORK_TYPE_UNKNOWN = 0; /** Other network type */ public static final int NETWORK_TYPE_OTHER = 1; @@ -54,7 +51,6 @@ public final class NetworkEvent extends Event implements Parcelable { /** 5G SA network */ public static final int NETWORK_TYPE_5G_SA = 8; /** Not network connected */ - /** @hide */ public static final int NETWORK_TYPE_OFFLINE = 9; private final int mNetworkType; @@ -62,7 +58,6 @@ public final class NetworkEvent extends Event implements Parcelable { /** @hide */ @IntDef(prefix = "NETWORK_TYPE_", value = { - NETWORK_TYPE_NONE, NETWORK_TYPE_UNKNOWN, NETWORK_TYPE_OTHER, NETWORK_TYPE_WIFI, @@ -83,8 +78,8 @@ public final class NetworkEvent extends Event implements Parcelable { */ public static String networkTypeToString(@NetworkType int value) { switch (value) { - case NETWORK_TYPE_NONE: - return "NETWORK_TYPE_NONE"; + case NETWORK_TYPE_UNKNOWN: + return "NETWORK_TYPE_UNKNOWN"; case NETWORK_TYPE_OTHER: return "NETWORK_TYPE_OTHER"; case NETWORK_TYPE_WIFI: @@ -114,10 +109,10 @@ public final class NetworkEvent extends Event implements Parcelable { * @hide */ public NetworkEvent(@NetworkType int type, long timeSinceCreatedMillis, - @Nullable Bundle extras) { + @NonNull Bundle extras) { this.mNetworkType = type; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mExtras = extras == null ? null : extras.deepCopy(); + this.mMetricsBundle = extras == null ? null : extras.deepCopy(); } /** @@ -138,6 +133,16 @@ public final class NetworkEvent extends Event implements Parcelable { return mTimeSinceCreatedMillis; } + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @Override + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; + } + @Override public String toString() { return "NetworkEvent { " @@ -162,12 +167,9 @@ public final class NetworkEvent extends Event implements Parcelable { @Override public void writeToParcel(@NonNull android.os.Parcel dest, int flags) { - byte flg = 0; - if (mExtras != null) flg |= 0x1; - dest.writeByte(flg); dest.writeInt(mNetworkType); dest.writeLong(mTimeSinceCreatedMillis); - if (mExtras != null) dest.writeBundle(mExtras); + dest.writeBundle(mMetricsBundle); } @Override @@ -177,14 +179,13 @@ public final class NetworkEvent extends Event implements Parcelable { /** @hide */ /* package-private */ NetworkEvent(@NonNull android.os.Parcel in) { - byte flg = in.readByte(); int type = in.readInt(); long timeSinceCreatedMillis = in.readLong(); - Bundle extras = (flg & 0x2) == 0 ? null : in.readBundle(); + Bundle extras = in.readBundle(); this.mNetworkType = type; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mExtras = extras; + this.mMetricsBundle = extras; } /** @@ -207,9 +208,9 @@ public final class NetworkEvent extends Event implements Parcelable { * A builder for {@link NetworkEvent} */ public static final class Builder { - private int mNetworkType = NETWORK_TYPE_NONE; + private int mNetworkType = NETWORK_TYPE_UNKNOWN; private long mTimeSinceCreatedMillis = -1; - private Bundle mExtras; + private Bundle mMetricsBundle = new Bundle(); /** * Creates a new Builder. @@ -236,18 +237,20 @@ public final class NetworkEvent extends Event implements Parcelable { } /** - * Set extras for compatibility. - * <p>Should be used by support library only. - * @hide + * Sets metrics-related information that is not supported by dedicated + * methods. + * <p>It is intended to be used for backwards compatibility by the + * metrics infrastructure. */ - public @NonNull Builder setExtras(@NonNull Bundle extras) { - mExtras = extras; + public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) { + mMetricsBundle = metricsBundle; return this; } /** Builds the instance. */ public @NonNull NetworkEvent build() { - NetworkEvent o = new NetworkEvent(mNetworkType, mTimeSinceCreatedMillis, mExtras); + NetworkEvent o = + new NetworkEvent(mNetworkType, mTimeSinceCreatedMillis, mMetricsBundle); return o; } } diff --git a/media/java/android/media/metrics/PlaybackErrorEvent.java b/media/java/android/media/metrics/PlaybackErrorEvent.java index ccf848b50a36..f36c04e77521 100644 --- a/media/java/android/media/metrics/PlaybackErrorEvent.java +++ b/media/java/android/media/metrics/PlaybackErrorEvent.java @@ -33,11 +33,77 @@ import java.util.Objects; */ public final class PlaybackErrorEvent extends Event implements Parcelable { /** Unknown error code. */ - public static final int ERROR_CODE_UNKNOWN = 0; + public static final int ERROR_UNKNOWN = 0; /** Error code for other errors */ - public static final int ERROR_CODE_OTHER = 1; + public static final int ERROR_OTHER = 1; /** Error code for runtime errors */ - public static final int ERROR_CODE_RUNTIME = 2; + public static final int ERROR_RUNTIME = 2; + + /** No network */ + public static final int ERROR_NETWORK_OFFLINE = 3; + /** Connection opening error */ + public static final int ERROR_NETWORK_CONNECT = 4; + /** Bad HTTP status code */ + public static final int ERROR_NETWORK_BAD_STATUS = 5; + /** DNS resolution error */ + public static final int ERROR_NETWORK_DNS = 6; + /** Network socket timeout */ + public static final int ERROR_NETWORK_TIMEOUT = 7; + /** Connection closed */ + public static final int ERROR_NETWORK_CLOSED = 8; + /** Other network errors */ + public static final int ERROR_NETWORK_OTHER = 9; + + /** Manifest parsing error */ + public static final int ERROR_MEDIA_MANIFEST = 10; + /** + * Media bitstream (audio, video, text, metadata) parsing error, either malformed or + * unsupported. + */ + public static final int ERROR_MEDIA_PARSER = 11; + /** Other media errors */ + public static final int ERROR_MEDIA_OTHER = 12; + + /** Codec initialization failed */ + public static final int ERROR_DECODER_INIT = 13; + /** Decoding failed */ + public static final int ERROR_DECODER_DECODE = 14; + /** Out of memory */ + public static final int ERROR_DECODER_OOM = 15; + /** Other decoder errors */ + public static final int ERROR_DECODER_OTHER = 16; + + /** AudioTrack initialization failed */ + public static final int ERROR_AUDIOTRACK_INIT = 17; + /** AudioTrack writing failed */ + public static final int ERROR_AUDIOTRACK_WRITE = 18; + /** Other AudioTrack errors */ + public static final int ERROR_AUDIOTRACK_OTHER = 19; + + /** Exception in remote controller or player */ + public static final int ERROR_PLAYER_REMOTE = 20; + /** Error when a Live playback falls behind the Live DVR window. */ + public static final int ERROR_PLAYER_BEHIND_LIVE_WINDOW = 21; + /** Other player errors */ + public static final int ERROR_PLAYER_OTHER = 22; + + /** Scheme unsupported by device */ + public static final int ERROR_DRM_UNAVAILABLE = 23; + /** Provisioning failed */ + public static final int ERROR_DRM_PROVISIONING_FAILED = 24; + /** Failed to acquire license */ + public static final int ERROR_DRM_LICENSE_ERROR = 25; + /** Operation prevented by license policy */ + public static final int ERROR_DRM_DISALLOWED = 26; + /** Failure in the DRM system */ + public static final int ERROR_DRM_SYSTEM_ERROR = 27; + /** Incompatible content */ + public static final int ERROR_DRM_CONTENT_ERROR = 28; + /** Device has been revoked */ + public static final int ERROR_DRM_REVOKED = 29; + /** Other drm errors */ + public static final int ERROR_DRM_OTHER = 30; + private final @Nullable String mExceptionStack; private final int mErrorCode; @@ -46,11 +112,38 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { /** @hide */ - // TODO: more error types - @IntDef(prefix = "ERROR_CODE_", value = { - ERROR_CODE_UNKNOWN, - ERROR_CODE_OTHER, - ERROR_CODE_RUNTIME + @IntDef(prefix = "ERROR_", value = { + ERROR_UNKNOWN, + ERROR_OTHER, + ERROR_RUNTIME, + ERROR_NETWORK_OFFLINE, + ERROR_NETWORK_CONNECT, + ERROR_NETWORK_BAD_STATUS, + ERROR_NETWORK_DNS, + ERROR_NETWORK_TIMEOUT, + ERROR_NETWORK_CLOSED, + ERROR_NETWORK_OTHER, + ERROR_MEDIA_MANIFEST, + ERROR_MEDIA_PARSER, + ERROR_MEDIA_OTHER, + ERROR_DECODER_INIT, + ERROR_DECODER_DECODE, + ERROR_DECODER_OOM, + ERROR_DECODER_OTHER, + ERROR_AUDIOTRACK_INIT, + ERROR_AUDIOTRACK_WRITE, + ERROR_AUDIOTRACK_OTHER, + ERROR_PLAYER_REMOTE, + ERROR_PLAYER_BEHIND_LIVE_WINDOW, + ERROR_PLAYER_OTHER, + ERROR_DRM_UNAVAILABLE, + ERROR_DRM_PROVISIONING_FAILED, + ERROR_DRM_LICENSE_ERROR, + ERROR_DRM_DISALLOWED, + ERROR_DRM_SYSTEM_ERROR, + ERROR_DRM_CONTENT_ERROR, + ERROR_DRM_REVOKED, + ERROR_DRM_OTHER, }) @Retention(java.lang.annotation.RetentionPolicy.SOURCE) public @interface ErrorCode {} @@ -65,12 +158,12 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { int errorCode, int subErrorCode, long timeSinceCreatedMillis, - @Nullable Bundle extras) { + @NonNull Bundle extras) { this.mExceptionStack = exceptionStack; this.mErrorCode = errorCode; this.mSubErrorCode = subErrorCode; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mExtras = extras == null ? null : extras.deepCopy(); + this.mMetricsBundle = extras.deepCopy(); } /** @hide */ @@ -107,6 +200,16 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { return mTimeSinceCreatedMillis; } + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @Override + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; + } + @Override public String toString() { return "PlaybackErrorEvent { " @@ -138,13 +241,12 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { public void writeToParcel(@NonNull Parcel dest, int flags) { byte flg = 0; if (mExceptionStack != null) flg |= 0x1; - if (mExtras != null) flg |= 0x2; dest.writeByte(flg); if (mExceptionStack != null) dest.writeString(mExceptionStack); dest.writeInt(mErrorCode); dest.writeInt(mSubErrorCode); dest.writeLong(mTimeSinceCreatedMillis); - if (mExtras != null) dest.writeBundle(mExtras); + dest.writeBundle(mMetricsBundle); } @Override @@ -159,13 +261,13 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { int errorCode = in.readInt(); int subErrorCode = in.readInt(); long timeSinceCreatedMillis = in.readLong(); - Bundle extras = (flg & 0x2) == 0 ? null : in.readBundle(); + Bundle extras = in.readBundle(); this.mExceptionStack = exceptionStack; this.mErrorCode = errorCode; this.mSubErrorCode = subErrorCode; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mExtras = extras; + this.mMetricsBundle = extras; } @@ -190,7 +292,7 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { private int mErrorCode; private int mSubErrorCode; private long mTimeSinceCreatedMillis = -1; - private Bundle mExtras; + private Bundle mMetricsBundle = new Bundle(); /** * Creates a new Builder. @@ -235,12 +337,13 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { } /** - * Set extras for compatibility. - * <p>Should be used by support library only. - * @hide + * Sets metrics-related information that is not supported by dedicated + * methods. + * <p>It is intended to be used for backwards compatibility by the + * metrics infrastructure. */ - public @NonNull Builder setExtras(@NonNull Bundle extras) { - mExtras = extras; + public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) { + mMetricsBundle = metricsBundle; return this; } @@ -260,7 +363,7 @@ public final class PlaybackErrorEvent extends Event implements Parcelable { mErrorCode, mSubErrorCode, mTimeSinceCreatedMillis, - mExtras); + mMetricsBundle); return o; } } diff --git a/media/java/android/media/metrics/PlaybackMetrics.java b/media/java/android/media/metrics/PlaybackMetrics.java index 3ffd10f4ea8c..5f606a0a8ed0 100644 --- a/media/java/android/media/metrics/PlaybackMetrics.java +++ b/media/java/android/media/metrics/PlaybackMetrics.java @@ -60,15 +60,13 @@ public final class PlaybackMetrics implements Parcelable { public static final int STREAM_TYPE_SS = 5; /** Unknown playback type. */ - // TODO: change the PLAYBACK_TYPE_ values - /** @hide */ public static final int PLAYBACK_TYPE_UNKNOWN = 0; /** VOD (Video on Demand) playback type. */ - public static final int PLAYBACK_TYPE_VOD = 0; + public static final int PLAYBACK_TYPE_VOD = 1; /** Live playback type. */ - public static final int PLAYBACK_TYPE_LIVE = 1; + public static final int PLAYBACK_TYPE_LIVE = 2; /** Other playback type. */ - public static final int PLAYBACK_TYPE_OTHER = 2; + public static final int PLAYBACK_TYPE_OTHER = 3; /** DRM is not used. */ public static final int DRM_TYPE_NONE = 0; @@ -86,15 +84,13 @@ public final class PlaybackMetrics implements Parcelable { public static final int DRM_TYPE_CLEARKEY = 6; /** Unknown content type. */ - // TODO: change the CONTENT_TYPE_ values - /** @hide */ public static final int CONTENT_TYPE_UNKNOWN = 0; /** Main contents. */ - public static final int CONTENT_TYPE_MAIN = 0; + public static final int CONTENT_TYPE_MAIN = 1; /** Advertisement contents. */ - public static final int CONTENT_TYPE_AD = 1; + public static final int CONTENT_TYPE_AD = 2; /** Other contents. */ - public static final int CONTENT_TYPE_OTHER = 2; + public static final int CONTENT_TYPE_OTHER = 3; /** @hide */ @@ -170,7 +166,7 @@ public final class PlaybackMetrics implements Parcelable { private final long mLocalBytesRead; private final long mNetworkTransferDurationMillis; private final byte[] mDrmSessionId; - private final Bundle mExtras; + private final @NonNull Bundle mMetricsBundle; /** * Creates a new PlaybackMetrics. @@ -194,7 +190,7 @@ public final class PlaybackMetrics implements Parcelable { long localBytesRead, long networkTransferDurationMillis, byte[] drmSessionId, - @Nullable Bundle extras) { + @NonNull Bundle extras) { this.mMediaDurationMillis = mediaDurationMillis; this.mStreamSource = streamSource; this.mStreamType = streamType; @@ -212,7 +208,7 @@ public final class PlaybackMetrics implements Parcelable { this.mLocalBytesRead = localBytesRead; this.mNetworkTransferDurationMillis = networkTransferDurationMillis; this.mDrmSessionId = drmSessionId; - this.mExtras = extras == null ? null : extras.deepCopy(); + this.mMetricsBundle = extras.deepCopy(); } /** @@ -338,12 +334,23 @@ public final class PlaybackMetrics implements Parcelable { return mNetworkTransferDurationMillis; } - /** @hide */ + /** + * Gets DRM session ID. + */ @NonNull public byte[] getDrmSessionId() { return mDrmSessionId; } + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; + } + @Override public String toString() { return "PlaybackMetrics { " @@ -402,7 +409,6 @@ public final class PlaybackMetrics implements Parcelable { long flg = 0; if (mPlayerName != null) flg |= 0x80; if (mPlayerVersion != null) flg |= 0x100; - if (mExtras != null) flg |= 0x200; dest.writeLong(flg); dest.writeLong(mMediaDurationMillis); dest.writeInt(mStreamSource); @@ -412,7 +418,6 @@ public final class PlaybackMetrics implements Parcelable { dest.writeInt(mContentType); if (mPlayerName != null) dest.writeString(mPlayerName); if (mPlayerVersion != null) dest.writeString(mPlayerVersion); - if (mExtras != null) dest.writeBundle(mExtras); dest.writeLongArray(mExperimentIds); dest.writeInt(mVideoFramesPlayed); dest.writeInt(mVideoFramesDropped); @@ -422,6 +427,7 @@ public final class PlaybackMetrics implements Parcelable { dest.writeLong(mNetworkTransferDurationMillis); dest.writeInt(mDrmSessionId.length); dest.writeByteArray(mDrmSessionId); + dest.writeBundle(mMetricsBundle); } @Override @@ -440,7 +446,6 @@ public final class PlaybackMetrics implements Parcelable { int contentType = in.readInt(); String playerName = (flg & 0x80) == 0 ? null : in.readString(); String playerVersion = (flg & 0x100) == 0 ? null : in.readString(); - Bundle extras = (flg & 0x200) == 0 ? null : in.readBundle(); long[] experimentIds = in.createLongArray(); int videoFramesPlayed = in.readInt(); int videoFramesDropped = in.readInt(); @@ -451,6 +456,7 @@ public final class PlaybackMetrics implements Parcelable { int drmSessionIdLen = in.readInt(); byte[] drmSessionId = new byte[drmSessionIdLen]; in.readByteArray(drmSessionId); + Bundle extras = in.readBundle(); this.mMediaDurationMillis = mediaDurationMillis; this.mStreamSource = streamSource; @@ -469,7 +475,7 @@ public final class PlaybackMetrics implements Parcelable { this.mLocalBytesRead = localBytesRead; this.mNetworkTransferDurationMillis = networkTransferDurationMillis; this.mDrmSessionId = drmSessionId; - this.mExtras = extras; + this.mMetricsBundle = extras; } public static final @NonNull Parcelable.Creator<PlaybackMetrics> CREATOR = @@ -506,7 +512,7 @@ public final class PlaybackMetrics implements Parcelable { private long mLocalBytesRead = -1; private long mNetworkTransferDurationMillis = -1; private byte[] mDrmSessionId = new byte[0]; - private Bundle mExtras; + private Bundle mMetricsBundle = new Bundle(); /** * Creates a new Builder. @@ -646,7 +652,7 @@ public final class PlaybackMetrics implements Parcelable { } /** - * @hide + * Sets DRM session ID. */ public @NonNull Builder setDrmSessionId(@NonNull byte[] drmSessionId) { mDrmSessionId = drmSessionId; @@ -654,12 +660,13 @@ public final class PlaybackMetrics implements Parcelable { } /** - * Set extras for compatibility. - * <p>Should be used by support library only. - * @hide + * Sets metrics-related information that is not supported by dedicated + * methods. + * <p>It is intended to be used for backwards compatibility by the + * metrics infrastructure. */ - public @NonNull Builder setExtras(@NonNull Bundle extras) { - mExtras = extras; + public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) { + mMetricsBundle = metricsBundle; return this; } @@ -683,7 +690,7 @@ public final class PlaybackMetrics implements Parcelable { mLocalBytesRead, mNetworkTransferDurationMillis, mDrmSessionId, - mExtras); + mMetricsBundle); return o; } diff --git a/media/java/android/media/metrics/PlaybackSession.java b/media/java/android/media/metrics/PlaybackSession.java index 272fd9bd5576..aad510e87a7e 100644 --- a/media/java/android/media/metrics/PlaybackSession.java +++ b/media/java/android/media/metrics/PlaybackSession.java @@ -80,14 +80,7 @@ public final class PlaybackSession implements AutoCloseable { mManager.reportTrackChangeEvent(mId, event); } - public @NonNull String getId() { - // TODO: remove this method and use getSessionId(); - return mId; - } - - /** @hide */ public @NonNull LogSessionId getSessionId() { - // TODO: remove getId() and use this method; return mLogSessionId; } diff --git a/media/java/android/media/metrics/PlaybackStateEvent.java b/media/java/android/media/metrics/PlaybackStateEvent.java index 2bab5c9bc3dc..449abe952038 100644 --- a/media/java/android/media/metrics/PlaybackStateEvent.java +++ b/media/java/android/media/metrics/PlaybackStateEvent.java @@ -138,10 +138,10 @@ public final class PlaybackStateEvent extends Event implements Parcelable { public PlaybackStateEvent( int state, long timeSinceCreatedMillis, - @Nullable Bundle extras) { + @NonNull Bundle extras) { this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; this.mState = state; - this.mExtras = extras == null ? null : extras.deepCopy(); + this.mMetricsBundle = extras.deepCopy(); } /** @@ -161,6 +161,16 @@ public final class PlaybackStateEvent extends Event implements Parcelable { return mTimeSinceCreatedMillis; } + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @Override + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; + } + @Override public boolean equals(@Nullable Object o) { if (this == o) return true; @@ -177,12 +187,9 @@ public final class PlaybackStateEvent extends Event implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { - byte flg = 0; - if (mExtras != null) flg |= 0x1; - dest.writeByte(flg); dest.writeInt(mState); dest.writeLong(mTimeSinceCreatedMillis); - if (mExtras != null) dest.writeBundle(mExtras); + dest.writeBundle(mMetricsBundle); } @Override @@ -192,14 +199,13 @@ public final class PlaybackStateEvent extends Event implements Parcelable { /** @hide */ /* package-private */ PlaybackStateEvent(@NonNull Parcel in) { - byte flg = in.readByte(); int state = in.readInt(); long timeSinceCreatedMillis = in.readLong(); - Bundle extras = (flg & 0x1) == 0 ? null : in.readBundle(); + Bundle extras = in.readBundle(); this.mState = state; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mExtras = extras; + this.mMetricsBundle = extras; } public static final @NonNull Parcelable.Creator<PlaybackStateEvent> CREATOR = @@ -221,7 +227,7 @@ public final class PlaybackStateEvent extends Event implements Parcelable { public static final class Builder { private int mState = STATE_NOT_STARTED; private long mTimeSinceCreatedMillis = -1; - private Bundle mExtras; + private Bundle mMetricsBundle = new Bundle(); /** * Creates a new Builder. @@ -248,12 +254,13 @@ public final class PlaybackStateEvent extends Event implements Parcelable { } /** - * Set extras for compatibility. - * <p>Should be used by support library only. - * @hide + * Sets metrics-related information that is not supported by dedicated + * methods. + * <p>It is intended to be used for backwards compatibility by the + * metrics infrastructure. */ - public @NonNull Builder setExtras(@NonNull Bundle extras) { - mExtras = extras; + public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) { + mMetricsBundle = metricsBundle; return this; } @@ -262,7 +269,7 @@ public final class PlaybackStateEvent extends Event implements Parcelable { PlaybackStateEvent o = new PlaybackStateEvent( mState, mTimeSinceCreatedMillis, - mExtras); + mMetricsBundle); return o; } } diff --git a/media/java/android/media/metrics/RecordingSession.java b/media/java/android/media/metrics/RecordingSession.java index 541d129604ad..d38835149cd8 100644 --- a/media/java/android/media/metrics/RecordingSession.java +++ b/media/java/android/media/metrics/RecordingSession.java @@ -25,7 +25,6 @@ import java.util.Objects; /** * An instances of this class represents a session of media recording. - * @hide */ public final class RecordingSession implements AutoCloseable { private final @NonNull String mId; @@ -42,6 +41,10 @@ public final class RecordingSession implements AutoCloseable { mLogSessionId = new LogSessionId(mId); } + public @NonNull LogSessionId getSessionId() { + return mLogSessionId; + } + @Override public boolean equals(@Nullable Object o) { if (this == o) return true; diff --git a/media/java/android/media/metrics/TrackChangeEvent.java b/media/java/android/media/metrics/TrackChangeEvent.java index a3eb4adfeb8d..c36702695095 100644 --- a/media/java/android/media/metrics/TrackChangeEvent.java +++ b/media/java/android/media/metrics/TrackChangeEvent.java @@ -102,39 +102,6 @@ public final class TrackChangeEvent extends Event implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface TrackType {} - // TODO: remove this constructor. Use the private one below. - public TrackChangeEvent( - int state, - int reason, - @Nullable String containerMimeType, - @Nullable String sampleMimeType, - @Nullable String codecName, - int bitrate, - long timeSinceCreatedMillis, - int type, - @Nullable String language, - @Nullable String languageRegion, - int channelCount, - int sampleRate, - int width, - int height) { - this.mState = state; - this.mReason = reason; - this.mContainerMimeType = containerMimeType; - this.mSampleMimeType = sampleMimeType; - this.mCodecName = codecName; - this.mBitrate = bitrate; - this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; - this.mType = type; - this.mLanguage = language; - this.mLanguageRegion = languageRegion; - this.mChannelCount = channelCount; - this.mAudioSampleRate = sampleRate; - this.mWidth = width; - this.mHeight = height; - this.mVideoFrameRate = -1; - } - private TrackChangeEvent( int state, int reason, @@ -151,7 +118,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { int width, int height, float videoFrameRate, - @Nullable Bundle extras) { + @NonNull Bundle extras) { this.mState = state; this.mReason = reason; this.mContainerMimeType = containerMimeType; @@ -167,7 +134,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { this.mWidth = width; this.mHeight = height; this.mVideoFrameRate = videoFrameRate; - this.mExtras = extras == null ? null : extras.deepCopy(); + this.mMetricsBundle = extras.deepCopy(); } /** @@ -258,11 +225,11 @@ public final class TrackChangeEvent extends Event implements Parcelable { } /** - * Gets sample rate. + * Gets audio sample rate. * @return the sample rate, or -1 if unknown. */ @IntRange(from = -1, to = Integer.MAX_VALUE) - public int getSampleRate() { + public int getAudioSampleRate() { return mAudioSampleRate; } @@ -287,13 +254,22 @@ public final class TrackChangeEvent extends Event implements Parcelable { /** * Gets video frame rate. * @return the video frame rate, or -1 if unknown. - * @hide */ @FloatRange(from = -1, to = Float.MAX_VALUE) public float getVideoFrameRate() { return mVideoFrameRate; } + /** + * Gets metrics-related information that is not supported by dedicated methods. + * <p>It is intended to be used for backwards compatibility by the metrics infrastructure. + */ + @Override + @NonNull + public Bundle getMetricsBundle() { + return mMetricsBundle; + } + @Override public void writeToParcel(@NonNull Parcel dest, int flags) { int flg = 0; @@ -302,7 +278,6 @@ public final class TrackChangeEvent extends Event implements Parcelable { if (mCodecName != null) flg |= 0x10; if (mLanguage != null) flg |= 0x100; if (mLanguageRegion != null) flg |= 0x200; - if (mExtras != null) flg |= 0x400; dest.writeInt(flg); dest.writeInt(mState); dest.writeInt(mReason); @@ -319,7 +294,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { dest.writeInt(mWidth); dest.writeInt(mHeight); dest.writeFloat(mVideoFrameRate); - if (mExtras != null) dest.writeBundle(mExtras); + dest.writeBundle(mMetricsBundle); } @Override @@ -345,7 +320,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { int width = in.readInt(); int height = in.readInt(); float videoFrameRate = in.readFloat(); - Bundle extras = (flg & 0x400) == 0 ? null : in.readBundle(); + Bundle extras = in.readBundle(); this.mState = state; this.mReason = reason; @@ -362,7 +337,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { this.mWidth = width; this.mHeight = height; this.mVideoFrameRate = videoFrameRate; - this.mExtras = extras; + this.mMetricsBundle = extras; } public static final @NonNull Parcelable.Creator<TrackChangeEvent> CREATOR = @@ -448,7 +423,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { private int mWidth = -1; private int mHeight = -1; private float mVideoFrameRate = -1; - private Bundle mExtras; + private Bundle mMetricsBundle = new Bundle(); private long mBuilderFieldsSet = 0L; @@ -571,9 +546,8 @@ public final class TrackChangeEvent extends Event implements Parcelable { * Sets sample rate. * @param value the sample rate. -1 indicates the value is unknown. */ - public @NonNull Builder setSampleRate( + public @NonNull Builder setAudioSampleRate( @IntRange(from = -1, to = Integer.MAX_VALUE) int value) { - // TODO: rename it to setAudioSampleRate checkNotUsed(); mBuilderFieldsSet |= 0x800; mAudioSampleRate = value; @@ -605,7 +579,6 @@ public final class TrackChangeEvent extends Event implements Parcelable { /** * Sets video frame rate. * @param value the video frame rate. -1 indicates the value is unknown. - * @hide */ public @NonNull Builder setVideoFrameRate( @FloatRange(from = -1, to = Float.MAX_VALUE) float value) { @@ -615,12 +588,13 @@ public final class TrackChangeEvent extends Event implements Parcelable { } /** - * Set extras for compatibility. - * <p>Should be used by support library only. - * @hide + * Sets metrics-related information that is not supported by dedicated + * methods. + * <p>It is intended to be used for backwards compatibility by the + * metrics infrastructure. */ - public @NonNull Builder setExtras(@NonNull Bundle extras) { - mExtras = extras; + public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) { + mMetricsBundle = metricsBundle; return this; } @@ -645,7 +619,7 @@ public final class TrackChangeEvent extends Event implements Parcelable { mWidth, mHeight, mVideoFrameRate, - mExtras); + mMetricsBundle); return o; } diff --git a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java index 23195bbe5d7e..1e0142c496b0 100644 --- a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java +++ b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java @@ -75,6 +75,8 @@ public final class MediaMetricsManagerService extends SystemService { .writeLong(metrics.getNetworkBytesRead()) .writeLong(metrics.getLocalBytesRead()) .writeLong(metrics.getNetworkTransferDurationMillis()) + // Raw bytes type not allowed in atoms + .writeString(Base64.encodeToString(metrics.getDrmSessionId(), Base64.DEFAULT)) .usePooledBuffer() .build(); StatsLog.write(statsEvent); @@ -154,9 +156,10 @@ public final class MediaMetricsManagerService extends SystemService { .writeString(event.getLanguage()) .writeString(event.getLanguageRegion()) .writeInt(event.getChannelCount()) - .writeInt(event.getSampleRate()) + .writeInt(event.getAudioSampleRate()) .writeInt(event.getWidth()) .writeInt(event.getHeight()) + .writeFloat(event.getVideoFrameRate()) .usePooledBuffer() .build(); StatsLog.write(statsEvent); |