From 61a5ca480edbe014e385a75a09eec4c4e571c39c Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 7 Apr 2021 17:03:17 +0100 Subject: [PATCH] Reduce the diff between different versions of GTS tests This means there are fewer changes required when exporting these tests as part of the GTS suite run by device manufacturers. PiperOrigin-RevId: 367230977 --- .../playbacktests/gts/DashTestData.java | 7 ++-- .../playbacktests/gts/DashTestRunner.java | 33 +++++++++++++------ .../gts/EnumerateDecodersTest.java | 7 +++- .../gts/LogcatMetricsLogger.java | 3 ++ .../playbacktests/gts/MetricsLogger.java | 26 +++++---------- 5 files changed, 45 insertions(+), 31 deletions(-) diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestData.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestData.java index c148010fdb..4d888867f2 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestData.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestData.java @@ -20,8 +20,7 @@ import com.google.android.exoplayer2.util.Util; /** Test data for DASH tests. */ /* package */ final class DashTestData { - private static final String BASE_URL = - "https://storage.googleapis.com/exoplayer-test-media-1/gen-4/"; + private static final String BASE_URL = getBaseUrl(); private static final String BASE_URL_SCREENS = BASE_URL + "screens/dash-vod-single-segment/"; private static final String BASE_URL_COMMON_ENCRYPTION = BASE_URL + "common-encryption/"; @@ -161,6 +160,10 @@ import com.google.android.exoplayer2.util.Util; } } + private static String getBaseUrl() { + return "https://storage.googleapis.com/exoplayer-test-media-1/gen-4/"; + } + private DashTestData() { } diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java index da072cf193..e43b2edb03 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java @@ -23,6 +23,7 @@ import android.view.Surface; import android.widget.FrameLayout; import androidx.annotation.RequiresApi; import androidx.test.core.app.ApplicationProvider; +import androidx.test.platform.app.InstrumentationRegistry; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.MediaItem; @@ -186,7 +187,9 @@ import java.util.List; private DashHostedTest createDashHostedTest( boolean canIncludeAdditionalVideoFormats, boolean isCddLimitedRetry) { - MetricsLogger metricsLogger = MetricsLogger.Factory.createDefault(tag); + MetricsLogger metricsLogger = + MetricsLogger.DEFAULT_FACTORY.create( + InstrumentationRegistry.getInstrumentation(), tag, streamName); return new DashHostedTest(tag, streamName, manifestUrl, metricsLogger, fullPlaybackNoSeeking, audioFormat, canIncludeAdditionalVideoFormats, isCddLimitedRetry, actionSchedule, offlineLicenseKeySetId, widevineLicenseUrl, useL1Widevine, dataSourceFactory, @@ -344,15 +347,20 @@ import java.util.List; videoCounters.inputBufferCount - 1, videoCounters.inputBufferCount); } try { - int droppedFrameLimit = (int) Math.ceil(MAX_DROPPED_VIDEO_FRAME_FRACTION - * DecoderCountersUtil.getTotalBufferCount(videoCounters)); - // Assert that performance is acceptable. - // Assert that total dropped frames were within limit. - DecoderCountersUtil.assertDroppedBufferLimit(tag + VIDEO_TAG_SUFFIX, videoCounters, - droppedFrameLimit); - // Assert that consecutive dropped frames were within limit. - DecoderCountersUtil.assertConsecutiveDroppedBufferLimit(tag + VIDEO_TAG_SUFFIX, - videoCounters, MAX_CONSECUTIVE_DROPPED_VIDEO_FRAMES); + if (!shouldSkipDroppedOutputBufferPerformanceAssertions()) { + int droppedFrameLimit = + (int) + Math.ceil( + MAX_DROPPED_VIDEO_FRAME_FRACTION + * DecoderCountersUtil.getTotalBufferCount(videoCounters)); + // Assert that performance is acceptable. + // Assert that total dropped frames were within limit. + DecoderCountersUtil.assertDroppedBufferLimit( + tag + VIDEO_TAG_SUFFIX, videoCounters, droppedFrameLimit); + // Assert that consecutive dropped frames were within limit. + DecoderCountersUtil.assertConsecutiveDroppedBufferLimit( + tag + VIDEO_TAG_SUFFIX, videoCounters, MAX_CONSECUTIVE_DROPPED_VIDEO_FRAMES); + } } catch (AssertionError e) { if (trackSelector.includedAdditionalVideoFormats) { // Retry limiting to CDD mandated formats (b/28220076). @@ -365,6 +373,11 @@ import java.util.List; } } + /** Provides a hook to skip dropped output buffer assertions in specific circumstances. */ + private static boolean shouldSkipDroppedOutputBufferPerformanceAssertions() { + return false; + } + private static final class DashTestTrackSelector extends DefaultTrackSelector { private final String tag; diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/EnumerateDecodersTest.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/EnumerateDecodersTest.java index a29b056edb..67a6a93357 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/EnumerateDecodersTest.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/EnumerateDecodersTest.java @@ -22,6 +22,7 @@ import android.media.MediaCodecInfo.CodecProfileLevel; import android.media.MediaCodecInfo.VideoCapabilities; import androidx.annotation.Nullable; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; @@ -43,7 +44,11 @@ public class EnumerateDecodersTest { @Before public void setUp() { - metricsLogger = MetricsLogger.Factory.createDefault(TAG); + metricsLogger = + MetricsLogger.DEFAULT_FACTORY.create( + InstrumentationRegistry.getInstrumentation(), + TAG, + /* streamName= */ "enumerate-decoders"); } @Test diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/LogcatMetricsLogger.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/LogcatMetricsLogger.java index 94a07b9aaf..ad24c61062 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/LogcatMetricsLogger.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/LogcatMetricsLogger.java @@ -20,6 +20,9 @@ import com.google.android.exoplayer2.util.Log; /** Implementation of {@link MetricsLogger} that prints the metrics to logcat. */ /* package */ final class LogcatMetricsLogger implements MetricsLogger { + public static final Factory FACTORY = + (instrumentation, tag, streamName) -> new LogcatMetricsLogger(tag); + private final String tag; public LogcatMetricsLogger(String tag) { diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/MetricsLogger.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/MetricsLogger.java index 1aeb73a29d..d4bf0a0b83 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/MetricsLogger.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/MetricsLogger.java @@ -15,9 +15,17 @@ */ package com.google.android.exoplayer2.playbacktests.gts; +import android.app.Instrumentation; + /** Metric logging interface for playback tests. */ /* package */ interface MetricsLogger { + interface Factory { + MetricsLogger create(Instrumentation instrumentation, String tag, String streamName); + } + + Factory DEFAULT_FACTORY = LogcatMetricsLogger.FACTORY; + String KEY_FRAMES_DROPPED_COUNT = "frames_dropped_count"; String KEY_FRAMES_RENDERED_COUNT = "frames_rendered_count"; String KEY_FRAMES_SKIPPED_COUNT = "frames_skipped_count"; @@ -53,22 +61,4 @@ package com.google.android.exoplayer2.playbacktests.gts; * Closes the logger. */ void close(); - - /** - * A factory for instantiating {@link MetricsLogger} instances. - */ - final class Factory { - - private Factory() {} - - /** - * Obtains a new instance of {@link MetricsLogger}. - * - * @param tag The tag to be used for logcat logs. - */ - public static MetricsLogger createDefault(String tag) { - return new LogcatMetricsLogger(tag); - } - } - }