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 {