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

Commit f1ab80c0 authored by shubang's avatar shubang
Browse files

Unhide media metrics APIs part 2: playback metrics

Bug: 167036690
Test: mmm
Change-Id: I333aa0d5de72f5c89813df40a7c9fcc59423d635
parent f2bf0fd2
Loading
Loading
Loading
Loading
+73 −1
Original line number Diff line number Diff line
@@ -20978,7 +20978,7 @@ package android.media {
    method @NonNull public String getDiagnosticInfo();
  }
  public final class MediaCodec {
  public final class MediaCodec implements android.media.metrics.PlaybackComponent {
    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int);
    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler);
    method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException;
@@ -21004,6 +21004,7 @@ package android.media {
    method @NonNull public android.media.MediaFormat getOutputFormat(int);
    method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int);
    method @Nullable public android.media.Image getOutputImage(int);
    method public String getPlaybackId();
    method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int);
    method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer);
    method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException;
@@ -21019,6 +21020,7 @@ package android.media {
    method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler);
    method public void setOutputSurface(@NonNull android.view.Surface);
    method public void setParameters(@Nullable android.os.Bundle);
    method public void setPlaybackId(@NonNull String);
    method public void setVideoScalingMode(int);
    method public void signalEndOfInputStream();
    method public void start();
