1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/* 2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2012 The Android Open Source Project 3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License. 6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at 7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software 11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and 14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License. 15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.image; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.app.Activity; 20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Bundle; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Handler; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Message; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.BitmapFactory; 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Bitmap; 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Canvas; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.SurfaceView; 27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.AdapterView; 28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ArrayAdapter; 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ImageView; 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.SeekBar; 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.Spinner; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.TextView; 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.View; 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log; 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.ScriptC; 36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.RenderScript; 37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Type; 38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Allocation; 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element; 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Script; 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Environment; 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.BufferedWriter; 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.File; 45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.FileWriter; 46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.IOException; 47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class ImageProcessingActivity extends Activity 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams implements SeekBar.OnSeekBarChangeListener { 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final String TAG = "Img"; 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public final String RESULT_FILE = "image_processing_result.csv"; 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams RenderScript mRS; 54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Allocation mInPixelsAllocation; 55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Allocation mInPixelsAllocation2; 56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Allocation mOutPixelsAllocation; 57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 5826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /** 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Define enum type for test names 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public enum TestName { 63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC3_RELAXED ("Levels Vec3 Relaxed"), 64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC4_RELAXED ("Levels Vec4 Relaxed"), 65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC3_FULL ("Levels Vec3 Full"), 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC4_FULL ("Levels Vec4 Full"), 67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BLUR_RADIUS_25 ("Blur radius 25"), 68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSIC_BLUE_RADIUS_25 ("Intrinsic Blur radius 25"), 69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GREYSCALE ("Greyscale"), 70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GRAIN ("Grain"), 71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_FULL ("Fisheye Full"), 72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_RELAXED ("Fisheye Relaxed"), 73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_APPROXIMATE_FULL ("Fisheye Approximate Full"), 74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_APPROXIMATE_RELAXED ("Fisheye Approximate Relaxed"), 75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_FULL ("Vignette Full"), 76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_RELAXED ("Vignette Relaxed"), 77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_APPROXIMATE_FULL ("Vignette Approximate Full"), 78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_APPROXIMATE_RELAXED ("Vignette Approximate Relaxed"), 79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GROUP_TEST_EMULATED ("Group Test (emulated)"), 80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GROUP_TEST_NATIVE ("Group Test (native)"), 81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONVOLVE_3X3 ("Convolve 3x3"), 82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_CONVOLVE_3X3 ("Intrinsics Convolve 3x3"), 83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_MATRIX ("ColorMatrix"), 84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_COLOR_MATRIX ("Intrinsics ColorMatrix"), 85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_COLOR_MATRIX_GREY ("Intrinsics ColorMatrix Grey"), 86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COPY ("Copy"), 87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CROSS_PROCESS_USING_LUT ("CrossProcess (using LUT)"), 88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONVOLVE_5X5 ("Convolve 5x5"), 89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_CONVOLVE_5X5 ("Intrinsics Convolve 5x5"), 90859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams MANDELBROT_FLOAT ("Mandelbrot fp32"), 91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_BLEND ("Intrinsics Blend"), 92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_BLUR_25G ("Intrinsics Blur 25 uchar"), 93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIBRANCE ("Vibrance"), 94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BW_FILTER ("BW Filter"), 95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams SHADOWS ("Shadows"), 96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONTRAST ("Contrast"), 97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams EXPOSURE ("Exposure"), 98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams WHITE_BALANCE ("White Balance"), 99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_CUBE ("Color Cube"), 100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_CUBE_3D_INTRINSIC ("Color Cube (3D LUT intrinsic)"), 101204009b9114b33f184d7178838861d2fa9c9f88cJason Sams USAGE_IO ("Usage io"), 1029ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams ARTISTIC_1("Artistic 1"), 103859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams HISTOGRAM ("Histogram"), 1040d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams MANDELBROT_DOUBLE ("Mandelbrot fp64"), 1050d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams RESIZE_BICUBIC_SCRIPT ("Resize BiCubic Script"), 106da68eff288c8b403bc41c1fa856ca09d73f35e2fMiao Wang RESIZE_BICUBIC_INTRINSIC ("Resize BiCubic Intrinsic"), 107da68eff288c8b403bc41c1fa856ca09d73f35e2fMiao Wang MIRROR ("Mirror Image"); 108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final String name; 110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TestName(String s) { 112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams name = s; 113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // return quoted string as displayed test name 116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public String toString() { 117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return name; 118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapOut; 122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mSpinner; 124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar1; 125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar2; 126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar3; 127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar4; 128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar5; 129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText1; 130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText2; 131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText3; 132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText4; 133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText5; 134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mBenchmarkResult; 136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mTestSpinner; 137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ImageView mDisplayView; 139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 140572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private boolean mDoingBenchmark; 141572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TestBase mTest; 143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private int mRunCount; 144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void updateDisplay() { 146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mHandler.sendMessage(Message.obtain()); 147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Handler mHandler = new Handler() { 150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // Allow the filter to complete without blocking the UI 151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // thread. When the message arrives that the op is complete 152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // we will either mark completion or start a new filter if 153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // more work is ready. Either way, display the result. 154572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void handleMessage(Message msg) { 156572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams boolean doTest = false; 157572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 158572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRS == null) { 159572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return; 160572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 161572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.updateBitmap(mBitmapOut); 162572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView.invalidate(); 163572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount > 0) { 164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount--; 165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount > 0) { 166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams doTest = true; 167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (doTest) { 171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTestSendMessage(); 172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 178572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 179572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (fromUser) { 180572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 181572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (seekBar == mBar1) { 182572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar1Changed(progress); 183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar2) { 184572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar2Changed(progress); 185572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar3) { 186572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar3Changed(progress); 187572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar4) { 188572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar4Changed(progress); 189572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar5) { 190572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar5Changed(progress); 191572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 192572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 193572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams boolean doTest = false; 194572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 195572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount == 0) { 196572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams doTest = true; 197572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount = 1; 198572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else { 199572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount = 2; 200572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 201572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 202572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (doTest) { 203572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTestSendMessage(); 204572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 205572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 206572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 207572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 208572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStartTrackingTouch(SeekBar seekBar) { 209572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 210572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 211572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStopTrackingTouch(SeekBar seekBar) { 212572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 213572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 214572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void setupBars() { 215572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner.setVisibility(View.VISIBLE); 216572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onSpinner1Setup(mSpinner); 217572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 218572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setVisibility(View.VISIBLE); 219572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1.setVisibility(View.VISIBLE); 220572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar1Setup(mBar1, mText1); 221572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 222572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setVisibility(View.VISIBLE); 223572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2.setVisibility(View.VISIBLE); 224572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar2Setup(mBar2, mText2); 225572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 226572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setVisibility(View.VISIBLE); 227572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3.setVisibility(View.VISIBLE); 228572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar3Setup(mBar3, mText3); 229572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 230572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setVisibility(View.VISIBLE); 231572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4.setVisibility(View.VISIBLE); 232572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar4Setup(mBar4, mText4); 233572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 234572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setVisibility(View.VISIBLE); 235572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5.setVisibility(View.VISIBLE); 236572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar5Setup(mBar5, mText5); 237572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 238572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 239572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 240572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void changeTest(TestName testName) { 241572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTest != null) { 242572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.destroy(); 243572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 244572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams switch(testName) { 245572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC3_RELAXED: 246572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(false, false); 247572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 248572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC4_RELAXED: 249572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(false, true); 250572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 251572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC3_FULL: 252572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(true, false); 253572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 254572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC4_FULL: 255572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(true, true); 256572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 257572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case BLUR_RADIUS_25: 258572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25(false); 259572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 260572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSIC_BLUE_RADIUS_25: 261572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25(true); 262572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 263572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GREYSCALE: 264572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Greyscale(); 265572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 266572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GRAIN: 267572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Grain(); 268572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 269572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_FULL: 270572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(false, false); 271572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 272572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_RELAXED: 273572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(false, true); 274572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 275572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_APPROXIMATE_FULL: 276572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(true, false); 277572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 278572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_APPROXIMATE_RELAXED: 279572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(true, true); 280572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 281572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_FULL: 282572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(false, false); 283572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 284572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_RELAXED: 285572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(false, true); 286572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 287572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_APPROXIMATE_FULL: 288572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(true, false); 289572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 290572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_APPROXIMATE_RELAXED: 291572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(true, true); 292572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 293572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GROUP_TEST_EMULATED: 294572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new GroupTest(false); 295572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 296572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GROUP_TEST_NATIVE: 297572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new GroupTest(true); 298572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 299572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONVOLVE_3X3: 300572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve3x3(false); 301572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 302572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_CONVOLVE_3X3: 303572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve3x3(true); 304572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 305572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_MATRIX: 306572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(false, false); 307572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 308572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_COLOR_MATRIX: 309572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(true, false); 310572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 311572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_COLOR_MATRIX_GREY: 312572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(true, true); 313572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 314572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COPY: 315572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Copy(); 316572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 317572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CROSS_PROCESS_USING_LUT: 318572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new CrossProcess(); 319572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 320572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONVOLVE_5X5: 321572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve5x5(false); 322572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 323572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_CONVOLVE_5X5: 324572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve5x5(true); 325572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 326859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams case MANDELBROT_FLOAT: 327859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams mTest = new Mandelbrot(false); 328572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 329572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_BLEND: 330572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blend(); 331572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 332572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_BLUR_25G: 333572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25G(); 334572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 335572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIBRANCE: 336572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vibrance(); 337572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 338572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case BW_FILTER: 339572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new BWFilter(); 340572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 341572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case SHADOWS: 342572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Shadows(); 343572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 344572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONTRAST: 345572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Contrast(); 346572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 347572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case EXPOSURE: 348572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Exposure(); 349572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 350572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case WHITE_BALANCE: 351572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new WhiteBalance(); 352572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 353572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_CUBE: 354572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorCube(false); 355572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 356572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_CUBE_3D_INTRINSIC: 357572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorCube(true); 358572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 359572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case USAGE_IO: 360572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new UsageIO(); 361572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 3629ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams case ARTISTIC_1: 3639ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams mTest = new Artistic1(); 3649ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams break; 365204009b9114b33f184d7178838861d2fa9c9f88cJason Sams case HISTOGRAM: 366204009b9114b33f184d7178838861d2fa9c9f88cJason Sams mTest = new Histogram(); 367204009b9114b33f184d7178838861d2fa9c9f88cJason Sams break; 368859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams case MANDELBROT_DOUBLE: 369859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams mTest = new Mandelbrot(true); 370859c4817355fcb86ea3aa103d1d1c5fa12ce81faJason Sams break; 3710d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams case RESIZE_BICUBIC_SCRIPT: 3720d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams mTest = new Resize(false); 3730d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams break; 3740d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams case RESIZE_BICUBIC_INTRINSIC: 3750d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams mTest = new Resize(true); 3760d6043caef208ee6c661eb17bcb376abfe90cd48Jason Sams break; 377da68eff288c8b403bc41c1fa856ca09d73f35e2fMiao Wang case MIRROR: 378da68eff288c8b403bc41c1fa856ca09d73f35e2fMiao Wang mTest = new Mirror(); 379da68eff288c8b403bc41c1fa856ca09d73f35e2fMiao Wang break; 380572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 381572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 382da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mTest.createBaseTest(this); 383572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setupBars(); 384572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 385572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 386572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams updateDisplay(); 387572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: not run"); 388572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 389572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 390572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void setupTests() { 391572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner.setAdapter(new ArrayAdapter<TestName>( 392572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams this, R.layout.spinner_layout, TestName.values())); 393572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 394572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 395572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private AdapterView.OnItemSelectedListener mTestSpinnerListener = 396572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams new AdapterView.OnItemSelectedListener() { 397572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 398572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.values()[pos]); 399572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 400572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 401572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onNothingSelected(AdapterView parent) { 402572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 403572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 404572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 405572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 406572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void init() { 407da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mRS = RenderScript.create(this); 408da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mInPixelsAllocation = Allocation.createFromBitmapResource( 409da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mRS, getResources(), R.drawable.img1600x1067); 410da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mInPixelsAllocation2 = Allocation.createFromBitmapResource( 411da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mRS, getResources(), R.drawable.img1600x1067b); 412da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mBitmapOut = Bitmap.createBitmap(mInPixelsAllocation.getType().getX(), 413da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mInPixelsAllocation.getType().getY(), 414da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams Bitmap.Config.ARGB_8888); 415fcedeb0887ed1dd9213e881fe955808e4c0fcabfJason Sams mBitmapOut.setHasAlpha(false); 416da26caa6eecf945ddcb4f6d65b250cbd5ba3a7fdJason Sams mOutPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapOut); 417572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 418572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView = (ImageView) findViewById(R.id.display); 419572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView.setImageBitmap(mBitmapOut); 420572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 421572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner = (Spinner) findViewById(R.id.spinner1); 422572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 423572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1 = (SeekBar) findViewById(R.id.slider1); 424572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2 = (SeekBar) findViewById(R.id.slider2); 425572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3 = (SeekBar) findViewById(R.id.slider3); 426572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4 = (SeekBar) findViewById(R.id.slider4); 427572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5 = (SeekBar) findViewById(R.id.slider5); 428572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 429572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setOnSeekBarChangeListener(this); 430572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setOnSeekBarChangeListener(this); 431572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setOnSeekBarChangeListener(this); 432572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setOnSeekBarChangeListener(this); 433572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setOnSeekBarChangeListener(this); 434572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 435572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1 = (TextView) findViewById(R.id.slider1Text); 436572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2 = (TextView) findViewById(R.id.slider2Text); 437572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3 = (TextView) findViewById(R.id.slider3Text); 438572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4 = (TextView) findViewById(R.id.slider4Text); 439572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5 = (TextView) findViewById(R.id.slider5Text); 440572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 441572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner = (Spinner) findViewById(R.id.filterselection); 442572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner.setOnItemSelectedListener(mTestSpinnerListener); 443572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 444572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText); 445572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: not run"); 446572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 447572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setupTests(); 448572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.LEVELS_VEC3_RELAXED); 449572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 450572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 451572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void cleanup() { 452572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 453572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams RenderScript rs = mRS; 454572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = null; 455572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams while(mDoingBenchmark) { 456572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 457572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Thread.sleep(1, 0); 458572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } catch(InterruptedException e) { 459572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 460572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 461572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 462572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rs.destroy(); 463572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 464572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 465572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mInPixelsAllocation = null; 466572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mInPixelsAllocation2 = null; 467572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mOutPixelsAllocation = null; 468572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapOut = null; 469572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 470572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 471572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 472572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onCreate(Bundle savedInstanceState) { 473572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onCreate(savedInstanceState); 474572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setContentView(R.layout.main); 475572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 476572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams init(); 477572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 478572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 479572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 480572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onPause() { 481572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onPause(); 482572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 483572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams cleanup(); 484572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 485572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 486572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 487572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 488572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onResume() { 489572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onResume(); 490572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 49105b269323e6f28f244d74b00cd63d81d9f8a1db4Jason Sams if (null == mRS) { 49205b269323e6f28f244d74b00cd63d81d9f8a1db4Jason Sams init(); 49305b269323e6f28f244d74b00cd63d81d9f8a1db4Jason Sams } 494572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 495572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 496572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // button hook 497572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void benchmark(View v) { 498572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float t = getBenchmark(); 499572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //long javaTime = javaFilter(); 500572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //mBenchmarkResult.setText("RS: " + t + " ms Java: " + javaTime + " ms"); 501572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: " + t + " ms"); 502572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "getBenchmark: Renderscript frame time core ms " + t); 503572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 504572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 505572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void benchmark_all(View v) { 506572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // write result into a file 507572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams File externalStorage = Environment.getExternalStorageDirectory(); 508572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!externalStorage.canWrite()) { 509572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "sdcard is not writable"); 510572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return; 511572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 512572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams File resultFile = new File(externalStorage, RESULT_FILE); 513572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams resultFile.setWritable(true, false); 514572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 515572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 516572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 517572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (TestName tn: TestName.values()) { 518572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(tn); 519572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float t = getBenchmark(); 520572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams String s = new String("" + tn.toString() + ", " + t); 521572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rsWriter.write(s + "\n"); 522572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Test " + s + "ms\n"); 523572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 524572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rsWriter.close(); 525572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } catch (IOException e) { 526572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Unable to write result file " + e.getMessage()); 527572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 528572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.LEVELS_VEC3_RELAXED); 529572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 530572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 531572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 532572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 533572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // For benchmark test 534572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public float getBenchmark() { 535572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRS == null) { 536572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return 0; 537572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 538572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDoingBenchmark = true; 539572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 540572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.setupBenchmark(); 541572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams long result = 0; 542572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 543572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //Log.v(TAG, "Warming"); 544572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams long t = java.lang.System.currentTimeMillis() + 250; 545572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams do { 546572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 547572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.finish(); 548572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } while (t > java.lang.System.currentTimeMillis()); 549572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 550572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //Log.v(TAG, "Benchmarking"); 551572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int ct = 0; 552572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = java.lang.System.currentTimeMillis(); 553572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams do { 554572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 555572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.finish(); 556572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ct++; 557572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } while ((t+1000) > java.lang.System.currentTimeMillis()); 558572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = java.lang.System.currentTimeMillis() - t; 559572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float ft = (float)t; 560572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ft /= ct; 561572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 562572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.exitBenchmark(); 563572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDoingBenchmark = false; 564dbad8eb5a8bb16488351c5236974812d282b7b82Jason Sams 565572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return ft; 566572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 567572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 568