1d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy/* 252541816fb308fcac31e86eb3293c2b28b0999deJason Sams * Copyright (C) 2012 The Android Open Source Project 3d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * 4d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * you may not use this file except in compliance with the License. 6d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * You may obtain a copy of the License at 7d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * 8d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * 10d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * Unless required by applicable law or agreed to in writing, software 11d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * See the License for the specific language governing permissions and 14d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy * limitations under the License. 15d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy */ 16d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 17d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guypackage com.android.rs.image; 18d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 19d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.app.Activity; 20d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.os.Bundle; 21d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.graphics.BitmapFactory; 22d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.graphics.Bitmap; 23d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.graphics.Canvas; 24d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.ScriptC; 25d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.RenderScript; 26d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.Type; 27d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.Allocation; 28d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.Element; 29d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.renderscript.Script; 30d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.view.SurfaceView; 31d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.view.SurfaceHolder; 3252541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.widget.AdapterView; 3352541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.widget.ArrayAdapter; 34d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.widget.ImageView; 35d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guyimport android.widget.SeekBar; 3652541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.widget.Spinner; 37814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchoukimport android.widget.TextView; 38814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchoukimport android.view.View; 39f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wangimport android.util.Log; 40586f3b5d32c0464a4e69c92f89865eea672ab665Jason Samsimport java.lang.Math; 41d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 42b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport android.os.Environment; 43b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport android.app.Instrumentation; 44b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport android.content.Context; 45b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport android.content.Intent; 46b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport android.net.Uri; 47b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport java.io.BufferedWriter; 48b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport java.io.File; 49b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport java.io.FileWriter; 50b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Samsimport java.io.IOException; 51b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams 52814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchoukpublic class ImageProcessingActivity extends Activity 5352541816fb308fcac31e86eb3293c2b28b0999deJason Sams implements SeekBar.OnSeekBarChangeListener { 54f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang private final String TAG = "Img"; 55b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams private final String RESULT_FILE = "image_processing_result.csv"; 56b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams 5752541816fb308fcac31e86eb3293c2b28b0999deJason Sams Bitmap mBitmapIn; 5874478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray Bitmap mBitmapIn2; 5952541816fb308fcac31e86eb3293c2b28b0999deJason Sams Bitmap mBitmapOut; 6052541816fb308fcac31e86eb3293c2b28b0999deJason Sams String mTestNames[]; 6152541816fb308fcac31e86eb3293c2b28b0999deJason Sams 6274478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray private Spinner mSpinner; 6352541816fb308fcac31e86eb3293c2b28b0999deJason Sams private SeekBar mBar1; 6452541816fb308fcac31e86eb3293c2b28b0999deJason Sams private SeekBar mBar2; 6552541816fb308fcac31e86eb3293c2b28b0999deJason Sams private SeekBar mBar3; 6652541816fb308fcac31e86eb3293c2b28b0999deJason Sams private SeekBar mBar4; 6752541816fb308fcac31e86eb3293c2b28b0999deJason Sams private SeekBar mBar5; 6852541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TextView mText1; 6952541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TextView mText2; 7052541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TextView mText3; 7152541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TextView mText4; 7252541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TextView mText5; 73814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 74814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk private float mSaturation = 1.0f; 75814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 76814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk private TextView mBenchmarkResult; 7752541816fb308fcac31e86eb3293c2b28b0999deJason Sams private Spinner mTestSpinner; 78d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 79d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy private SurfaceView mSurfaceView; 80d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy private ImageView mDisplayView; 81d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 8252541816fb308fcac31e86eb3293c2b28b0999deJason Sams private boolean mDoingBenchmark; 83abf2b931ff173a04cc171592e25a6fa6a81a606dAlex Sakhartchouk 8452541816fb308fcac31e86eb3293c2b28b0999deJason Sams private TestBase mTest; 85abf2b931ff173a04cc171592e25a6fa6a81a606dAlex Sakhartchouk 8674478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray public void updateDisplay() { 8774478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTest.updateBitmap(mBitmapOut); 8874478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mDisplayView.invalidate(); 8974478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray } 90abf2b931ff173a04cc171592e25a6fa6a81a606dAlex Sakhartchouk 9152541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 9252541816fb308fcac31e86eb3293c2b28b0999deJason Sams if (fromUser) { 9352541816fb308fcac31e86eb3293c2b28b0999deJason Sams 9452541816fb308fcac31e86eb3293c2b28b0999deJason Sams if (seekBar == mBar1) { 9552541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar1Changed(progress); 9652541816fb308fcac31e86eb3293c2b28b0999deJason Sams } else if (seekBar == mBar2) { 9752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar2Changed(progress); 9852541816fb308fcac31e86eb3293c2b28b0999deJason Sams } else if (seekBar == mBar3) { 9952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar3Changed(progress); 10052541816fb308fcac31e86eb3293c2b28b0999deJason Sams } else if (seekBar == mBar4) { 10152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar4Changed(progress); 10252541816fb308fcac31e86eb3293c2b28b0999deJason Sams } else if (seekBar == mBar5) { 10352541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar5Changed(progress); 104d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 105d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 10652541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.runTest(); 10774478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray updateDisplay(); 108d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 109d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 110d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 11152541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onStartTrackingTouch(SeekBar seekBar) { 11252541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 113814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 11452541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onStopTrackingTouch(SeekBar seekBar) { 11552541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 116814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 11752541816fb308fcac31e86eb3293c2b28b0999deJason Sams void setupBars() { 11874478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mSpinner.setVisibility(View.VISIBLE); 11974478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTest.onSpinner1Setup(mSpinner); 12074478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray 12152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar1.setVisibility(View.VISIBLE); 12252541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText1.setVisibility(View.VISIBLE); 12352541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar1Setup(mBar1, mText1); 124814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 12552541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar2.setVisibility(View.VISIBLE); 12652541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText2.setVisibility(View.VISIBLE); 12752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar2Setup(mBar2, mText2); 128814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 12952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar3.setVisibility(View.VISIBLE); 13052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText3.setVisibility(View.VISIBLE); 13152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar3Setup(mBar3, mText3); 13252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 13352541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar4.setVisibility(View.VISIBLE); 13452541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText4.setVisibility(View.VISIBLE); 13552541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar4Setup(mBar4, mText4); 13652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 13752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar5.setVisibility(View.VISIBLE); 13852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText5.setVisibility(View.VISIBLE); 13952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.onBar5Setup(mBar5, mText5); 140814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk } 141814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 14252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 14352541816fb308fcac31e86eb3293c2b28b0999deJason Sams void changeTest(int testID) { 144ed0b4f961f04ebf12cf900f4ce2d94e4473bf40bJason Sams if (mTest != null) { 145ed0b4f961f04ebf12cf900f4ce2d94e4473bf40bJason Sams mTest.destroy(); 146ed0b4f961f04ebf12cf900f4ce2d94e4473bf40bJason Sams } 14752541816fb308fcac31e86eb3293c2b28b0999deJason Sams switch(testID) { 14852541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 0: 14952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest = new LevelsV4(false, false); 15052541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 15152541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 1: 15252541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest = new LevelsV4(false, true); 15352541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 15452541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 2: 15552541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest = new LevelsV4(true, false); 15652541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 15752541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 3: 15852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest = new LevelsV4(true, true); 15952541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 16052541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 4: 1613a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Blur25(false); 16252541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 16352541816fb308fcac31e86eb3293c2b28b0999deJason Sams case 5: 1643a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Blur25(true); 16552541816fb308fcac31e86eb3293c2b28b0999deJason Sams break; 1664a45de8c5fccbbe550c87571551093ddf8a1d976Jason Sams case 6: 1673a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Greyscale(); 1684a45de8c5fccbbe550c87571551093ddf8a1d976Jason Sams break; 169bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma case 7: 1703a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Grain(); 171bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma break; 172bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma case 8: 1733a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Fisheye(false, false); 174bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma break; 175bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma case 9: 1763a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Fisheye(false, true); 177bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma break; 178bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma case 10: 1793a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Fisheye(true, false); 1808fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma break; 1818fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma case 11: 1823a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Fisheye(true, true); 1838fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma break; 1848fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma case 12: 1853a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Vignette(false, false); 186bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma break; 187423ebcb4dc4881c3a83e8121d5212466287d0d0cJason Sams case 13: 1883a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Vignette(false, true); 189423ebcb4dc4881c3a83e8121d5212466287d0d0cJason Sams break; 190423ebcb4dc4881c3a83e8121d5212466287d0d0cJason Sams case 14: 1913a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Vignette(true, false); 192423ebcb4dc4881c3a83e8121d5212466287d0d0cJason Sams break; 1936ab97682fd444586ee135912a4210417a1c8781bJason Sams case 15: 1943a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Vignette(true, true); 19550b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma break; 19650b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma case 16: 1973a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new GroupTest(false); 19850b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma break; 19950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma case 17: 2003a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new GroupTest(true); 2015729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams break; 2025729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams case 18: 2033a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Convolve3x3(false); 2045729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams break; 2055729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams case 19: 2063a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Convolve3x3(true); 2075729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams break; 2085729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams case 20: 2093a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new ColorMatrix(false, false); 2105729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams break; 2115729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams case 21: 2123a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new ColorMatrix(true, false); 213c1ccbf52319993634e3bcc2433c66aff6dd87707Jason Sams break; 214c1ccbf52319993634e3bcc2433c66aff6dd87707Jason Sams case 22: 2153a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new ColorMatrix(true, true); 2163a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams break; 2173a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams case 23: 2185729fcdf950eb909b0ab90a49af58731ed8f92cdJason Sams mTest = new Copy(); 2196ab97682fd444586ee135912a4210417a1c8781bJason Sams break; 2203a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams case 24: 2213a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new CrossProcess(); 2223a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams break; 2233a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams case 25: 2243a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Convolve5x5(false); 2253a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams break; 2263a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams case 26: 2273a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTest = new Convolve5x5(true); 2283a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams break; 2290e64d892d69d729a3afb95353b27d4f072ba6437Tim Murray case 27: 2300e64d892d69d729a3afb95353b27d4f072ba6437Tim Murray mTest = new Mandelbrot(); 2310e64d892d69d729a3afb95353b27d4f072ba6437Tim Murray break; 23274478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray case 28: 23374478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTest = new Blend(); 23474478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray break; 23552541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 23652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 23774478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTest.createBaseTest(this, mBitmapIn, mBitmapIn2); 23852541816fb308fcac31e86eb3293c2b28b0999deJason Sams setupBars(); 23952541816fb308fcac31e86eb3293c2b28b0999deJason Sams 24052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.runTest(); 24174478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray updateDisplay(); 24252541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBenchmarkResult.setText("Result: not run"); 243814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk } 244814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 24552541816fb308fcac31e86eb3293c2b28b0999deJason Sams void setupTests() { 24674478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTestNames = new String[29]; 24752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestNames[0] = "Levels Vec3 Relaxed"; 24852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestNames[1] = "Levels Vec4 Relaxed"; 24952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestNames[2] = "Levels Vec3 Full"; 25052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestNames[3] = "Levels Vec4 Full"; 25152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestNames[4] = "Blur radius 25"; 2523a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[5] = "Intrinsic Blur radius 25"; 2533a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[6] = "Greyscale"; 2543a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[7] = "Grain"; 2553a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[8] = "Fisheye Full"; 2563a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[9] = "Fisheye Relaxed"; 2573a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[10] = "Fisheye Approximate Full"; 2583a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[11] = "Fisheye Approximate Relaxed"; 2593a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[12] = "Vignette Full"; 2603a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[13] = "Vignette Relaxed"; 2613a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[14] = "Vignette Approximate Full"; 2623a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[15] = "Vignette Approximate Relaxed"; 2633a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[16] = "Group Test (emulated)"; 2643a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[17] = "Group Test (native)"; 2653a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[18] = "Convolve 3x3"; 2663a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[19] = "Intrinsics Convolve 3x3"; 2673a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[20] = "ColorMatrix"; 2683a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[21] = "Intrinsics ColorMatrix"; 2693a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[22] = "Intrinsics ColorMatrix Grey"; 2703a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[23] = "Copy"; 2713a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[24] = "CrossProcess (using LUT)"; 2723a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[25] = "Convolve 5x5"; 2733a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mTestNames[26] = "Intrinsics Convolve 5x5"; 2740e64d892d69d729a3afb95353b27d4f072ba6437Tim Murray mTestNames[27] = "Mandelbrot"; 27574478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mTestNames[28] = "Intrinsics Blend"; 2760e64d892d69d729a3afb95353b27d4f072ba6437Tim Murray 27752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestSpinner.setAdapter(new ArrayAdapter<String>( 27852541816fb308fcac31e86eb3293c2b28b0999deJason Sams this, R.layout.spinner_layout, mTestNames)); 279586f3b5d32c0464a4e69c92f89865eea672ab665Jason Sams } 280586f3b5d32c0464a4e69c92f89865eea672ab665Jason Sams 28152541816fb308fcac31e86eb3293c2b28b0999deJason Sams private AdapterView.OnItemSelectedListener mTestSpinnerListener = 28252541816fb308fcac31e86eb3293c2b28b0999deJason Sams new AdapterView.OnItemSelectedListener() { 28352541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 28452541816fb308fcac31e86eb3293c2b28b0999deJason Sams changeTest(pos); 28552541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 28652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 28752541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onNothingSelected(AdapterView parent) { 28852541816fb308fcac31e86eb3293c2b28b0999deJason Sams 28952541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 29052541816fb308fcac31e86eb3293c2b28b0999deJason Sams }; 29152541816fb308fcac31e86eb3293c2b28b0999deJason Sams 292d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy @Override 293d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy protected void onCreate(Bundle savedInstanceState) { 294d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy super.onCreate(savedInstanceState); 295d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy setContentView(R.layout.main); 296d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 2978fd5853c1c07c2fd3954b3c5e64702d70af31144Jason Sams mBitmapIn = loadBitmap(R.drawable.img1600x1067); 29874478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mBitmapIn2 = loadBitmap(R.drawable.img1600x1067b); 2998fd5853c1c07c2fd3954b3c5e64702d70af31144Jason Sams mBitmapOut = loadBitmap(R.drawable.img1600x1067); 300d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 301d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy mSurfaceView = (SurfaceView) findViewById(R.id.surface); 302d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 303d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy mDisplayView = (ImageView) findViewById(R.id.display); 3044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams mDisplayView.setImageBitmap(mBitmapOut); 305d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 30674478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray mSpinner = (Spinner) findViewById(R.id.spinner1); 30774478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray 30852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar1 = (SeekBar) findViewById(R.id.slider1); 30952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar2 = (SeekBar) findViewById(R.id.slider2); 31052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar3 = (SeekBar) findViewById(R.id.slider3); 31152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar4 = (SeekBar) findViewById(R.id.slider4); 31252541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar5 = (SeekBar) findViewById(R.id.slider5); 313814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 31452541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar1.setOnSeekBarChangeListener(this); 31552541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar2.setOnSeekBarChangeListener(this); 31652541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar3.setOnSeekBarChangeListener(this); 31752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar4.setOnSeekBarChangeListener(this); 31852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBar5.setOnSeekBarChangeListener(this); 319d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 32052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText1 = (TextView) findViewById(R.id.slider1Text); 32152541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText2 = (TextView) findViewById(R.id.slider2Text); 32252541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText3 = (TextView) findViewById(R.id.slider3Text); 32352541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText4 = (TextView) findViewById(R.id.slider4Text); 32452541816fb308fcac31e86eb3293c2b28b0999deJason Sams mText5 = (TextView) findViewById(R.id.slider5Text); 325d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 32652541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestSpinner = (Spinner) findViewById(R.id.filterselection); 32752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTestSpinner.setOnItemSelectedListener(mTestSpinnerListener); 328d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 32952541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText); 33052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mBenchmarkResult.setText("Result: not run"); 331718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 33252541816fb308fcac31e86eb3293c2b28b0999deJason Sams setupTests(); 33352541816fb308fcac31e86eb3293c2b28b0999deJason Sams changeTest(0); 334d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 335d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 33652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 337d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy private Bitmap loadBitmap(int resource) { 338d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy final BitmapFactory.Options options = new BitmapFactory.Options(); 339d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy options.inPreferredConfig = Bitmap.Config.ARGB_8888; 340d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy return copyBitmap(BitmapFactory.decodeResource(getResources(), resource, options)); 341d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 342d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy 343d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy private static Bitmap copyBitmap(Bitmap source) { 344d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy Bitmap b = Bitmap.createBitmap(source.getWidth(), source.getHeight(), source.getConfig()); 345d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy Canvas c = new Canvas(b); 346d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy c.drawBitmap(source, 0, 0, null); 347d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy source.recycle(); 348d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy return b; 349d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy } 350814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 351814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk // button hook 352814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk public void benchmark(View v) { 35376fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams float t = getBenchmark(); 354f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang //long javaTime = javaFilter(); 355f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang //mBenchmarkResult.setText("RS: " + t + " ms Java: " + javaTime + " ms"); 356f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang mBenchmarkResult.setText("Result: " + t + " ms"); 357b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams Log.v(TAG, "getBenchmark: Renderscript frame time core ms " + t); 358b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams } 359b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams 360b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams public void benchmark_all(View v) { 361b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams // write result into a file 362b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams File externalStorage = Environment.getExternalStorageDirectory(); 363b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams if (!externalStorage.canWrite()) { 364b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams Log.v(TAG, "sdcard is not writable"); 365b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams return; 366b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams } 367b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams File resultFile = new File(externalStorage, RESULT_FILE); 368b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams resultFile.setWritable(true, false); 369b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams try { 370b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 371b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 372b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams for (int i = 0; i < mTestNames.length; i++ ) { 373b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams changeTest(i); 374b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams float t = getBenchmark(); 375b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams String s = new String("" + mTestNames[i] + ", " + t); 376b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams rsWriter.write(s + "\n"); 377b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams Log.v(TAG, "Test " + s + "ms\n"); 378b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams } 379b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams rsWriter.close(); 380b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams } catch (IOException e) { 381b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams Log.v(TAG, "Unable to write result file " + e.getMessage()); 382b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams } 383b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams changeTest(0); 384f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang } 385f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang 386f6244d1c0c91cd0fcb49abc8c0526eab7fcc1c3bXia Wang // For benchmark test 38776fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams public float getBenchmark() { 38852541816fb308fcac31e86eb3293c2b28b0999deJason Sams mDoingBenchmark = true; 389814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 39052541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.setupBenchmark(); 39152541816fb308fcac31e86eb3293c2b28b0999deJason Sams long result = 0; 39291e0dc7eb549462f9648856b5750dc82f967be7eJason Sams 393b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams //Log.v(TAG, "Warming"); 394761d3d0df785761bb442c64793cc15eafa9171fdJason Sams long t = java.lang.System.currentTimeMillis() + 250; 39552541816fb308fcac31e86eb3293c2b28b0999deJason Sams do { 39652541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.runTest(); 39752541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.finish(); 39852541816fb308fcac31e86eb3293c2b28b0999deJason Sams } while (t > java.lang.System.currentTimeMillis()); 399814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 400814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 401b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams //Log.v(TAG, "Benchmarking"); 402b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams int ct = 0; 40352541816fb308fcac31e86eb3293c2b28b0999deJason Sams t = java.lang.System.currentTimeMillis(); 404b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams do { 40576fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams mTest.runTest(); 406b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams mTest.finish(); 407b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams ct++; 408761d3d0df785761bb442c64793cc15eafa9171fdJason Sams } while ((t+1000) > java.lang.System.currentTimeMillis()); 409814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk t = java.lang.System.currentTimeMillis() - t; 41076fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams float ft = (float)t; 411b94d69a2267d2660ade79ff5e56ecb00f307c553Jason Sams ft /= ct; 41252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 41352541816fb308fcac31e86eb3293c2b28b0999deJason Sams mTest.exitBenchmark(); 41452541816fb308fcac31e86eb3293c2b28b0999deJason Sams mDoingBenchmark = false; 415814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk 41676fb2973b988b150ed4b62611dc41c2658eeb892Jason Sams return ft; 417814326b3b945d61ea48d05e32899fb5a036cc2d3Alex Sakhartchouk } 418d7fa122dfed376cd9c60eac516e2730acf23f3ddRomain Guy} 419