ImageProcessingActivityJB.java revision bde1a28e6652f25e4f74f018cb7d1dcba65a51e4
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.imagejb; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.app.Activity; 20bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.content.Intent; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Bundle; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Handler; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Message; 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.BitmapFactory; 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Bitmap; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Canvas; 27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.SurfaceView; 28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.AdapterView; 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ArrayAdapter; 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ImageView; 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.SeekBar; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.Spinner; 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.TextView; 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.View; 35bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.view.TextureView; 36bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.view.Surface; 37bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.graphics.SurfaceTexture; 38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log; 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.ScriptC; 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.RenderScript; 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Type; 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Allocation; 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element; 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Script; 45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Environment; 47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.BufferedWriter; 48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.File; 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.FileWriter; 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.IOException; 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class ImageProcessingActivityJB extends Activity 53bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams implements SeekBar.OnSeekBarChangeListener, 54bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams TextureView.SurfaceTextureListener { 55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final String TAG = "Img"; 56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public final String RESULT_FILE = "image_processing_result.csv"; 57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapIn; 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Bitmap mBitmapIn2; 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mSpinner; 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar1; 63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar2; 64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar3; 65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar4; 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar5; 67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText1; 68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText2; 69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText3; 70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText4; 71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText5; 72bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private TextureView mDisplayView; 73bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 74bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private int mTestList[]; 75bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private float mTestResults[]; 76bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 77bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mToggleIO; 78bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mToggleDVFS; 79bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mToggleLong; 80bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mTogglePause; 81bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 82bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 83bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams ///////////////////////////////////////////////////////////////////////// 84bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 85bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams class Processor extends Thread { 86bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams RenderScript mRS; 87bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation mInPixelsAllocation; 88bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation mInPixelsAllocation2; 89bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation mOutPixelsAllocation; 90bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 91bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private Surface mOutSurface; 92bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private float mLastResult; 93bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mRun = true; 94bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private int mOp = 0; 95bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mDoingBenchmark; 96bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private TestBase mTest; 97bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private TextureView mDisplayView; 98bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 99bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mBenchmarkMode; 100bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 101bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 102bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Processor(RenderScript rs, TextureView v, boolean benchmarkMode) { 103bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mRS = rs; 104bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDisplayView = v; 105bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn); 106bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation2 = Allocation.createFromBitmap(mRS, mBitmapIn2); 107bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutPixelsAllocation = Allocation.createTyped(mRS, mInPixelsAllocation.getType(), 108bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation.MipmapControl.MIPMAP_NONE, 109bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation.USAGE_SCRIPT | 110bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Allocation.USAGE_IO_OUTPUT); 111bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mBenchmarkMode = benchmarkMode; 112bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams start(); 113bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 115bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private float getBenchmark() { 116bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDoingBenchmark = true; 117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 118bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.setupBenchmark(); 119bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long result = 0; 120bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long runtime = 1000; 121bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mToggleLong) { 122bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams runtime = 10000; 123bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 125bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mToggleDVFS) { 126bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDvfsWar.go(); 127bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 129bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Log.v("rs", "Warming"); 130bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long t = java.lang.System.currentTimeMillis() + 250; 131bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams do { 132bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.runTest(); 133bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.finish(); 134bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } while (t > java.lang.System.currentTimeMillis()); 135bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //mHandler.sendMessage(Message.obtain()); 136bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 137bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Log.v("rs", "Benchmarking"); 138bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams int ct = 0; 139bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t = java.lang.System.currentTimeMillis(); 140bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams do { 141bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.runTest(); 142bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.finish(); 143bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams ct++; 144bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } while ((t + runtime) > java.lang.System.currentTimeMillis()); 145bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t = java.lang.System.currentTimeMillis() - t; 146bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams float ft = (float)t; 147bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams ft /= ct; 148bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 149bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.exitBenchmark(); 150bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDoingBenchmark = false; 151bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 152bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams android.util.Log.v("rs", "bench " + ft); 153bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return ft; 154bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 156bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private Handler mHandler = new Handler() { 157bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // Allow the filter to complete without blocking the UI 158bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // thread. When the message arrives that the op is complete 159bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // we will either mark completion or start a new filter if 160bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // more work is ready. Either way, display the result. 161bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 162bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void handleMessage(Message msg) { 163bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 164bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mRS == null || mOutPixelsAllocation == null) { 165bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return; 166bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 167bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutPixelsAllocation.ioSend(); 168bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDisplayView.invalidate(); 169bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //mTest.runTestSendMessage(); 170bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 171bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 172bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams }; 173bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 174bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void run() { 175bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Surface lastSurface = null; 176bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams while (mRun) { 177bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 178bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams try { 179bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams this.wait(); 180bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } catch(InterruptedException e) { 181bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 182bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (!mRun) return; 183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 184bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if ((mOutSurface == null) || (mOutPixelsAllocation == null)) { 185bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams continue; 186bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 187bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 188bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (lastSurface != mOutSurface) { 189bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutPixelsAllocation.setSurface(mOutSurface); 190bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams lastSurface = mOutSurface; 191bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 192bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 193bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 194bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mBenchmarkMode) { 195bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int ct=0; ct < mTestList.length; ct++) { 196bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mRS.finish(); 197bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 198bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams try { 199bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams sleep(1000); 200bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } catch(InterruptedException e) { 201bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 202bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 203bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mTest != null) { 204bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest.destroy(); 205bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 206bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 207bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTest = changeTest(mTestList[ct]); 208bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mTogglePause) { 209bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams try { 210bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams sleep(10000); 211bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } catch(InterruptedException e) { 212bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 213bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 214bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 215bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestResults[ct] = getBenchmark(); 216bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mHandler.sendMessage(Message.obtain()); 217bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 218bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams onBenchmarkFinish(); 219bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 220bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 221bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 222bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 223572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 224bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void update() { 225572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams synchronized(this) { 226bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mOp == 0) { 227bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOp = 2; 228bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 229bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams notifyAll(); 230bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 231bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 232bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 233bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void setSurface(Surface s) { 234bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 235bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutSurface = s; 236bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams notifyAll(); 237bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 238bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //update(); 239bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 240bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 241bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void exit() { 242bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mRun = false; 243bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 244bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 245bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams notifyAll(); 246bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 247bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 248bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams try { 249bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams this.join(); 250bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } catch(InterruptedException e) { 251bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 252bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 253bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation.destroy(); 254bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation2.destroy(); 255bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutPixelsAllocation.destroy(); 256bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mRS.destroy(); 257bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 258bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation = null; 259bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mInPixelsAllocation2 = null; 260bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mOutPixelsAllocation = null; 261bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mRS = null; 262bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 263bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 264bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 265bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams /////////////////////////////////////////////////////////////////////////////////////// 266bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 267bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams static class DVFSWorkaround { 268bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams static class spinner extends Thread { 269bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams boolean mRun = true; 270bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long mNextSleep; 271bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 272bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams spinner() { 273bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams setPriority(MIN_PRIORITY); 274bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams start(); 275bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 276bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 277bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void run() { 278bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams while (mRun) { 279bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Thread.yield(); 280bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 281bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long t = java.lang.System.currentTimeMillis(); 282bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (t > mNextSleep) { 283bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams try { 284bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams this.wait(); 285bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } catch(InterruptedException e) { 286bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 287bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 288572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 289572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 290572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 291bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 292bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void go(long t) { 293bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 294bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mNextSleep = t; 295bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams notifyAll(); 296bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 297bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 298bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 299bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 300bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams spinner s1; 301bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams DVFSWorkaround() { 302bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams s1 = new spinner(); 303bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 304bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 305bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams void go() { 306bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams long t = java.lang.System.currentTimeMillis() + 2000; 307bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams s1.go(t); 308bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 309bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 310bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams void destroy() { 311bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 312bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams s1.mRun = false; 313bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams notifyAll(); 314572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 315572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 316bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 317bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams DVFSWorkaround mDvfsWar = new DVFSWorkaround(); 318bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 319bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams /////////////////////////////////////////////////////////// 320572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 321bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 322bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private boolean mDoingBenchmark; 323bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public Processor mProcessor; 324bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 325bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 326bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private Handler mHandler = new Handler() { 327bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 328bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void handleMessage(Message msg) { 329bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDisplayView.invalidate(); 330bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 331572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 332572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 333bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void updateDisplay() { 334bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mHandler.sendMessage(Message.obtain()); 335bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //mProcessor.update(); 336bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 337bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 338bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams TestBase changeTest(int id) { 339bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams IPTestListJB.TestName t = IPTestListJB.TestName.values()[id]; 340bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams TestBase tb = IPTestListJB.newTest(t); 341bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams tb.createBaseTest(this); 342bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //setupBars(tb); 343bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return tb; 344bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 345bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 346572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 347572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (fromUser) { 348572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (seekBar == mBar1) { 349bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.mTest.onBar1Changed(progress); 350572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar2) { 351bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.mTest.onBar2Changed(progress); 352572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar3) { 353bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.mTest.onBar3Changed(progress); 354572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar4) { 355bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.mTest.onBar4Changed(progress); 356572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar5) { 357bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.mTest.onBar5Changed(progress); 358572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 359bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.update(); 360572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 361572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 362572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 363572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStartTrackingTouch(SeekBar seekBar) { 364572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 365572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 366572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStopTrackingTouch(SeekBar seekBar) { 367572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 368572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 369bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams void setupBars(TestBase t) { 370572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner.setVisibility(View.VISIBLE); 371bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onSpinner1Setup(mSpinner); 372572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 373572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setVisibility(View.VISIBLE); 374572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1.setVisibility(View.VISIBLE); 375bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onBar1Setup(mBar1, mText1); 376572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 377572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setVisibility(View.VISIBLE); 378572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2.setVisibility(View.VISIBLE); 379bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onBar2Setup(mBar2, mText2); 380572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 381572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setVisibility(View.VISIBLE); 382572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3.setVisibility(View.VISIBLE); 383bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onBar3Setup(mBar3, mText3); 384572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 385572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setVisibility(View.VISIBLE); 386572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4.setVisibility(View.VISIBLE); 387bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onBar4Setup(mBar4, mText4); 388572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 389572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setVisibility(View.VISIBLE); 390572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5.setVisibility(View.VISIBLE); 391bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams t.onBar5Setup(mBar5, mText5); 392572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 393572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 394572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 395bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams void cleanup() { 396bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams synchronized(this) { 397bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.exit(); 398572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 399572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 400bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mBitmapIn = null; 401bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mBitmapIn2 = null; 402572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 403572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 404572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 405572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onCreate(Bundle savedInstanceState) { 406572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onCreate(savedInstanceState); 407572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setContentView(R.layout.main); 408572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 409572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn = loadBitmap(R.drawable.img1600x1067); 410572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBitmapIn2 = loadBitmap(R.drawable.img1600x1067b); 411572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 412bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDisplayView = (TextureView) findViewById(R.id.display); 413572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 414572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner = (Spinner) findViewById(R.id.spinner1); 415572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 416572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1 = (SeekBar) findViewById(R.id.slider1); 417572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2 = (SeekBar) findViewById(R.id.slider2); 418572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3 = (SeekBar) findViewById(R.id.slider3); 419572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4 = (SeekBar) findViewById(R.id.slider4); 420572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5 = (SeekBar) findViewById(R.id.slider5); 421572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 422572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setOnSeekBarChangeListener(this); 423572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setOnSeekBarChangeListener(this); 424572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setOnSeekBarChangeListener(this); 425572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setOnSeekBarChangeListener(this); 426572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setOnSeekBarChangeListener(this); 427572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 428572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1 = (TextView) findViewById(R.id.slider1Text); 429572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2 = (TextView) findViewById(R.id.slider2Text); 430572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3 = (TextView) findViewById(R.id.slider3Text); 431572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4 = (TextView) findViewById(R.id.slider4Text); 432572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5 = (TextView) findViewById(R.id.slider5Text); 433bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 434572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 435bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 436bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onPause() { 437bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onPause(); 438572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 439bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams cleanup(); 440bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 441572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 442bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onBenchmarkFinish() { 443bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Intent intent = new Intent(); 444bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams intent.putExtra("tests", mTestList); 445bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams intent.putExtra("results", mTestResults); 446bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams setResult(RESULT_OK, intent); 447bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams finish(); 448bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 449572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 450bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 451bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onResume() { 452bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onResume(); 453bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams Intent i = getIntent(); 454bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestList = i.getIntArrayExtra("tests"); 455572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 456bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mToggleIO = i.getBooleanExtra("enable io", true); 457bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mToggleDVFS = i.getBooleanExtra("enable dvfs", true); 458bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mToggleLong = i.getBooleanExtra("enable long", false); 459bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTogglePause = i.getBooleanExtra("enable pause", false); 460572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 461bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestResults = new float[mTestList.length]; 462bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 463bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor = new Processor(RenderScript.create(this), mDisplayView, true); 464bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mDisplayView.setSurfaceTextureListener(this); 465572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 466572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 467bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onDestroy() { 468bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onDestroy(); 469bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 470572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 471572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Bitmap loadBitmap(int resource) { 472572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams final BitmapFactory.Options options = new BitmapFactory.Options(); 473572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams options.inPreferredConfig = Bitmap.Config.ARGB_8888; 474572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return BitmapFactory.decodeResource(getResources(), resource, options); 475572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 476572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 477bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 478bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 479bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 480bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 481bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.setSurface(new Surface(surface)); 482572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 483572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 484bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 485bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 486bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.setSurface(new Surface(surface)); 487bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 488bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 489bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 490bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 491bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mProcessor.setSurface(null); 492bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return true; 493572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 494572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 495bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 496bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onSurfaceTextureUpdated(SurfaceTexture surface) { 497572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 498572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 499