From a178d672b7d438d7dcc9b75d04bb349cad089e53 Mon Sep 17 00:00:00 2001 From: Xia Wang Date: Tue, 20 Nov 2012 19:03:06 -0800 Subject: Fix image processing test to include all benchmark tests -- each test case can be excuted separately -- add a test case to run all benchmarks. DO NOT MERGE Change-Id: I3c61dfe50267a6db11bc1895a4f37ed618a9103b --- .../android/rs/image/ImageProcessingActivity.java | 171 ++++++------ .../com/android/rs/image/ImageProcessingTest.java | 308 ++++++++++++++++++--- .../rs/image/ImageProcessingTestRunner.java | 13 +- 3 files changed, 363 insertions(+), 129 deletions(-) (limited to 'tests') diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java index db0ef78..ebe4d73 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java @@ -21,14 +21,7 @@ import android.os.Bundle; import android.graphics.BitmapFactory; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.renderscript.ScriptC; -import android.renderscript.RenderScript; -import android.renderscript.Type; -import android.renderscript.Allocation; -import android.renderscript.Element; -import android.renderscript.Script; import android.view.SurfaceView; -import android.view.SurfaceHolder; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; @@ -37,13 +30,8 @@ import android.widget.Spinner; import android.widget.TextView; import android.view.View; import android.util.Log; -import java.lang.Math; import android.os.Environment; -import android.app.Instrumentation; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -52,12 +40,57 @@ import java.io.IOException; public class ImageProcessingActivity extends Activity implements SeekBar.OnSeekBarChangeListener { private final String TAG = "Img"; - private final String RESULT_FILE = "image_processing_result.csv"; + public final String RESULT_FILE = "image_processing_result.csv"; + + /** + * Define enum type for test names + */ + public enum TestName { + LEVELS_VEC3_RELAXED ("Levels Vec3 Relaxed"), + LEVELS_VEC4_RELAXED ("Levels Vec4 Relaxed"), + LEVELS_VEC3_FULL ("Levels Vec3 Full"), + LEVELS_VEC4_FULL ("Levels Vec4 Full"), + BLUR_RADIUS_25 ("Blur radius 25"), + INTRINSIC_BLUE_RADIUS_25 ("Intrinsic Blur radius 25"), + GREYSCALE ("Greyscale"), + GRAIN ("Grain"), + FISHEYE_FULL ("Fisheye Full"), + FISHEYE_RELAXED ("Fisheye Relaxed"), + FISHEYE_APPROXIMATE_FULL ("Fisheye Approximate Full"), + FISHEYE_APPROXIMATE_RELAXED ("Fisheye Approximate Relaxed"), + VIGNETTE_FULL ("Vignette Full"), + VIGNETTE_RELAXED ("Vignette Relaxed"), + VIGNETTE_APPROXIMATE_FULL ("Vignette Approximate Full"), + VIGNETTE_APPROXIMATE_RELAXED ("Vignette Approximate Relaxed"), + GROUP_TEST_EMULATED ("Group Test (emulated)"), + GROUP_TEST_NATIVE ("Group Test (native)"), + CONVOLVE_3X3 ("Convolve 3x3"), + INTRINSICS_CONVOLVE_3X3 ("Intrinsics Convolve 3x3"), + COLOR_MATRIX ("ColorMatrix"), + INTRINSICS_COLOR_MATRIX ("Intrinsics ColorMatrix"), + INTRINSICS_COLOR_MATRIX_GREY ("Intrinsics ColorMatrix Grey"), + COPY ("Copy"), + CROSS_PROCESS_USING_LUT ("CrossProcess (using LUT)"), + CONVOLVE_5X5 ("Convolve 5x5"), + INTRINSICS_CONVOLVE_5X5 ("Intrinsics Convolve 5x5"), + MANDELBROT ("Mandelbrot"), + INTRINSICS_BLEND ("Intrinsics Blend"); + + private final String name; + + private TestName(String s) { + name = s; + } + + // return quoted string as displayed test name + public String toString() { + return name; + } + } Bitmap mBitmapIn; Bitmap mBitmapIn2; Bitmap mBitmapOut; - String mTestNames[]; private Spinner mSpinner; private SeekBar mBar1; @@ -140,96 +173,96 @@ public class ImageProcessingActivity extends Activity } - void changeTest(int testID) { + void changeTest(TestName testName) { if (mTest != null) { mTest.destroy(); } - switch(testID) { - case 0: + switch(testName) { + case LEVELS_VEC3_RELAXED: mTest = new LevelsV4(false, false); break; - case 1: + case LEVELS_VEC4_RELAXED: mTest = new LevelsV4(false, true); break; - case 2: + case LEVELS_VEC3_FULL: mTest = new LevelsV4(true, false); break; - case 3: + case LEVELS_VEC4_FULL: mTest = new LevelsV4(true, true); break; - case 4: + case BLUR_RADIUS_25: mTest = new Blur25(false); break; - case 5: + case INTRINSIC_BLUE_RADIUS_25: mTest = new Blur25(true); break; - case 6: + case GREYSCALE: mTest = new Greyscale(); break; - case 7: + case GRAIN: mTest = new Grain(); break; - case 8: + case FISHEYE_FULL: mTest = new Fisheye(false, false); break; - case 9: + case FISHEYE_RELAXED: mTest = new Fisheye(false, true); break; - case 10: + case FISHEYE_APPROXIMATE_FULL: mTest = new Fisheye(true, false); break; - case 11: + case FISHEYE_APPROXIMATE_RELAXED: mTest = new Fisheye(true, true); break; - case 12: + case VIGNETTE_FULL: mTest = new Vignette(false, false); break; - case 13: + case VIGNETTE_RELAXED: mTest = new Vignette(false, true); break; - case 14: + case VIGNETTE_APPROXIMATE_FULL: mTest = new Vignette(true, false); break; - case 15: + case VIGNETTE_APPROXIMATE_RELAXED: mTest = new Vignette(true, true); break; - case 16: + case GROUP_TEST_EMULATED: mTest = new GroupTest(false); break; - case 17: + case GROUP_TEST_NATIVE: mTest = new GroupTest(true); break; - case 18: + case CONVOLVE_3X3: mTest = new Convolve3x3(false); break; - case 19: + case INTRINSICS_CONVOLVE_3X3: mTest = new Convolve3x3(true); break; - case 20: + case COLOR_MATRIX: mTest = new ColorMatrix(false, false); break; - case 21: + case INTRINSICS_COLOR_MATRIX: mTest = new ColorMatrix(true, false); break; - case 22: + case INTRINSICS_COLOR_MATRIX_GREY: mTest = new ColorMatrix(true, true); break; - case 23: + case COPY: mTest = new Copy(); break; - case 24: + case CROSS_PROCESS_USING_LUT: mTest = new CrossProcess(); break; - case 25: + case CONVOLVE_5X5: mTest = new Convolve5x5(false); break; - case 26: + case INTRINSICS_CONVOLVE_5X5: mTest = new Convolve5x5(true); break; - case 27: + case MANDELBROT: mTest = new Mandelbrot(); break; - case 28: + case INTRINSICS_BLEND: mTest = new Blend(); break; } @@ -243,45 +276,14 @@ public class ImageProcessingActivity extends Activity } void setupTests() { - mTestNames = new String[29]; - mTestNames[0] = "Levels Vec3 Relaxed"; - mTestNames[1] = "Levels Vec4 Relaxed"; - mTestNames[2] = "Levels Vec3 Full"; - mTestNames[3] = "Levels Vec4 Full"; - mTestNames[4] = "Blur radius 25"; - mTestNames[5] = "Intrinsic Blur radius 25"; - mTestNames[6] = "Greyscale"; - mTestNames[7] = "Grain"; - mTestNames[8] = "Fisheye Full"; - mTestNames[9] = "Fisheye Relaxed"; - mTestNames[10] = "Fisheye Approximate Full"; - mTestNames[11] = "Fisheye Approximate Relaxed"; - mTestNames[12] = "Vignette Full"; - mTestNames[13] = "Vignette Relaxed"; - mTestNames[14] = "Vignette Approximate Full"; - mTestNames[15] = "Vignette Approximate Relaxed"; - mTestNames[16] = "Group Test (emulated)"; - mTestNames[17] = "Group Test (native)"; - mTestNames[18] = "Convolve 3x3"; - mTestNames[19] = "Intrinsics Convolve 3x3"; - mTestNames[20] = "ColorMatrix"; - mTestNames[21] = "Intrinsics ColorMatrix"; - mTestNames[22] = "Intrinsics ColorMatrix Grey"; - mTestNames[23] = "Copy"; - mTestNames[24] = "CrossProcess (using LUT)"; - mTestNames[25] = "Convolve 5x5"; - mTestNames[26] = "Intrinsics Convolve 5x5"; - mTestNames[27] = "Mandelbrot"; - mTestNames[28] = "Intrinsics Blend"; - - mTestSpinner.setAdapter(new ArrayAdapter( - this, R.layout.spinner_layout, mTestNames)); + mTestSpinner.setAdapter(new ArrayAdapter( + this, R.layout.spinner_layout, TestName.values())); } private AdapterView.OnItemSelectedListener mTestSpinnerListener = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView parent, View view, int pos, long id) { - changeTest(pos); + changeTest(TestName.values()[pos]); } public void onNothingSelected(AdapterView parent) { @@ -330,7 +332,7 @@ public class ImageProcessingActivity extends Activity mBenchmarkResult.setText("Result: not run"); setupTests(); - changeTest(0); + changeTest(TestName.LEVELS_VEC3_RELAXED); } @@ -369,10 +371,10 @@ public class ImageProcessingActivity extends Activity try { BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); - for (int i = 0; i < mTestNames.length; i++ ) { - changeTest(i); + for (TestName tn: TestName.values()) { + changeTest(tn); float t = getBenchmark(); - String s = new String("" + mTestNames[i] + ", " + t); + String s = new String("" + tn.toString() + ", " + t); rsWriter.write(s + "\n"); Log.v(TAG, "Test " + s + "ms\n"); } @@ -380,7 +382,7 @@ public class ImageProcessingActivity extends Activity } catch (IOException e) { Log.v(TAG, "Unable to write result file " + e.getMessage()); } - changeTest(0); + changeTest(TestName.LEVELS_VEC3_RELAXED); } // For benchmark test @@ -397,7 +399,6 @@ public class ImageProcessingActivity extends Activity mTest.finish(); } while (t > java.lang.System.currentTimeMillis()); - //Log.v(TAG, "Benchmarking"); int ct = 0; t = java.lang.System.currentTimeMillis(); diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingTest.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingTest.java index f995437..1b38e1f 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingTest.java +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingTest.java @@ -16,33 +16,30 @@ package com.android.rs.image; +import com.android.rs.image.ImageProcessingTestRunner; + import android.os.Bundle; -import android.os.Environment; -import android.app.Instrumentation; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; +import com.android.rs.image.ImageProcessingActivity.TestName; + import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - /** * ImageProcessing benchmark test. * To run the test, please use command * - * adb shell am instrument -w com.android.rs.image/.ImageProcessingTestRunner + * adb shell am instrument -e iteration -w com.android.rs.image/.ImageProcessingTestRunner * */ public class ImageProcessingTest extends ActivityInstrumentationTestCase2 { private final String TAG = "ImageProcessingTest"; - private final String RESULT_FILE = "image_processing_result.txt"; - private int ITERATION = 5; - private ImageProcessingActivity mAct; + private final String TEST_NAME = "Testname"; + private final String ITERATIONS = "Iterations"; + private final String BENCHMARK = "Benchmark"; + private static int INSTRUMENTATION_IN_PROGRESS = 2; + private int mIteration; + private ImageProcessingActivity mActivity; public ImageProcessingTest() { super(ImageProcessingActivity.class); @@ -51,7 +48,11 @@ public class ImageProcessingTest extends ActivityInstrumentationTestCase2 0); } @Override @@ -59,36 +60,257 @@ public class ImageProcessingTest extends ActivityInstrumentationTestCase2 -w com.android.rs.image/.ImageProcessingTestRunner * */ public class ImageProcessingTestRunner extends InstrumentationTestRunner { + public int mIteration = 5; + @Override public TestSuite getAllTests() { TestSuite suite = new InstrumentationTestSuite(this); suite.addTestSuite(ImageProcessingTest.class); return suite; } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + String strIteration = (String) icicle.get("iteration"); + if (strIteration != null) { + mIteration = Integer.parseInt(strIteration); + } + } } -- cgit v1.1