summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author shubang <shubang@google.com> 2021-03-10 17:50:48 -0800
committer shubang <shubang@google.com> 2021-03-19 18:34:47 -0700
commitbe0b58d62ae1e90de8ab420ce311a8e8a5911b75 (patch)
treee4fd30e2b5a7a4fe3ba70ee4860d6542edd676bc
parent11bc52ed429fce95ba8732061d51471459dc9196 (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.txt78
-rw-r--r--core/api/test-current.txt8
-rw-r--r--media/java/android/media/metrics/Event.java15
-rw-r--r--media/java/android/media/metrics/LogSessionId.java15
-rw-r--r--media/java/android/media/metrics/MediaMetricsManager.java1
-rw-r--r--media/java/android/media/metrics/NetworkEvent.java53
-rw-r--r--media/java/android/media/metrics/PlaybackErrorEvent.java145
-rw-r--r--media/java/android/media/metrics/PlaybackMetrics.java59
-rw-r--r--media/java/android/media/metrics/PlaybackSession.java7
-rw-r--r--media/java/android/media/metrics/PlaybackStateEvent.java39
-rw-r--r--media/java/android/media/metrics/RecordingSession.java5
-rw-r--r--media/java/android/media/metrics/TrackChangeEvent.java78
-rw-r--r--services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java5
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);