@@ -24108,6 +24110,11 @@ package android.media.metrics {
    method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
  }
  public interface PlaybackComponent {
    method @NonNull public String getPlaybackId();
    method public void setPlaybackId(@NonNull String);
  }
  public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable {
    method public int describeContents();
    method public int getErrorCode();
@@ -24128,11 +24135,76 @@ package android.media.metrics {
    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
  }
  public final class PlaybackMetrics implements android.os.Parcelable {
    method public int describeContents();
    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioUnderrunCount();
    method public int getContentType();
    method public int getDrmType();
    method @NonNull public long[] getExperimentIds();
    method @IntRange(from=0xffffffff) public long getLocalBytesRead();
    method @IntRange(from=0xffffffff) public long getMediaDurationMillis();
    method @IntRange(from=0xffffffff) public long getNetworkBytesRead();
    method @IntRange(from=0xffffffff) public long getNetworkTransferDurationMillis();
    method public int getPlaybackType();
    method @Nullable public String getPlayerName();
    method @Nullable public String getPlayerVersion();
    method public int getStreamSource();
    method public int getStreamType();
    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 @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
    field public static final int DRM_TYPE_OTHER = 1; // 0x1
    field public static final int DRM_TYPE_PLAY_READY = 2; // 0x2
    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 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
    field public static final int STREAM_SOURCE_UNKNOWN = 0; // 0x0
    field public static final int STREAM_TYPE_DASH = 3; // 0x3
    field public static final int STREAM_TYPE_HLS = 4; // 0x4
    field public static final int STREAM_TYPE_OTHER = 1; // 0x1
    field public static final int STREAM_TYPE_PROGRESSIVE = 2; // 0x2
    field public static final int STREAM_TYPE_SS = 5; // 0x5
    field public static final int STREAM_TYPE_UNKNOWN = 0; // 0x0
  }
  public static final class PlaybackMetrics.Builder {
    ctor public PlaybackMetrics.Builder();
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder addExperimentId(long);
    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 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 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);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerName(@NonNull String);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerVersion(@NonNull String);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamSource(int);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamType(int);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesDropped(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesPlayed(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
  }
  public final class PlaybackSession implements java.lang.AutoCloseable {
    method public void close();
    method @NonNull public String getId();
    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);
    method public void reportPlaybackStateEvent(@NonNull android.media.metrics.PlaybackStateEvent);
    method public void reportTrackChangeEvent(@NonNull android.media.metrics.TrackChangeEvent);
  }
+0 −14
Original line number Diff line number Diff line
@@ -1232,11 +1232,6 @@ package android.media {
    method public void forceResourceLost();
  }

  public final class MediaCodec implements android.media.metrics.PlaybackComponent {
    method public String getPlaybackId();
    method public void setPlaybackId(@NonNull String);
  }

  public static final class MediaCodecInfo.VideoCapabilities.PerformancePoint {
    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(int, int, int, int, @NonNull android.util.Size);
    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(@NonNull android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint, @NonNull android.util.Size);
@@ -1311,15 +1306,6 @@ package android.media.audiopolicy {

}

package android.media.metrics {

  public interface PlaybackComponent {
    method @NonNull public String getPlaybackId();
    method public void setPlaybackId(@NonNull String);
  }

}

package android.media.tv {

  public final class TvInputManager {
+0 −3
Original line number Diff line number Diff line
@@ -17,13 +17,10 @@
package android.media.metrics;

import android.annotation.NonNull;
import android.annotation.TestApi;

/**
 * Interface for playback related components used by playback metrics.
 * @hide
 */
@TestApi
public interface PlaybackComponent {

    /**
+75 −26
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media.metrics;

import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
@@ -33,35 +34,57 @@ import java.util.Objects;

/**
 * This class is used to store playback data.
 * @hide
 */
public final class PlaybackMetrics implements Parcelable {
    // TODO(b/177209128): JavaDoc for the constants.
    /** Unknown stream source. */
    public static final int STREAM_SOURCE_UNKNOWN = 0;
    /** Stream from network. */
    public static final int STREAM_SOURCE_NETWORK = 1;
    /** Stream from device. */
    public static final int STREAM_SOURCE_DEVICE = 2;
    /** Stream from more than one sources. */
    public static final int STREAM_SOURCE_MIXED = 3;

    /** Unknown stream type. */
    public static final int STREAM_TYPE_UNKNOWN = 0;
    /** Other stream type. */
    public static final int STREAM_TYPE_OTHER = 1;
    /** Progressive stream type. */
    public static final int STREAM_TYPE_PROGRESSIVE = 2;
    /** DASH (Dynamic Adaptive Streaming over HTTP) stream type. */
    public static final int STREAM_TYPE_DASH = 3;
    /** HLS (HTTP Live Streaming) stream type. */
    public static final int STREAM_TYPE_HLS = 4;
    /** SS (HTTP Smooth Streaming) stream type. */
    public static final int STREAM_TYPE_SS = 5;

    /** VOD (Video on Demand) playback type. */
    public static final int PLAYBACK_TYPE_VOD = 0;
    /** Live playback type. */
    public static final int PLAYBACK_TYPE_LIVE = 1;
    /** Other playback type. */
    public static final int PLAYBACK_TYPE_OTHER = 2;

    /** DRM is not used. */
    public static final int DRM_TYPE_NONE = 0;
    /** Other DRM type. */
    public static final int DRM_TYPE_OTHER = 1;
    /** Play ready DRM type. */
    public static final int DRM_TYPE_PLAY_READY = 2;
    /** Widevine L1 DRM type. */
    public static final int DRM_TYPE_WIDEVINE_L1 = 3;
    /** Widevine L3 DRM type. */
    public static final int DRM_TYPE_WIDEVINE_L3 = 4;
    // TODO: add DRM_TYPE_CLEARKEY
    /** Widevine L3 fallback DRM type. */
    public static final int DRM_TYPE_WV_L3_FALLBACK = 5;
    /** Clear key DRM type. */
    public static final int DRM_TYPE_CLEARKEY = 6;

    /** Main contents. */
    public static final int CONTENT_TYPE_MAIN = 0;
    /** Advertisement contents. */
    public static final int CONTENT_TYPE_AD = 1;
    /** Other contents. */
    public static final int CONTENT_TYPE_OTHER = 2;


@@ -102,7 +125,9 @@ public final class PlaybackMetrics implements Parcelable {
        DRM_TYPE_OTHER,
        DRM_TYPE_PLAY_READY,
        DRM_TYPE_WIDEVINE_L1,
        DRM_TYPE_WIDEVINE_L3
        DRM_TYPE_WIDEVINE_L3,
        DRM_TYPE_WV_L3_FALLBACK,
        DRM_TYPE_CLEARKEY
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface DrmType {}
@@ -173,6 +198,11 @@ public final class PlaybackMetrics implements Parcelable {
        this.mNetworkTransferDurationMillis = networkTransferDurationMillis;
    }

    /**
     * Gets the media duration in milliseconds.
     * @return the media duration in milliseconds, or -1 if unknown.
     */
    @IntRange(from = -1)
    public long getMediaDurationMillis() {
        return mMediaDurationMillis;
    }
@@ -241,28 +271,36 @@ public final class PlaybackMetrics implements Parcelable {

    /**
     * Gets video frames played.
     * @return the video frames played, or -1 if unknown.
     */
    @IntRange(from = -1, to = Integer.MAX_VALUE)
    public int getVideoFramesPlayed() {
        return mVideoFramesPlayed;
    }

    /**
     * Gets video frames dropped.
     * @return the video frames dropped, or -1 if unknown.
     */
    @IntRange(from = -1, to = Integer.MAX_VALUE)
    public int getVideoFramesDropped() {
        return mVideoFramesDropped;
    }

    /**
     * Gets audio underrun count.
     * @return the audio underrun count, or -1 if unknown.
     */
    @IntRange(from = -1, to = Integer.MAX_VALUE)
    public int getAudioUnderrunCount() {
        return mAudioUnderrunCount;
    }

    /**
     * Gets number of network bytes read.
     * @return the number of network bytes read, or -1 if unknown.
     */
    @IntRange(from = -1)
    public long getNetworkBytesRead() {
        return mNetworkBytesRead;
    }
@@ -270,6 +308,7 @@ public final class PlaybackMetrics implements Parcelable {
    /**
     * Gets number of local bytes read.
     */
    @IntRange(from = -1)
    public long getLocalBytesRead() {
        return mLocalBytesRead;
    }
@@ -277,6 +316,7 @@ public final class PlaybackMetrics implements Parcelable {
    /**
     * Gets network transfer duration in milliseconds.
     */
    @IntRange(from = -1)
    public long getNetworkTransferDurationMillis() {
        return mNetworkTransferDurationMillis;
    }
@@ -415,34 +455,33 @@ public final class PlaybackMetrics implements Parcelable {
     */
    public static final class Builder {

        private long mMediaDurationMillis;
        private int mStreamSource;
        private int mStreamType;
        private int mPlaybackType;
        private int mDrmType;
        private int mContentType;
        private long mMediaDurationMillis = -1;
        private int mStreamSource = STREAM_SOURCE_UNKNOWN;
        private int mStreamType = STREAM_TYPE_UNKNOWN;
        private int mPlaybackType = PLAYBACK_TYPE_OTHER;
        private int mDrmType = DRM_TYPE_NONE;
        private int mContentType = CONTENT_TYPE_OTHER;
        private @Nullable String mPlayerName;
        private @Nullable String mPlayerVersion;
        private @NonNull List<Long> mExperimentIds = new ArrayList<>();
        private int mVideoFramesPlayed;
        private int mVideoFramesDropped;
        private int mAudioUnderrunCount;
        private long mNetworkBytesRead;
        private long mLocalBytesRead;
        private long mNetworkTransferDurationMillis;
        private int mVideoFramesPlayed = -1;
        private int mVideoFramesDropped = -1;
        private int mAudioUnderrunCount = -1;
        private long mNetworkBytesRead = -1;
        private long mLocalBytesRead = -1;
        private long mNetworkTransferDurationMillis = -1;

        /**
         * Creates a new Builder.
         *
         * @hide
         */
        public Builder() {
        }

        /**
         * Sets the media duration in milliseconds.
         * @param value the media duration in milliseconds. -1 indicates the value is unknown.
         */
        public @NonNull Builder setMediaDurationMillis(long value) {
        public @NonNull Builder setMediaDurationMillis(@IntRange(from = -1) long value) {
            mMediaDurationMillis = value;
            return this;
        }
@@ -474,7 +513,7 @@ public final class PlaybackMetrics implements Parcelable {
        /**
         * Sets the DRM type.
         */
        public @NonNull Builder setDrmType(@StreamType int value) {
        public @NonNull Builder setDrmType(@DrmType int value) {
            mDrmType = value;
            return this;
        }
@@ -513,48 +552,58 @@ public final class PlaybackMetrics implements Parcelable {

        /**
         * Sets the video frames played.
         * @param value the video frames played. -1 indicates the value is unknown.
         */
        public @NonNull Builder setVideoFramesPlayed(int value) {
        public @NonNull Builder setVideoFramesPlayed(
                @IntRange(from = -1, to = Integer.MAX_VALUE) int value) {
            mVideoFramesPlayed = value;
            return this;
        }

        /**
         * Sets the video frames dropped.
         * @param value the video frames dropped. -1 indicates the value is unknown.
         */
        public @NonNull Builder setVideoFramesDropped(int value) {
        public @NonNull Builder setVideoFramesDropped(
                @IntRange(from = -1, to = Integer.MAX_VALUE) int value) {
            mVideoFramesDropped = value;
            return this;
        }

        /**
         * Sets the audio underrun count.
         * @param value the audio underrun count. -1 indicates the value is unknown.
         */
        public @NonNull Builder setAudioUnderrunCount(int value) {
        public @NonNull Builder setAudioUnderrunCount(
                @IntRange(from = -1, to = Integer.MAX_VALUE) int value) {
            mAudioUnderrunCount = value;
            return this;
        }

        /**
         * Sets the number of network bytes read.
         * @param value the number of network bytes read. -1 indicates the value is unknown.
         */
        public @NonNull Builder setNetworkBytesRead(long value) {
        public @NonNull Builder setNetworkBytesRead(@IntRange(from = -1) long value) {
            mNetworkBytesRead = value;
            return this;
        }

        /**
         * Sets the number of local bytes read.
         * @param value the number of local bytes read. -1 indicates the value is unknown.
         */
        public @NonNull Builder setLocalBytesRead(long value) {
        public @NonNull Builder setLocalBytesRead(@IntRange(from = -1) long value) {
            mLocalBytesRead = value;
            return this;
        }

        /**
         * Sets the network transfer duration in milliseconds.
         * @param value the network transfer duration in milliseconds.
         *              -1 indicates the value is unknown.
         */
        public @NonNull Builder setNetworkTransferDurationMillis(long value) {
        public @NonNull Builder setNetworkTransferDurationMillis(@IntRange(from = -1) long value) {
            mNetworkTransferDurationMillis = value;
            return this;
        }
+0 −1
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ public final class PlaybackSession implements AutoCloseable {

    /**
     * Reports playback metrics.
     * @hide
     */
    public void reportPlaybackMetrics(@NonNull PlaybackMetrics metrics) {
        mManager.reportPlaybackMetrics(mId, metrics);