Merge "media: log result raw data in test error message" into mnc-dev
diff --git a/libs/deviceutil/src/android/cts/util/MediaUtils.java b/libs/deviceutil/src/android/cts/util/MediaUtils.java
index c04a2cf..c595e10 100644
--- a/libs/deviceutil/src/android/cts/util/MediaUtils.java
+++ b/libs/deviceutil/src/android/cts/util/MediaUtils.java
@@ -459,12 +459,13 @@
return avgs;
}
- public static void logResults(ReportLog log, String prefix,
+ public static String logResults(ReportLog log, String prefix,
double min, double max, double avg, double stdev) {
String msg = prefix;
msg += " min=" + Math.round(min / 1000) + " max=" + Math.round(max / 1000) +
" avg=" + Math.round(avg / 1000) + " stdev=" + Math.round(stdev / 1000);
log.printValue(msg, 1000000000 / min, ResultType.HIGHER_BETTER, ResultUnit.FPS);
+ return msg;
}
public static VideoCapabilities getVideoCapabilities(String codecName, String mime) {
@@ -512,4 +513,17 @@
return (measured >= lowerBoundary1 && measured <= upperBoundary1 &&
measured >= lowerBoundary2 && measured <= upperBoundary2);
}
+
+ public static String getErrorMessage(
+ Range<Double> reportedRange, double[] measuredFps, String[] rawData) {
+ String msg = "";
+ if (reportedRange == null) {
+ msg += "Failed to get achievable frame rate.\n";
+ } else {
+ msg += "Expected achievable frame rate range: " + reportedRange + ".\n";
+ }
+ msg += "Measured frame rate: " + Arrays.toString(measuredFps) + ".\n";
+ msg += "Raw data: " + Arrays.toString(rawData) + ".\n";
+ return msg;
+ }
}
diff --git a/suite/cts/deviceTests/videoperf/src/com/android/cts/videoperf/VideoEncoderDecoderTest.java b/suite/cts/deviceTests/videoperf/src/com/android/cts/videoperf/VideoEncoderDecoderTest.java
index 8fc5a44..62f37c5 100644
--- a/suite/cts/deviceTests/videoperf/src/com/android/cts/videoperf/VideoEncoderDecoderTest.java
+++ b/suite/cts/deviceTests/videoperf/src/com/android/cts/videoperf/VideoEncoderDecoderTest.java
@@ -516,6 +516,8 @@
boolean encTestPassed = false;
boolean decTestPassed = false;
+ double[] measuredFps = new double[mTestConfig.mNumberOfRepeat];
+ String[] resultRawData = new String[mTestConfig.mNumberOfRepeat];
for (int i = 0; i < mTestConfig.mNumberOfRepeat; i++) {
// make sure that rms error is not too big.
if (decoderRmsErrorResults[i] >= mRmsErrorMargain) {
@@ -542,8 +544,11 @@
String prefix = "codec=" + encoderName + " round=" + i +
" EncInputFormat=" + mEncInputFormat +
" EncOutputFormat=" + mEncOutputFormat;
- MediaUtils.logResults(mReportLog, prefix, encMin, encMax, encAvg, encStdev);
+ String result =
+ MediaUtils.logResults(mReportLog, prefix, encMin, encMax, encAvg, encStdev);
double measuredEncFps = 1000000000 / encMin;
+ resultRawData[i] = result;
+ measuredFps[i] = measuredEncFps;
if (!encTestPassed) {
encTestPassed = MediaUtils.verifyResults(
encoderName, mimeType, w, h, measuredEncFps);
@@ -565,10 +570,14 @@
}
}
}
+
if (mTestConfig.mTestResult) {
if (!encTestPassed) {
- fail("Measured fps for " + encoderName +
- " doesn't match with reported achievable frame rates.");
+ Range<Double> reportedRange =
+ MediaUtils.getAchievableFrameRatesFor(encoderName, mimeType, w, h);
+ String failMessage =
+ MediaUtils.getErrorMessage(reportedRange, measuredFps, resultRawData);
+ fail(failMessage);
}
// Decoder result will be verified in VideoDecoderPerfTest
// if (!decTestPassed) {
@@ -576,6 +585,8 @@
// " doesn't match with reported achievable frame rates.");
// }
}
+ measuredFps = null;
+ resultRawData = null;
}
/**
diff --git a/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java b/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
index ede5040..f5680f6 100644
--- a/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
+++ b/tests/tests/media/src/android/media/cts/VideoDecoderPerfTest.java
@@ -31,6 +31,7 @@
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.util.Log;
+import android.util.Range;
import android.view.Surface;
import com.android.cts.util.ResultType;
@@ -58,6 +59,8 @@
LinkedList<ByteBuffer> mSamplesInMemory = new LinkedList<ByteBuffer>();
private static final int MOVING_AVERAGE_NUM = 10;
private MediaFormat mDecOutputFormat;
+ private double[] mMeasuredFps;
+ private String[] mResultRawData;
private Resources mResources;
private DeviceReportLog mReportLog;
@@ -104,6 +107,8 @@
}
boolean pass = false;
+ mMeasuredFps = new double[NUMBER_OF_REPEAT];
+ mResultRawData = new String[NUMBER_OF_REPEAT];
Log.d(TAG, "testing " + name);
for (int i = 0; i < NUMBER_OF_REPEAT; ++i) {
// Decode to Surface.
@@ -118,7 +123,16 @@
Log.d(TAG, "round #" + i + " decode to buffer");
doDecode(name, video, width, height, null, i);
}
- assertTrue("Measured fps doesn't match with reported achievable frame rates.", pass);
+
+ if (!pass) {
+ Range<Double> reportedRange =
+ MediaUtils.getAchievableFrameRatesFor(name, mime, width, height);
+ String failMessage =
+ MediaUtils.getErrorMessage(reportedRange, mMeasuredFps, mResultRawData);
+ fail(failMessage);
+ }
+ mMeasuredFps = null;
+ mResultRawData = null;
}
// use 0 for summary line, detail for each test config is in the report.
mReportLog.printSummary("average fps", 0, ResultType.HIGHER_BETTER, ResultUnit.FPS);
@@ -276,9 +290,15 @@
double decMax = Stat.getMax(avgs);
double decAvg = Stat.getAverage(avgs);
double decStdev = MediaUtils.getStdev(avgs);
- MediaUtils.logResults(mReportLog, testConfig, decMin, decMax, decAvg, decStdev);
+ String result =
+ MediaUtils.logResults(mReportLog, testConfig, decMin, decMax, decAvg, decStdev);
+ fps = 1000000000 / decMin;
+ if (surface != null) {
+ mMeasuredFps[round] = fps;
+ mResultRawData[round] = result;
+ }
- return MediaUtils.verifyResults(name, mime, w, h, 1000000000 / decMin);
+ return MediaUtils.verifyResults(name, mime, w, h, fps);
}
public void testH2640320x0240Other() throws Exception {