Setting up hardware tests to use PerformanceClassEvaluator
Test: atest
Change-Id: I0f1cc94868a5d47e3e582761b22f7d85acb0bdb8
diff --git a/tests/mediapc/common/src/android/mediapc/cts/common/PerformanceClassEvaluator.java b/tests/mediapc/common/src/android/mediapc/cts/common/PerformanceClassEvaluator.java
index f4b6d8b..ac1905c 100644
--- a/tests/mediapc/common/src/android/mediapc/cts/common/PerformanceClassEvaluator.java
+++ b/tests/mediapc/common/src/android/mediapc/cts/common/PerformanceClassEvaluator.java
@@ -50,6 +50,151 @@
this.mRequirements = new HashSet<Requirement>();
}
+ // used for requirements [7.1.1.1/H-1-1], [7.1.1.1/H-2-1]
+ public static class ResolutionRequirement extends Requirement {
+ private static final String TAG = ResolutionRequirement.class.getSimpleName();
+
+ private ResolutionRequirement(String id, RequiredMeasurement<?> ... reqs) {
+ super(id, reqs);
+ }
+
+ public void setLongResolution(int longResolution) {
+ this.<Integer>setMeasuredValue(RequirementConstants.LONG_RESOLUTION, longResolution);
+ }
+
+ public void setShortResolution(int shortResolution) {
+ this.<Integer>setMeasuredValue(RequirementConstants.SHORT_RESOLUTION, shortResolution);
+ }
+
+ /**
+ * [7.1.1.1/H-1-1] MUST have screen resolution of at least 1080p.
+ */
+ public static ResolutionRequirement createR7_1_1_1__H_1_1() {
+ RequiredMeasurement<Integer> long_resolution = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.LONG_RESOLUTION)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.R, 1920)
+ .build();
+ RequiredMeasurement<Integer> short_resolution = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.SHORT_RESOLUTION)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.R, 1080)
+ .build();
+
+ return new ResolutionRequirement(RequirementConstants.R7_1_1_1__H_1_1, long_resolution,
+ short_resolution);
+ }
+
+ /**
+ * [7.1.1.1/H-2-1] MUST have screen resolution of at least 1080p.
+ */
+ public static ResolutionRequirement createR7_1_1_1__H_2_1() {
+ RequiredMeasurement<Integer> long_resolution = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.LONG_RESOLUTION)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.S, 1920)
+ .build();
+ RequiredMeasurement<Integer> short_resolution = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.SHORT_RESOLUTION)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.S, 1080)
+ .build();
+
+ return new ResolutionRequirement(RequirementConstants.R7_1_1_1__H_2_1, long_resolution,
+ short_resolution);
+ }
+ }
+
+ // used for requirements [7.1.1.3/H-1-1], [7.1.1.3/H-2-1]
+ public static class DensityRequirement extends Requirement {
+ private static final String TAG = DensityRequirement.class.getSimpleName();
+
+ private DensityRequirement(String id, RequiredMeasurement<?> ... reqs) {
+ super(id, reqs);
+ }
+
+ public void setDisplayDensity(int displayDensity) {
+ this.<Integer>setMeasuredValue(RequirementConstants.DISPLAY_DENSITY, displayDensity);
+ }
+
+ /**
+ * [7.1.1.3/H-1-1] MUST have screen density of at least 400 dpi.
+ */
+ public static DensityRequirement createR7_1_1_3__H_1_1() {
+ RequiredMeasurement<Integer> display_density = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.DISPLAY_DENSITY)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.R, 400)
+ .build();
+
+ return new DensityRequirement(RequirementConstants.R7_1_1_3__H_1_1, display_density);
+ }
+
+ /**
+ * [7.1.1.3/H-2-1] MUST have screen density of at least 400 dpi.
+ */
+ public static DensityRequirement createR7_1_1_3__H_2_1() {
+ RequiredMeasurement<Integer> display_density = RequiredMeasurement
+ .<Integer>builder()
+ .setId(RequirementConstants.DISPLAY_DENSITY)
+ .setPredicate(RequirementConstants.INTEGER_GTE)
+ .addRequiredValue(Build.VERSION_CODES.S, 400)
+ .build();
+
+ return new DensityRequirement(RequirementConstants.R7_1_1_3__H_2_1, display_density);
+ }
+ }
+
+ // used for requirements [7.6.1/H-1-1], [7.6.1/H-2-1], [7.6.1/H-3-1]
+ public static class MemoryRequirement extends Requirement {
+ private static final String TAG = MemoryRequirement.class.getSimpleName();
+
+ private MemoryRequirement(String id, RequiredMeasurement<?> ... reqs) {
+ super(id, reqs);
+ }
+
+ public void setPhysicalMemory(long physicalMemory) {
+ this.<Long>setMeasuredValue(RequirementConstants.PHYSICAL_MEMORY, physicalMemory);
+ }
+
+ /**
+ * [7.6.1/H-1-1] MUST have at least 6 GB of physical memory.
+ */
+ public static MemoryRequirement createR7_6_1__H_1_1() {
+ RequiredMeasurement<Long> physical_memory = RequiredMeasurement
+ .<Long>builder()
+ .setId(RequirementConstants.PHYSICAL_MEMORY)
+ .setPredicate(RequirementConstants.LONG_GTE)
+ // Media performance requires 6 GB minimum RAM, but keeping the following to 5 GB
+ // as activityManager.getMemoryInfo() returns around 5.4 GB on a 6 GB device.
+ .addRequiredValue(Build.VERSION_CODES.R, 5L * 1024L)
+ .build();
+
+ return new MemoryRequirement(RequirementConstants.R7_6_1__H_1_1, physical_memory);
+ }
+
+ /**
+ * [7.6.1/H-2-1] MUST have at least 6 GB of physical memory.
+ */
+ public static MemoryRequirement createR7_6_1__H_2_1() {
+ RequiredMeasurement<Long> physical_memory = RequiredMeasurement
+ .<Long>builder()
+ .setId(RequirementConstants.PHYSICAL_MEMORY)
+ .setPredicate(RequirementConstants.LONG_GTE)
+ // Media performance requires 6 GB minimum RAM, but keeping the following to 5 GB
+ // as activityManager.getMemoryInfo() returns around 5.4 GB on a 6 GB device.
+ .addRequiredValue(Build.VERSION_CODES.S, 5L * 1024L)
+ .build();
+
+ return new MemoryRequirement(RequirementConstants.R7_6_1__H_2_1, physical_memory);
+ }
+ }
+
private <R extends Requirement> R addRequirement(R req) {
if (!this.mRequirements.add(req)) {
throw new IllegalStateException("Requirement " + req.id() + " already added");
@@ -57,6 +202,32 @@
return req;
}
+ public ResolutionRequirement addR7_1_1_1__H_1_1() {
+ return this.<ResolutionRequirement>addRequirement(
+ ResolutionRequirement.createR7_1_1_1__H_1_1());
+ }
+
+ public DensityRequirement addR7_1_1_3__H_1_1() {
+ return this.<DensityRequirement>addRequirement(DensityRequirement.createR7_1_1_3__H_1_1());
+ }
+
+ public MemoryRequirement addR7_6_1__H_1_1() {
+ return this.<MemoryRequirement>addRequirement(MemoryRequirement.createR7_6_1__H_1_1());
+ }
+
+ public ResolutionRequirement addR7_1_1_1__H_2_1() {
+ return this.<ResolutionRequirement>addRequirement(
+ ResolutionRequirement.createR7_1_1_1__H_2_1());
+ }
+
+ public DensityRequirement addR7_1_1_3__H_2_1() {
+ return this.<DensityRequirement>addRequirement(DensityRequirement.createR7_1_1_3__H_2_1());
+ }
+
+ public MemoryRequirement addR7_6_1__H_2_1() {
+ return this.<MemoryRequirement>addRequirement(MemoryRequirement.createR7_6_1__H_2_1());
+ }
+
public void submitAndCheck() {
boolean perfClassMet = true;
for (Requirement req: this.mRequirements) {
diff --git a/tests/mediapc/src/android/mediapc/cts/PerformanceClassTest.java b/tests/mediapc/src/android/mediapc/cts/PerformanceClassTest.java
index 54791bf..b84955c 100644
--- a/tests/mediapc/src/android/mediapc/cts/PerformanceClassTest.java
+++ b/tests/mediapc/src/android/mediapc/cts/PerformanceClassTest.java
@@ -21,6 +21,8 @@
import static android.mediapc.cts.common.Utils.MIN_MEMORY_PERF_CLASS_T_MB;
import static android.util.DisplayMetrics.DENSITY_400;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertTrue;
import android.app.ActivityManager;
@@ -31,6 +33,7 @@
import android.media.MediaDrm;
import android.media.MediaFormat;
import android.media.UnsupportedSchemeException;
+import android.mediapc.cts.common.PerformanceClassEvaluator;
import android.mediapc.cts.common.Utils;
import android.os.Build;
import android.util.DisplayMetrics;
@@ -46,7 +49,9 @@
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 java.io.IOException;
import java.util.ArrayList;
@@ -60,6 +65,9 @@
private static final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL);
static ArrayList<String> mMimeSecureSupport = new ArrayList<>();
+ @Rule
+ public final TestName mTestName = new TestName();
+
static {
mMimeSecureSupport.add(MediaFormat.MIMETYPE_VIDEO_AVC);
mMimeSecureSupport.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
@@ -186,7 +194,14 @@
}
@Test
- @CddTest(requirement="2.2.7.3/7.1.1.1,7.1.1.3,7.6.1/H-1-1,H-2-1")
+ @CddTest(requirements={
+ "2.2.7.3/7.1.1.1/H-1-1",
+ "2.2.7.3/7.1.1.1/H-2-1",
+ "2.2.7.3/7.1.1.3/H-1-1",
+ "2.2.7.3/7.1.1.3/H-2-1",
+ "2.2.7.3/7.6.1/H-1-1",
+ "2.2.7.3/7.6.1/H-2-1",
+ "2.2.7.3/7.6.1/H-3-1"})
public void testMinimumMemory() {
Context context = InstrumentationRegistry.getInstrumentation().getContext();
@@ -210,23 +225,21 @@
Log.i(TAG, String.format("minDpi=%d minSize=%dx%dpix", minDpi, minLong, minShort));
Log.i(TAG, String.format("dpi=%d size=%dx%dpix", density, longPix, shortPix));
- if (Utils.isPerfClass()) {
- assertTrue("Display density " + density + " must be at least " + minDpi + "dpi",
- density >= minDpi);
- assertTrue("Display resolution " + longPix + "x" + shortPix + "pix must be at least " +
- minLong + "x" + minShort + "pix",
- longPix >= minLong && shortPix >= minShort);
- } else {
- int pc = density >= minDpi && longPix >= minLong && shortPix >= minShort
- ? Build.VERSION_CODES.S : 0;
- DeviceReportLog log = new DeviceReportLog("MediaPerformanceClassLogs", "Display");
- log.addValue("DisplayDensity", density, ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.addValue("ResolutionLong", longPix, ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.addValue("ResolutionShort", shortPix, ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.setSummary("CDD 2.2.7.3/7.1.1.1,7.1.1.3/H-1-1,H-2-1 performance_class", pc,
- ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.submit(InstrumentationRegistry.getInstrumentation());
- }
+ PerformanceClassEvaluator pce = new PerformanceClassEvaluator(this.mTestName);
+ PerformanceClassEvaluator.ResolutionRequirement r7_1_1_1__h_1_1 = pce.addR7_1_1_1__H_1_1();
+ PerformanceClassEvaluator.DensityRequirement r7_1_1_3__h_1_1 = pce.addR7_1_1_3__H_1_1();
+ PerformanceClassEvaluator.ResolutionRequirement r7_1_1_1__h_2_1 = pce.addR7_1_1_1__H_2_1();
+ PerformanceClassEvaluator.DensityRequirement r7_1_1_3__h_2_1 = pce.addR7_1_1_3__H_2_1();
+
+ r7_1_1_1__h_1_1.setLongResolution(longPix);
+ r7_1_1_1__h_2_1.setLongResolution(longPix);
+ r7_1_1_1__h_1_1.setShortResolution(shortPix);
+ r7_1_1_1__h_2_1.setShortResolution(shortPix);
+
+ r7_1_1_3__h_1_1.setDisplayDensity(density);
+ r7_1_1_3__h_2_1.setDisplayDensity(density);
+
+ pce.submitAndCheck();
}
/** Asserts that the given values conform to the specs in CDD 7.6.1 */
@@ -235,24 +248,15 @@
long totalMemoryMb = getTotalMemory(activityManager) / 1024 / 1024;
Log.i(TAG, String.format("Total device memory = %,d MB", totalMemoryMb));
- if (Utils.isPerfClass()) {
- long minMb = Utils.isTPerfClass() ? MIN_MEMORY_PERF_CLASS_T_MB :
- Utils.MIN_MEMORY_PERF_CLASS_CANDIDATE_MB;
- Log.i(TAG, String.format("Minimum required memory = %,d MB", minMb));
- assertTrue(String.format("Does not meet minimum memory requirements (CDD 7.6.1)."
- + "Found = %d, Minimum = %d", totalMemoryMb, minMb), totalMemoryMb >= minMb);
- } else {
- int pc = 0;
- if (totalMemoryMb >= MIN_MEMORY_PERF_CLASS_T_MB)
- pc = Build.VERSION_CODES.TIRAMISU;
- else if (totalMemoryMb >= MIN_MEMORY_PERF_CLASS_CANDIDATE_MB)
- pc = Build.VERSION_CODES.S;
- DeviceReportLog log = new DeviceReportLog("MediaPerformanceClassLogs", "MinMemory");
- log.addValue("MemoryMB", totalMemoryMb, ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.setSummary("CDD 2.2.7.3/7.6.1/H-1-1,H-2-1 performance_class", pc,
- ResultType.HIGHER_BETTER, ResultUnit.NONE);
- log.submit(InstrumentationRegistry.getInstrumentation());
- }
+
+ PerformanceClassEvaluator pce = new PerformanceClassEvaluator(this.mTestName);
+ PerformanceClassEvaluator.MemoryRequirement r7_6_1_h_1_1 = pce.addR7_6_1__H_1_1();
+ PerformanceClassEvaluator.MemoryRequirement r7_6_1_h_2_1 = pce.addR7_6_1__H_2_1();
+
+ r7_6_1_h_1_1.setPhysicalMemory(totalMemoryMb);
+ r7_6_1_h_2_1.setPhysicalMemory(totalMemoryMb);
+
+ pce.submitAndCheck();
}
/**