diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-06-16 22:25:28 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-06-16 22:25:28 +0000 |
commit | 5cd9c40d3099e0509d07ddbbe364a158d76b6227 (patch) | |
tree | 8f75cbf9edc140110b1058baf7b2f5cc98e754d0 | |
parent | 414f160580cd798972ab7db86a461be2bff52d3b (diff) | |
parent | c93cd56817eefb7e52eaa5ff9253f0aca76f6d51 (diff) | |
download | cts-5cd9c40d3099e0509d07ddbbe364a158d76b6227.tar.gz |
Merge "mediapc: add precondition for secure decode tests" into tm-dev
4 files changed, 73 insertions, 40 deletions
diff --git a/tests/mediapc/AndroidManifest.xml b/tests/mediapc/AndroidManifest.xml index 15a716ad00e..bbb193448bc 100644 --- a/tests/mediapc/AndroidManifest.xml +++ b/tests/mediapc/AndroidManifest.xml @@ -23,6 +23,7 @@ <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <application diff --git a/tests/mediapc/src/android/mediapc/cts/MultiCodecPerfTestBase.java b/tests/mediapc/src/android/mediapc/cts/MultiCodecPerfTestBase.java index ca7a17a1484..37f0106e8c6 100644 --- a/tests/mediapc/src/android/mediapc/cts/MultiCodecPerfTestBase.java +++ b/tests/mediapc/src/android/mediapc/cts/MultiCodecPerfTestBase.java @@ -17,26 +17,34 @@ package android.mediapc.cts; import static android.media.MediaCodecInfo.CodecCapabilities.FEATURE_SecurePlayback; +import static android.mediapc.cts.CodecDecoderTestBase.WIDEVINE_UUID; import static android.mediapc.cts.CodecTestBase.selectHardwareCodecs; import static org.junit.Assert.assertTrue; +import android.content.Context; import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint; +import android.media.MediaDrm; import android.media.MediaFormat; +import android.media.UnsupportedSchemeException; import android.mediapc.cts.common.Utils; +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.Network; import android.os.Build; import android.util.Log; import android.util.Pair; - -import org.junit.Before; - import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.Assume; +import org.junit.Before; public class MultiCodecPerfTestBase { private static final String LOG_TAG = MultiCodecPerfTestBase.class.getSimpleName(); @@ -186,4 +194,43 @@ public class MultiCodecPerfTestBase { codec.release(); return isSecureSupported; } + + boolean isWidevineSupported() { + return MediaDrm.isCryptoSchemeSupported(WIDEVINE_UUID); + } + + boolean isWidevineL1Supported() throws UnsupportedSchemeException { + boolean isL1Supported = false; + if (isWidevineSupported()) { + MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID); + isL1Supported = mediaDrm.getPropertyString("securityLevel").equals("L1"); + mediaDrm.close(); + } + return isL1Supported; + } + + boolean isInternetAvailable() { + Context context = androidx.test.core.app.ApplicationProvider.getApplicationContext(); + ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); + NetworkCapabilities cap = cm.getNetworkCapabilities(cm.getActiveNetwork()); + if (cap == null) return false; + return cap.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + } + + boolean meetsSecureDecodePreconditions() throws UnsupportedSchemeException { + Assume.assumeTrue("Skipping secure decoder performance tests as Widevine is not supported", + isWidevineSupported()); + + if (Utils.isTPerfClass()) { + assertTrue("If Widevine is supported, L1 support is required for media performance " + + "class T devices", + isWidevineL1Supported()); + assertTrue("Test requires internet connection for validating secure decoder " + + "requirements for media performance class T devices", + isInternetAvailable()); + return true; + } + + return isWidevineL1Supported() && isInternetAvailable(); + } } diff --git a/tests/mediapc/src/android/mediapc/cts/MultiDecoderPairPerfTest.java b/tests/mediapc/src/android/mediapc/cts/MultiDecoderPairPerfTest.java index 0c69346825a..96388826abb 100644 --- a/tests/mediapc/src/android/mediapc/cts/MultiDecoderPairPerfTest.java +++ b/tests/mediapc/src/android/mediapc/cts/MultiDecoderPairPerfTest.java @@ -18,19 +18,14 @@ package android.mediapc.cts; import static org.junit.Assert.assertTrue; -import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.mediapc.cts.common.PerformanceClassEvaluator; import android.mediapc.cts.common.Utils; import android.util.Pair; import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; import com.android.compatibility.common.util.CddTest; -import com.android.compatibility.common.util.DeviceReportLog; -import com.android.compatibility.common.util.ResultType; -import com.android.compatibility.common.util.ResultUnit; import org.junit.Assume; import org.junit.Rule; @@ -143,7 +138,7 @@ public class MultiDecoderPairPerfTest extends MultiCodecPerfTestBase { testCodec(null, 1080, 1920, REQUIRED_MIN_CONCURRENT_SECURE_INSTANCES); } else if (onlyOneSecure) { testCodec(m1080pTestFiles, 1080, 1920, - REQUIRED_CONCURRENT_NON_SECURE_INSTANCES_WITH_SECURE + 1, true); + REQUIRED_CONCURRENT_NON_SECURE_INSTANCES_WITH_SECURE + 1); } else { testCodec(m1080pTestFiles, 1080, 1920, REQUIRED_MIN_CONCURRENT_INSTANCES); } @@ -151,21 +146,21 @@ public class MultiDecoderPairPerfTest extends MultiCodecPerfTestBase { private void testCodec(Map<String, String> testFiles, int height, int width, int requiredMinInstances) throws Exception { - testCodec(testFiles, height, width, requiredMinInstances, false); - } - - private void testCodec(Map<String, String> testFiles, int height, int width, - int requiredMinInstances, boolean secureWithUnsecure) throws Exception { mTestFiles = testFiles; ArrayList<Pair<String, String>> mimeDecoderPairs = new ArrayList<>(); mimeDecoderPairs.add(mFirstPair); mimeDecoderPairs.add(mSecondPair); - boolean bothSecure = true; + boolean isFirstSecure = isSecureSupportedCodec(mFirstPair.second, mFirstPair.first); + boolean isSecondSecure = isSecureSupportedCodec(mSecondPair.second, mSecondPair.first); + boolean secureWithUnsecure = isFirstSecure ^ isSecondSecure; + boolean bothSecure = isFirstSecure & isSecondSecure; int maxInstances = checkAndGetMaxSupportedInstancesForCodecCombinations(height, width, mimeDecoderPairs, requiredMinInstances); double achievedFrameRate = 0.0; + boolean meetsPreconditions = (isFirstSecure || isSecondSecure) ? + meetsSecureDecodePreconditions() : true; // secure test should not reach this point if secure codec doesn't support PP - if (maxInstances >= requiredMinInstances || secureWithUnsecure) { + if (meetsPreconditions && (maxInstances >= requiredMinInstances || secureWithUnsecure)) { int secondPairInstances = maxInstances / 2; int firstPairInstances = maxInstances - secondPairInstances; if (secureWithUnsecure) { @@ -176,8 +171,7 @@ public class MultiDecoderPairPerfTest extends MultiCodecPerfTestBase { } List<Decode> testList = new ArrayList<>(); for (int i = 0; i < firstPairInstances; i++) { - boolean isSecure = isSecureSupportedCodec(mFirstPair.second, mFirstPair.first); - bothSecure &= isSecure; + boolean isSecure = isFirstSecure; String testFile = isSecure ? m1080pWidevineTestFiles.get(mFirstPair.first) : mTestFiles.get(mFirstPair.first); Assume.assumeTrue("Add " + (isSecure ? "secure" : "") + " test vector for mime: " + @@ -186,14 +180,13 @@ public class MultiDecoderPairPerfTest extends MultiCodecPerfTestBase { isSecure)); } for (int i = 0; i < secondPairInstances; i++) { - boolean isSecure = isSecureSupportedCodec(mSecondPair.second, mSecondPair.first); - bothSecure &= isSecure; + boolean isSecure = isSecondSecure; String testFile = isSecure ? m1080pWidevineTestFiles.get(mSecondPair.first) : mTestFiles.get(mSecondPair.first); Assume.assumeTrue("Add " + (isSecure ? "secure" : "") + " test vector for mime: " + - mFirstPair.first, testFile != null); - testList.add(new Decode(mSecondPair.first, testFile, mSecondPair.second, mIsAsync, - isSecure)); + mSecondPair.first, testFile != null); + testList.add(new Decode(mSecondPair.first, testFile, mSecondPair.second, + mIsAsync, isSecure)); } ExecutorService pool = Executors.newFixedThreadPool(maxInstances); List<Future<Double>> resultList = pool.invokeAll(testList); diff --git a/tests/mediapc/src/android/mediapc/cts/MultiDecoderPerfTest.java b/tests/mediapc/src/android/mediapc/cts/MultiDecoderPerfTest.java index 13203cc77ce..f67684e1841 100644 --- a/tests/mediapc/src/android/mediapc/cts/MultiDecoderPerfTest.java +++ b/tests/mediapc/src/android/mediapc/cts/MultiDecoderPerfTest.java @@ -16,28 +16,12 @@ package android.mediapc.cts; -import static org.junit.Assert.assertTrue; - import android.media.MediaFormat; import android.mediapc.cts.common.PerformanceClassEvaluator; import android.mediapc.cts.common.Utils; import android.util.Pair; - import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; - import com.android.compatibility.common.util.CddTest; -import com.android.compatibility.common.util.DeviceReportLog; -import com.android.compatibility.common.util.ResultType; -import com.android.compatibility.common.util.ResultUnit; - -import org.junit.Assume; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TestName; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -45,6 +29,12 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import org.junit.Assume; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; /** * The following test class validates the maximum number of concurrent decode sessions that it can @@ -132,7 +122,9 @@ public class MultiDecoderPerfTest extends MultiCodecPerfTestBase { checkAndGetMaxSupportedInstancesForCodecCombinations(height, width, mimeDecoderPairs, requiredMinInstances); double achievedFrameRate = 0.0; - if (maxInstances >= requiredMinInstances) { + boolean meetsPreconditions = isSecure ? meetsSecureDecodePreconditions() : true; + + if (meetsPreconditions && maxInstances >= requiredMinInstances) { ExecutorService pool = Executors.newFixedThreadPool(maxInstances); List<Decode> testList = new ArrayList<>(); for (int i = 0; i < maxInstances; i++) { |