summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2022-06-16 22:25:28 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-06-16 22:25:28 +0000
commit5cd9c40d3099e0509d07ddbbe364a158d76b6227 (patch)
tree8f75cbf9edc140110b1058baf7b2f5cc98e754d0
parent414f160580cd798972ab7db86a461be2bff52d3b (diff)
parentc93cd56817eefb7e52eaa5ff9253f0aca76f6d51 (diff)
downloadcts-5cd9c40d3099e0509d07ddbbe364a158d76b6227.tar.gz
Merge "mediapc: add precondition for secure decode tests" into tm-dev
-rw-r--r--tests/mediapc/AndroidManifest.xml1
-rw-r--r--tests/mediapc/src/android/mediapc/cts/MultiCodecPerfTestBase.java53
-rw-r--r--tests/mediapc/src/android/mediapc/cts/MultiDecoderPairPerfTest.java33
-rw-r--r--tests/mediapc/src/android/mediapc/cts/MultiDecoderPerfTest.java26
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++) {