video: check performance only for the preferred ABI
Bug: 201627006
Test: atest android.video.cts.VideoEncoderDecoderTest
Change-Id: I43205ae9055dd13f3841f9c2b938f811fdf979d9
diff --git a/tests/video/src/android/video/cts/CodecInfo.java b/tests/video/src/android/video/cts/CodecInfo.java
index 4309a96..5b07326 100644
--- a/tests/video/src/android/video/cts/CodecInfo.java
+++ b/tests/video/src/android/video/cts/CodecInfo.java
@@ -43,6 +43,8 @@
public boolean mSupportSemiPlanar = false;
/** if codec is supporting YUV planar format */
public boolean mSupportPlanar = false;
+ /** if codec is software-based */
+ public boolean mIsSoftware = false;
private static final String TAG = "CodecInfo";
private static final String VIDEO_AVC = MediaFormat.MIMETYPE_VIDEO_AVC;
@@ -86,6 +88,8 @@
info.mFps = format.getInteger(MediaFormat.KEY_FRAME_RATE);
info.mBitRate = format.getInteger(MediaFormat.KEY_BIT_RATE);
+ info.mIsSoftware = !codec.getCodecInfo().isHardwareAccelerated();
+
codec.release();
return info;
}
diff --git a/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java b/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
index ea15e91..4755b9a 100644
--- a/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
+++ b/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
@@ -143,6 +143,16 @@
private TestConfig mTestConfig;
+ private static boolean isPreferredAbi() {
+ boolean prefers64Bit = false;
+ if (Build.SUPPORTED_64_BIT_ABIS.length > 0 &&
+ Build.SUPPORTED_ABIS.length > 0 &&
+ Build.SUPPORTED_ABIS[0].equals(Build.SUPPORTED_64_BIT_ABIS[0])) {
+ prefers64Bit = true;
+ }
+ return android.os.Process.is64Bit() ? prefers64Bit : !prefers64Bit;
+ }
+
@Override
protected void setUp() throws Exception {
mEncodedOutputBuffer = new LinkedList<Pair<ByteBuffer, BufferInfo>>();
@@ -702,6 +712,7 @@
if (MediaUtils.onFrankenDevice()) {
mTestConfig.mMaxTimeMs /= 10;
}
+ Log.i(TAG, "current ABI is " + (isPreferredAbi() ? "" : "not ") + "a preferred one");
mVideoWidth = w;
mVideoHeight = h;
@@ -811,7 +822,14 @@
String error = MediaPerfUtils.verifyAchievableFrameRates(
encoderName, mimeType, w, h, measuredFps);
// Performance numbers only make sense on real devices, so skip on non-real devices
- if (MediaUtils.onFrankenDevice() && error != null) {
+ //
+ // Also ignore verification on non-preferred ABIs due to the possibility of
+ // this being emulated. On some CPU-s 32-bit mode is emulated using big cores
+ // that results in the SW codecs also running much faster (perhaps they are
+ // scheduled for the big cores as well)
+ // TODO: still verify lower bound.
+ if ((MediaUtils.onFrankenDevice() || (infoEnc.mIsSoftware && !isPreferredAbi()))
+ && error != null) {
// ensure there is data, but don't insist that it is correct
assertFalse(error, error.startsWith("Failed to get "));
} else {