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 static class DVFSWorkaround { 5926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams static class spinner extends Thread { 6026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams boolean mRun = true; 6126bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams long mNextSleep; 6226bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 6326bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams spinner() { 6426bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams setPriority(MIN_PRIORITY); 6526bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams start(); 6626bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 6726bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 6826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams public void run() { 6926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams while (mRun) { 7026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams Thread.yield(); 7126bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams synchronized(this) { 7226bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams long t = java.lang.System.currentTimeMillis(); 7326bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams if (t > mNextSleep) { 7426bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams try { 7526bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams this.wait(); 7626bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } catch(InterruptedException e) { 7726bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 7826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 7926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 8026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 8126bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 8226bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 8326bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams public void go(long t) { 8426bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams synchronized(this) { 8526bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams mNextSleep = t; 8626bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams notifyAll(); 8726bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 8826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 8926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 9026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 9126bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams spinner s1; 9226bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams DVFSWorkaround() { 9326bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams s1 = new spinner(); 9426bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 9526bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 9626bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams void go() { 9726bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams long t = java.lang.System.currentTimeMillis() + 2000; 9826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams s1.go(t); 9926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 10026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 10126bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams void destroy() { 10226bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams synchronized(this) { 10326bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams s1.mRun = false; 10426bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams notifyAll(); 10526bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 10626bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 10726bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams } 10826bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams DVFSWorkaround mDvfsWar = new DVFSWorkaround(); 10926bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 11026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams 111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /** 112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Define enum type for test names 113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public enum TestName { 115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // totally there are 38 test cases 116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC3_RELAXED ("Levels Vec3 Relaxed"), 117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC4_RELAXED ("Levels Vec4 Relaxed"), 118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC3_FULL ("Levels Vec3 Full"), 119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams LEVELS_VEC4_FULL ("Levels Vec4 Full"), 120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BLUR_RADIUS_25 ("Blur radius 25"), 121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSIC_BLUE_RADIUS_25 ("Intrinsic Blur radius 25"), 122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GREYSCALE ("Greyscale"), 123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GRAIN ("Grain"), 124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_FULL ("Fisheye Full"), 125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_RELAXED ("Fisheye Relaxed"), 126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_APPROXIMATE_FULL ("Fisheye Approximate Full"), 127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams FISHEYE_APPROXIMATE_RELAXED ("Fisheye Approximate Relaxed"), 128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_FULL ("Vignette Full"), 129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_RELAXED ("Vignette Relaxed"), 130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_APPROXIMATE_FULL ("Vignette Approximate Full"), 131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIGNETTE_APPROXIMATE_RELAXED ("Vignette Approximate Relaxed"), 132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GROUP_TEST_EMULATED ("Group Test (emulated)"), 133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams GROUP_TEST_NATIVE ("Group Test (native)"), 134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONVOLVE_3X3 ("Convolve 3x3"), 135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_CONVOLVE_3X3 ("Intrinsics Convolve 3x3"), 136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_MATRIX ("ColorMatrix"), 137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_COLOR_MATRIX ("Intrinsics ColorMatrix"), 138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_COLOR_MATRIX_GREY ("Intrinsics ColorMatrix Grey"), 139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COPY ("Copy"), 140572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CROSS_PROCESS_USING_LUT ("CrossProcess (using LUT)"), 141572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONVOLVE_5X5 ("Convolve 5x5"), 142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_CONVOLVE_5X5 ("Intrinsics Convolve 5x5"), 143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams MANDELBROT ("Mandelbrot"), 144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_BLEND ("Intrinsics Blend"), 145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams INTRINSICS_BLUR_25G ("Intrinsics Blur 25 uchar"), 146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams VIBRANCE ("Vibrance"), 147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BW_FILTER ("BW Filter"), 148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams SHADOWS ("Shadows"), 149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams CONTRAST ("Contrast"), 150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams EXPOSURE ("Exposure"), 151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams WHITE_BALANCE ("White Balance"), 152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_CUBE ("Color Cube"), 153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams COLOR_CUBE_3D_INTRINSIC ("Color Cube (3D LUT intrinsic)"), 154204009b9114b33f184d7178838861d2fa9c9f88cJason Sams USAGE_IO ("Usage io"), 1559ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams ARTISTIC_1("Artistic 1"), 156204009b9114b33f184d7178838861d2fa9c9f88cJason Sams HISTOGRAM ("Histogram"); 157572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 158572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 159572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final String name; 160572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 161572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TestName(String s) { 162572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams name = s; 163572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // return quoted string as displayed test name 166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public String toString() { 167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return name; 168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapIn; 172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapIn2; 173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapOut; 174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mSpinner; 176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar1; 177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar2; 178572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar3; 179572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar4; 180572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar5; 181572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText1; 182572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText2; 183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText3; 184572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText4; 185572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText5; 186572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 187572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private float mSaturation = 1.0f; 188572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 189572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mBenchmarkResult; 190572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mTestSpinner; 191572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 192572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SurfaceView mSurfaceView; 193572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ImageView mDisplayView; 194572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 195572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private boolean mDoingBenchmark; 196572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 197572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TestBase mTest; 198572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private int mRunCount; 199572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 200572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void updateDisplay() { 201572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mHandler.sendMessage(Message.obtain()); 202572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 203572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 204572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Handler mHandler = new Handler() { 205572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // Allow the filter to complete without blocking the UI 206572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // thread. When the message arrives that the op is complete 207572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // we will either mark completion or start a new filter if 208572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // more work is ready. Either way, display the result. 209572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 210572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void handleMessage(Message msg) { 211572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams boolean doTest = false; 212572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 213572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRS == null) { 214572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return; 215572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 216572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.updateBitmap(mBitmapOut); 217572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView.invalidate(); 218572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount > 0) { 219572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount--; 220572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount > 0) { 221572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams doTest = true; 222572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 223572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 224572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 225572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (doTest) { 226572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTestSendMessage(); 227572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 228572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 229572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 230572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 231572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 232572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 233572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 234572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (fromUser) { 235572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 236572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (seekBar == mBar1) { 237572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar1Changed(progress); 238572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar2) { 239572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar2Changed(progress); 240572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar3) { 241572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar3Changed(progress); 242572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar4) { 243572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar4Changed(progress); 244572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar5) { 245572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar5Changed(progress); 246572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 247572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 248572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams boolean doTest = false; 249572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 250572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRunCount == 0) { 251572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams doTest = true; 252572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount = 1; 253572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else { 254572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRunCount = 2; 255572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 256572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 257572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (doTest) { 258572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTestSendMessage(); 259572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 260572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 261572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 262572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 263572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStartTrackingTouch(SeekBar seekBar) { 264572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 265572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 266572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStopTrackingTouch(SeekBar seekBar) { 267572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 268572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 269572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void setupBars() { 270572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner.setVisibility(View.VISIBLE); 271572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onSpinner1Setup(mSpinner); 272572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 273572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setVisibility(View.VISIBLE); 274572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1.setVisibility(View.VISIBLE); 275572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar1Setup(mBar1, mText1); 276572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 277572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setVisibility(View.VISIBLE); 278572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2.setVisibility(View.VISIBLE); 279572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar2Setup(mBar2, mText2); 280572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 281572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setVisibility(View.VISIBLE); 282572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3.setVisibility(View.VISIBLE); 283572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar3Setup(mBar3, mText3); 284572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 285572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setVisibility(View.VISIBLE); 286572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4.setVisibility(View.VISIBLE); 287572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar4Setup(mBar4, mText4); 288572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 289572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setVisibility(View.VISIBLE); 290572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5.setVisibility(View.VISIBLE); 291572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.onBar5Setup(mBar5, mText5); 292572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 293572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 294572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 295572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void changeTest(TestName testName) { 296572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTest != null) { 297572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.destroy(); 298572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 299572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams switch(testName) { 300572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC3_RELAXED: 301572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(false, false); 302572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 303572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC4_RELAXED: 304572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(false, true); 305572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 306572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC3_FULL: 307572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(true, false); 308572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 309572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case LEVELS_VEC4_FULL: 310572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new LevelsV4(true, true); 311572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 312572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case BLUR_RADIUS_25: 313572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25(false); 314572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 315572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSIC_BLUE_RADIUS_25: 316572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25(true); 317572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 318572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GREYSCALE: 319572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Greyscale(); 320572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 321572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GRAIN: 322572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Grain(); 323572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 324572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_FULL: 325572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(false, false); 326572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 327572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_RELAXED: 328572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(false, true); 329572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 330572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_APPROXIMATE_FULL: 331572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(true, false); 332572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 333572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case FISHEYE_APPROXIMATE_RELAXED: 334572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Fisheye(true, true); 335572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 336572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_FULL: 337572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(false, false); 338572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 339572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_RELAXED: 340572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(false, true); 341572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 342572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_APPROXIMATE_FULL: 343572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(true, false); 344572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 345572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIGNETTE_APPROXIMATE_RELAXED: 346572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vignette(true, true); 347572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 348572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GROUP_TEST_EMULATED: 349572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new GroupTest(false); 350572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 351572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case GROUP_TEST_NATIVE: 352572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new GroupTest(true); 353572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 354572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONVOLVE_3X3: 355572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve3x3(false); 356572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 357572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_CONVOLVE_3X3: 358572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve3x3(true); 359572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 360572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_MATRIX: 361572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(false, false); 362572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 363572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_COLOR_MATRIX: 364572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(true, false); 365572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 366572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_COLOR_MATRIX_GREY: 367572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorMatrix(true, true); 368572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 369572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COPY: 370572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Copy(); 371572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 372572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CROSS_PROCESS_USING_LUT: 373572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new CrossProcess(); 374572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 375572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONVOLVE_5X5: 376572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve5x5(false); 377572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 378572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_CONVOLVE_5X5: 379572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Convolve5x5(true); 380572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 381572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case MANDELBROT: 382572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Mandelbrot(); 383572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 384572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_BLEND: 385572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blend(); 386572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 387572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case INTRINSICS_BLUR_25G: 388572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Blur25G(); 389572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 390572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case VIBRANCE: 391572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Vibrance(); 392572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 393572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case BW_FILTER: 394572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new BWFilter(); 395572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 396572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case SHADOWS: 397572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Shadows(); 398572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 399572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case CONTRAST: 400572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Contrast(); 401572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 402572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case EXPOSURE: 403572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new Exposure(); 404572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 405572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case WHITE_BALANCE: 406572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new WhiteBalance(); 407572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 408572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_CUBE: 409572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorCube(false); 410572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 411572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case COLOR_CUBE_3D_INTRINSIC: 412572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new ColorCube(true); 413572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 414572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams case USAGE_IO: 415572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest = new UsageIO(); 416572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams break; 4179ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams case ARTISTIC_1: 4189ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams mTest = new Artistic1(); 4199ba9a663a00c15d584a0a292bf74e154804240b5Jason Sams break; 420204009b9114b33f184d7178838861d2fa9c9f88cJason Sams case HISTOGRAM: 421204009b9114b33f184d7178838861d2fa9c9f88cJason Sams mTest = new Histogram(); 422204009b9114b33f184d7178838861d2fa9c9f88cJason Sams break; 423572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 424572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 425572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.createBaseTest(this, mBitmapIn, mBitmapIn2, mBitmapOut); 426572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setupBars(); 427572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 428572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 429572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams updateDisplay(); 430572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: not run"); 431572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 432572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 433572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void setupTests() { 434572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner.setAdapter(new ArrayAdapter<TestName>( 435572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams this, R.layout.spinner_layout, TestName.values())); 436572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 437572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 438572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private AdapterView.OnItemSelectedListener mTestSpinnerListener = 439572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams new AdapterView.OnItemSelectedListener() { 440572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 441572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.values()[pos]); 442572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 443572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 444572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onNothingSelected(AdapterView parent) { 445572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 446572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 447572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 448572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 449572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void init() { 450572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn = loadBitmap(R.drawable.img1600x1067); 451572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn2 = loadBitmap(R.drawable.img1600x1067b); 452572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(), mBitmapIn.getHeight(), 453572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn.getConfig()); 454572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 455572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSurfaceView = (SurfaceView) findViewById(R.id.surface); 456572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 457572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView = (ImageView) findViewById(R.id.display); 458572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDisplayView.setImageBitmap(mBitmapOut); 459572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 460572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner = (Spinner) findViewById(R.id.spinner1); 461572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 462572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1 = (SeekBar) findViewById(R.id.slider1); 463572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2 = (SeekBar) findViewById(R.id.slider2); 464572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3 = (SeekBar) findViewById(R.id.slider3); 465572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4 = (SeekBar) findViewById(R.id.slider4); 466572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5 = (SeekBar) findViewById(R.id.slider5); 467572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 468572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setOnSeekBarChangeListener(this); 469572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setOnSeekBarChangeListener(this); 470572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setOnSeekBarChangeListener(this); 471572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setOnSeekBarChangeListener(this); 472572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setOnSeekBarChangeListener(this); 473572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 474572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1 = (TextView) findViewById(R.id.slider1Text); 475572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2 = (TextView) findViewById(R.id.slider2Text); 476572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3 = (TextView) findViewById(R.id.slider3Text); 477572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4 = (TextView) findViewById(R.id.slider4Text); 478572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5 = (TextView) findViewById(R.id.slider5Text); 479572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 480572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner = (Spinner) findViewById(R.id.filterselection); 481572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTestSpinner.setOnItemSelectedListener(mTestSpinnerListener); 482572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 483572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText); 484572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: not run"); 485572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 486572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 487572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = RenderScript.create(this); 48889e20d27effd875431087a9188b20386b9c5aff0Jason Sams mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn, 48989e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.MipmapControl.MIPMAP_NONE, 49089e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_SHARED | 49189e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_GRAPHICS_TEXTURE | 49289e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_SCRIPT); 49389e20d27effd875431087a9188b20386b9c5aff0Jason Sams mInPixelsAllocation2 = Allocation.createFromBitmap(mRS, mBitmapIn2, 49489e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.MipmapControl.MIPMAP_NONE, 49589e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_SHARED | 49689e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_GRAPHICS_TEXTURE | 49789e20d27effd875431087a9188b20386b9c5aff0Jason Sams Allocation.USAGE_SCRIPT); 498572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mOutPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapOut); 499572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 500572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 501572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setupTests(); 502572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.LEVELS_VEC3_RELAXED); 503572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 504572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 505572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams void cleanup() { 506572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 507572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams RenderScript rs = mRS; 508572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = null; 509572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams while(mDoingBenchmark) { 510572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 511572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Thread.sleep(1, 0); 512572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } catch(InterruptedException e) { 513572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 514572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 515572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 516572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rs.destroy(); 517572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 518572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 519572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mInPixelsAllocation = null; 520572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mInPixelsAllocation2 = null; 521572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mOutPixelsAllocation = null; 522572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn = null; 523572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn2 = null; 524572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapOut = null; 525572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 526572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 527572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 528572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onCreate(Bundle savedInstanceState) { 529572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onCreate(savedInstanceState); 530572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setContentView(R.layout.main); 531572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 532572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams init(); 533572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 534572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 535572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 536572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onPause() { 537572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onPause(); 538572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 539572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams cleanup(); 540572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 541572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 542572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 543572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 544572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onResume() { 545572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onResume(); 546572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 547572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams init(); 548572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 549572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 550572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Bitmap loadBitmap(int resource) { 551572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams final BitmapFactory.Options options = new BitmapFactory.Options(); 552572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams options.inPreferredConfig = Bitmap.Config.ARGB_8888; 553572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return BitmapFactory.decodeResource(getResources(), resource, options); 554572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 555572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 556572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // button hook 557572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void benchmark(View v) { 558572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float t = getBenchmark(); 559572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //long javaTime = javaFilter(); 560572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //mBenchmarkResult.setText("RS: " + t + " ms Java: " + javaTime + " ms"); 561572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBenchmarkResult.setText("Result: " + t + " ms"); 562572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "getBenchmark: Renderscript frame time core ms " + t); 563572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 564572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 565572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void benchmark_all(View v) { 566572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // write result into a file 567572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams File externalStorage = Environment.getExternalStorageDirectory(); 568572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!externalStorage.canWrite()) { 569572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "sdcard is not writable"); 570572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return; 571572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 572572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams File resultFile = new File(externalStorage, RESULT_FILE); 573572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams resultFile.setWritable(true, false); 574572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 575572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 576572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 577572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (TestName tn: TestName.values()) { 578572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(tn); 579572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float t = getBenchmark(); 580572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams String s = new String("" + tn.toString() + ", " + t); 581572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rsWriter.write(s + "\n"); 582572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Test " + s + "ms\n"); 583572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 584572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams rsWriter.close(); 585572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } catch (IOException e) { 586572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Log.v(TAG, "Unable to write result file " + e.getMessage()); 587572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 588572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams changeTest(TestName.LEVELS_VEC3_RELAXED); 589572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 590572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 591572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 592572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 593572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams // For benchmark test 594572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public float getBenchmark() { 595572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mRS == null) { 596572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return 0; 597572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 598572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDoingBenchmark = true; 599572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 60026bbf46db3c2f4eb752a0edfa722b354fce160ceJason Sams mDvfsWar.go(); 601572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.setupBenchmark(); 602572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams long result = 0; 603572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 604572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //Log.v(TAG, "Warming"); 605572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams long t = java.lang.System.currentTimeMillis() + 250; 606572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams do { 607572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 608572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.finish(); 609572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } while (t > java.lang.System.currentTimeMillis()); 610572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 611572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams //Log.v(TAG, "Benchmarking"); 612572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int ct = 0; 613572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = java.lang.System.currentTimeMillis(); 614572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams do { 615572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.runTest(); 616572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.finish(); 617572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ct++; 618572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } while ((t+1000) > java.lang.System.currentTimeMillis()); 619572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = java.lang.System.currentTimeMillis() - t; 620572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float ft = (float)t; 621572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ft /= ct; 622572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 623572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTest.exitBenchmark(); 624572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mDoingBenchmark = false; 625572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return ft; 626572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 627572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 628