Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c60fccb3 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Benchmark: Add CSV support" am: d7fad5f8 am: d8037809 am: faafe298

Change-Id: I4ffd08d2b5b019bbfaf2b36f7597d0b8e120a29e
parents 8cf5acbb faafe298
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -28,7 +28,9 @@ import com.android.media.benchmark.library.CodecUtils;
import com.android.media.benchmark.library.Decoder;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;
import com.android.media.benchmark.library.Stats;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -54,6 +56,8 @@ public class DecoderTest {
            InstrumentationRegistry.getInstrumentation().getTargetContext();
    private static final String mInputFilePath = mContext.getString(R.string.input_file_path);
    private static final String mOutputFilePath = mContext.getString(R.string.output_file_path);
    private static final String mStatsFile =
            mContext.getFilesDir() + "/Decoder." + System.currentTimeMillis() + ".csv";
    private static final String TAG = "DecoderTest";
    private static final long PER_TEST_TIMEOUT_MS = 60000;
    private static final boolean DEBUG = false;
@@ -105,6 +109,13 @@ public class DecoderTest {
                {"crowd_1920x1080_25fps_4000kbps_h265.mkv", true}});
    }

    @BeforeClass
    public static void writeStatsHeaderToFile() throws IOException {
        Stats mStats = new Stats();
        boolean status = mStats.writeStatsHeader(mStatsFile);
        assertTrue("Unable to open stats file for writing!", status);
    }

    @Test(timeout = PER_TEST_TIMEOUT_MS)
    public void testDecoder() throws IOException {
        File inputFile = new File(mInputFilePath + mInputFile);
@@ -162,7 +173,8 @@ public class DecoderTest {
                decoder.deInitCodec();
                assertEquals("Decoder returned error " + status + " for file: " + mInputFile +
                        " with codec: " + codecName, 0, status);
                decoder.dumpStatistics(mInputFile + " " + codecName, extractor.getClipDuration());
                decoder.dumpStatistics(mInputFile, codecName, (mAsyncMode ? "async" : "sync"),
                        extractor.getClipDuration(), mStatsFile);
                Log.i(TAG, "Decoding Successful for file: " + mInputFile + " with codec: " +
                        codecName);
                decoder.resetDecoder();
@@ -196,8 +208,8 @@ public class DecoderTest {
            for (String codecName : mediaCodecs) {
                Log.i("Test: %s\n", mInputFile);
                Native nativeDecoder = new Native();
                int status =
                        nativeDecoder.Decode(mInputFilePath, mInputFile, codecName, mAsyncMode);
                int status = nativeDecoder.Decode(
                        mInputFilePath, mInputFile, mStatsFile, codecName, mAsyncMode);
                assertEquals("Decoder returned error " + status + " for file: " + mInputFile, 0,
                        status);
            }
+16 −6
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@ import com.android.media.benchmark.library.Decoder;
import com.android.media.benchmark.library.Encoder;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;
import com.android.media.benchmark.library.Stats;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -38,6 +40,7 @@ import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

import java.util.ArrayList;
@@ -53,6 +56,8 @@ public class EncoderTest {
            InstrumentationRegistry.getInstrumentation().getTargetContext();
    private static final String mInputFilePath = mContext.getString(R.string.input_file_path);
    private static final String mOutputFilePath = mContext.getString(R.string.output_file_path);
    private static final String mStatsFile =
            mContext.getFilesDir() + "/Encoder." + System.currentTimeMillis() + ".csv";
    private static final String TAG = "EncoderTest";
    private static final long PER_TEST_TIMEOUT_MS = 120000;
    private static final boolean DEBUG = false;
@@ -60,7 +65,6 @@ public class EncoderTest {
    private static final int ENCODE_DEFAULT_FRAME_RATE = 25;
    private static final int ENCODE_DEFAULT_BIT_RATE = 8000000 /* 8 Mbps */;
    private static final int ENCODE_MIN_BIT_RATE = 600000 /* 600 Kbps */;

    private String mInputFile;

    @Parameterized.Parameters
@@ -85,6 +89,13 @@ public class EncoderTest {
        this.mInputFile = inputFileName;
    }

    @BeforeClass
    public static void writeStatsHeaderToFile() throws IOException {
        Stats mStats = new Stats();
        boolean status = mStats.writeStatsHeader(mStatsFile);
        assertTrue("Unable to open stats file for writing!", status);
    }

    @Test(timeout = PER_TEST_TIMEOUT_MS)
    public void sampleEncoderTest() throws Exception {
        int status;
@@ -220,9 +231,8 @@ public class EncoderTest {
                    assertEquals(
                            codecName + " encoder returned error " + status + " for " + "file:" +
                                    " " + mInputFile, 0, status);
                    encoder.dumpStatistics(
                            mInputFile + "with " + codecName + " for " + "aSyncMode = " + asyncMode,
                            extractor.getClipDuration());
                    encoder.dumpStatistics(mInputFile, codecName, (asyncMode ? "async" : "sync"),
                            extractor.getClipDuration(), mStatsFile);
                    Log.i(TAG, "Encoding complete for file: " + mInputFile + " with codec: " +
                            codecName + " for aSyncMode = " + asyncMode);
                    encoder.resetEncoder();
@@ -264,8 +274,8 @@ public class EncoderTest {
            // Encoding the decoder's output
            for (String codecName : mediaCodecs) {
                Native nativeEncoder = new Native();
                int status =
                        nativeEncoder.Encode(mInputFilePath, mInputFile, mDecodedFile, codecName);
                int status = nativeEncoder.Encode(
                        mInputFilePath, mInputFile, mDecodedFile, mStatsFile, codecName);
                assertEquals(
                        codecName + " encoder returned error " + status + " for " + "file:" + " " +
                                mInputFile, 0, status);
+19 −2
Original line number Diff line number Diff line
@@ -19,12 +19,15 @@ package com.android.media.benchmark.tests;
import com.android.media.benchmark.R;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Native;
import com.android.media.benchmark.library.Stats;

import android.content.Context;
import android.media.MediaFormat;
import android.util.Log;

import androidx.test.platform.app.InstrumentationRegistry;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -32,6 +35,7 @@ import org.junit.runners.Parameterized;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
@@ -39,11 +43,15 @@ import java.util.Collection;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;

import static org.junit.Assert.assertTrue;

@RunWith(Parameterized.class)
public class ExtractorTest {
    private static Context mContext =
            InstrumentationRegistry.getInstrumentation().getTargetContext();
    private static final String mInputFilePath = mContext.getString(R.string.input_file_path);
    private static final String mStatsFile =
            mContext.getFilesDir() + "/Extractor." + System.currentTimeMillis() + ".csv";
    private static final String TAG = "ExtractorTest";
    private String mInputFileName;
    private int mTrackId;
@@ -71,6 +79,13 @@ public class ExtractorTest {
        this.mTrackId = track;
    }

    @BeforeClass
    public static void writeStatsHeaderToFile() throws IOException {
        Stats mStats = new Stats();
        boolean status = mStats.writeStatsHeader(mStatsFile);
        assertTrue("Unable to open stats file for writing!", status);
    }

    @Test
    public void sampleExtractTest() throws IOException {
        File inputFile = new File(mInputFilePath + mInputFileName);
@@ -80,11 +95,13 @@ public class ExtractorTest {
        FileDescriptor fileDescriptor = fileInput.getFD();
        Extractor extractor = new Extractor();
        extractor.setUpExtractor(fileDescriptor);
        MediaFormat format = extractor.getFormat(mTrackId);
        String mime = format.getString(MediaFormat.KEY_MIME);
        int status = extractor.extractSample(mTrackId);
        assertEquals("Extraction failed for " + mInputFileName, 0, status);
        Log.i(TAG, "Extracted " + mInputFileName + " successfully.");
        extractor.deinitExtractor();
        extractor.dumpStatistics(mInputFileName);
        extractor.dumpStatistics(mInputFileName, mime, mStatsFile);
        fileInput.close();
    }

@@ -95,7 +112,7 @@ public class ExtractorTest {
        assertTrue("Cannot find " + mInputFileName + " in directory " + mInputFilePath,
                inputFile.exists());
        FileInputStream fileInput = new FileInputStream(inputFile);
        int status = nativeExtractor.Extract(mInputFilePath, mInputFileName);
        int status = nativeExtractor.Extract(mInputFilePath, mInputFileName, mStatsFile);
        fileInput.close();
        assertEquals("Extraction failed for " + mInputFileName, 0, status);
        Log.i(TAG, "Extracted " + mInputFileName + " successfully.");
+17 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import com.android.media.benchmark.R;
import com.android.media.benchmark.library.Extractor;
import com.android.media.benchmark.library.Muxer;
import com.android.media.benchmark.library.Native;
import com.android.media.benchmark.library.Stats;

import androidx.test.platform.app.InstrumentationRegistry;

@@ -28,6 +29,7 @@ import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.util.Log;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -35,6 +37,7 @@ import org.junit.runners.Parameterized;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -47,11 +50,15 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import static org.junit.Assert.assertTrue;

@RunWith(Parameterized.class)
public class MuxerTest {
    private static Context mContext =
            InstrumentationRegistry.getInstrumentation().getTargetContext();
    private static final String mInputFilePath = mContext.getString(R.string.input_file_path);
    private static final String mStatsFile =
            mContext.getFilesDir() + "/Muxer." + System.currentTimeMillis() + ".csv";
    private static final String TAG = "MuxerTest";
    private static final Map<String, Integer> mMapFormat = new Hashtable<String, Integer>() {
        {
@@ -94,6 +101,13 @@ public class MuxerTest {
        this.mFormat = outputFormat;
    }

    @BeforeClass
    public static void writeStatsHeaderToFile() throws IOException {
        Stats mStats = new Stats();
        boolean status = mStats.writeStatsHeader(mStatsFile);
        assertTrue("Unable to open stats file for writing!", status);
    }

    @Test
    public void sampleMuxerTest() throws IOException {
        File inputFile = new File(mInputFilePath + mInputFileName);
@@ -132,7 +146,7 @@ public class MuxerTest {
            assertEquals("Cannot perform write operation for " + mInputFileName, 0, status);
            Log.i(TAG, "Muxed " + mInputFileName + " successfully.");
            muxer.deInitMuxer();
            muxer.dumpStatistics(mInputFileName, extractor.getClipDuration());
            muxer.dumpStatistics(mInputFileName, mFormat, extractor.getClipDuration(), mStatsFile);
            muxer.resetMuxer();
            extractor.unselectExtractorTrack(currentTrack);
            inputBufferInfo.clear();
@@ -151,7 +165,8 @@ public class MuxerTest {
                inputFile.exists());
        int tid = android.os.Process.myTid();
        String mMuxOutputFile = (mContext.getFilesDir() + "/mux_" + tid + ".out");
        int status = nativeMuxer.Mux(mInputFilePath, mInputFileName, mMuxOutputFile, mFormat);
        int status = nativeMuxer.Mux(
                mInputFilePath, mInputFileName, mMuxOutputFile, mStatsFile, mFormat);
        assertEquals("Cannot perform write operation for " + mInputFileName, 0, status);
        Log.i(TAG, "Muxed " + mInputFileName + " successfully.");
        File muxedFile = new File(mMuxOutputFile);
+11 −7
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define LOG_TAG "NativeDecoder"

#include <jni.h>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
@@ -27,8 +28,8 @@
#include "Decoder.h"

extern "C" JNIEXPORT int JNICALL Java_com_android_media_benchmark_library_Native_Decode(
        JNIEnv *env, jobject thiz, jstring jFilePath, jstring jFileName, jstring jCodecName,
        jboolean asyncMode) {
        JNIEnv *env, jobject thiz, jstring jFilePath, jstring jFileName, jstring jStatsFile,
        jstring jCodecName, jboolean asyncMode) {
    const char *filePath = env->GetStringUTFChars(jFilePath, nullptr);
    const char *fileName = env->GetStringUTFChars(jFileName, nullptr);
    string sFilePath = string(filePath) + string(fileName);
@@ -105,10 +106,13 @@ extern "C" JNIEXPORT int JNICALL Java_com_android_media_benchmark_library_Native
            return -1;
        }
        decoder->deInitCodec();
        env->ReleaseStringUTFChars(jCodecName, codecName);
        const char *inputReference = env->GetStringUTFChars(jFileName, nullptr);
        const char *statsFile = env->GetStringUTFChars(jStatsFile, nullptr);
        string sInputReference = string(inputReference);
        decoder->dumpStatistics(sInputReference);
        decoder->dumpStatistics(sInputReference, sCodecName, (asyncMode ? "async" : "sync"),
                                statsFile);
        env->ReleaseStringUTFChars(jCodecName, codecName);
        env->ReleaseStringUTFChars(jStatsFile, statsFile);
        env->ReleaseStringUTFChars(jFileName, inputReference);
        if (inputBuffer) {
            free(inputBuffer);
Loading