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.image2; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.app.Activity; 206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.content.Intent; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Bundle; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.BitmapFactory; 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Bitmap; 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Canvas; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.support.v8.renderscript.*; 276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.os.Handler; 286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.os.Message; 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.AdapterView; 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ArrayAdapter; 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ImageView; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.SeekBar; 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.Spinner; 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.TextView; 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.View; 36382bae43c51c2f7224879172a6d8fab238434f04Miao Wangimport android.view.TextureView; 37382bae43c51c2f7224879172a6d8fab238434f04Miao Wangimport android.view.Surface; 38382bae43c51c2f7224879172a6d8fab238434f04Miao Wangimport android.graphics.SurfaceTexture; 396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.graphics.Point; 406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log; 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class ImageProcessingActivity2 extends Activity 45382bae43c51c2f7224879172a6d8fab238434f04Miao Wang implements SeekBar.OnSeekBarChangeListener, 46382bae43c51c2f7224879172a6d8fab238434f04Miao Wang TextureView.SurfaceTextureListener { 47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private final String TAG = "Img"; 48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Spinner mSpinner; 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar1; 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar2; 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar3; 53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar4; 54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private SeekBar mBar5; 556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mBars[] = new int[5]; 576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mBarsOld[] = new int[5]; 586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText1; 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText2; 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText3; 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText4; 63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private TextView mText5; 646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private ImageView mDisplayView; 65382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private SizedTV mDisplayViewIO; 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mTestList[]; 686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private float mTestResults[]; 69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mToggleLong; 716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mTogglePause; 726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mToggleAnimate; 736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mToggleDisplay; 74382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private boolean mToggleIO; 756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mBitmapWidth; 766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mBitmapHeight; 776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mDemoMode; 78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Updates pending is a counter of how many kernels have been 80f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // sent to RS for processing and are not yet started. 816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mUpdatesPending; 826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 83f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // This is used to count updates in the pipeline. It's 84f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // incremented when work is submitted to RS and decremented when we 85f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // receive the callback the kernel has finished. 866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mShowsPending; 876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 88f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private boolean mTestNameChanged = true; 89f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private String mTestName; 906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 91382bae43c51c2f7224879172a6d8fab238434f04Miao Wang static public class SizedTV extends TextureView { 92382bae43c51c2f7224879172a6d8fab238434f04Miao Wang int mWidth; 93382bae43c51c2f7224879172a6d8fab238434f04Miao Wang int mHeight; 94382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 95382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public SizedTV(android.content.Context c) { 96382bae43c51c2f7224879172a6d8fab238434f04Miao Wang super(c); 97382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mWidth = 800; 98382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mHeight = 450; 99382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 100382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 101382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public SizedTV(android.content.Context c, android.util.AttributeSet attrs) { 102382bae43c51c2f7224879172a6d8fab238434f04Miao Wang super(c, attrs); 103382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mWidth = 800; 104382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mHeight = 450; 105382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 106382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 107382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public SizedTV(android.content.Context c, android.util.AttributeSet attrs, int f) { 108382bae43c51c2f7224879172a6d8fab238434f04Miao Wang super(c, attrs, f); 109382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mWidth = 800; 110382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mHeight = 450; 111382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 112382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 113382bae43c51c2f7224879172a6d8fab238434f04Miao Wang protected void onMeasure(int w, int h) { 114382bae43c51c2f7224879172a6d8fab238434f04Miao Wang setMeasuredDimension(mWidth, mHeight); 115382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 116382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 117382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 1186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams ///////////////////////////////////////////////////////////////////////// 1206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Message processor to handle notifications for when kernel completes 1226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private class MessageProcessor extends RenderScript.RSMessageHandler { 1236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams MessageProcessor() { 1246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void run() { 1276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(mProcessor) { 128f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // Decrement the pending displays and notify the 1296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // UI processor it can now enqueue more work if additional updates 1306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // are blocked by a full pipeline. 1316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mShowsPending > 0) { 1326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mShowsPending --; 1336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.notifyAll(); 1346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mToggleDisplay) { 1356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.mHandler.sendMessage(Message.obtain()); 1366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams ///////////////////////////////////////////////////////////////////////// 1446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Processor is a helper thread for running the work without 1456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // blocking the UI thread. 1466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams class Processor extends Thread { 1476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams RenderScript mRS; 1486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams ScriptC_util mScriptUtils; 1496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Allocation mInPixelsAllocation; 1506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Allocation mInPixelsAllocation2; 1516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Allocation mOutDisplayAllocation1; 1526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Allocation mOutDisplayAllocation2; 1536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Bitmap mBitmapOut1; 1546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Bitmap mBitmapOut2; 1556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int mActiveBitmap; 1566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private float mLastResult; 1586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mRun = true; 1596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mDoingBenchmark; 1606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private TestBase mTest; 1616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private boolean mBenchmarkMode; 1636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 164382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Allocation mOutDisplayAllocationIO; 165382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Allocation mOutPixelsAllocationIO; 166382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private TextureView mDisplayViewIO; 167382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private Surface mOutSurface; 1686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // We don't want to call the "changed" methods excessively as this 1696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // can cause extra work for drivers. Before running a test update 1706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // any bars which have changed. 171f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // 172f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // These are UI elements which can be used to control the operation of 173f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // a filter. For example, blur radius or white level. 1746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void runTest() { 1756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBars[0] != mBarsOld[0]) { 1766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.onBar1Changed(mBars[0]); 1776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBarsOld[0] = mBars[0]; 1786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBars[1] != mBarsOld[1]) { 1806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.onBar2Changed(mBars[1]); 1816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBarsOld[1] = mBars[1]; 1826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBars[2] != mBarsOld[2]) { 1846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.onBar3Changed(mBars[2]); 1856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBarsOld[2] = mBars[2]; 1866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBars[3] != mBarsOld[3]) { 1886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.onBar4Changed(mBars[3]); 1896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBarsOld[3] = mBars[3]; 1906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBars[4] != mBarsOld[4]) { 1926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.onBar5Changed(mBars[4]); 1936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBarsOld[4] = mBars[4]; 1946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.runTest(); 1966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1986a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Processor(RenderScript rs, boolean benchmarkMode) { 1996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS = rs; 2006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS.setMessageHandler(new MessageProcessor()); 2016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mScriptUtils = new ScriptC_util(mRS); 2026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams switch(mBitmapWidth) { 2046a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams case 1920: 2056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation = Allocation.createFromBitmapResource( 2066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img1920x1080a); 2076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation2 = Allocation.createFromBitmapResource( 2086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img1920x1080b); 2096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut1 = Bitmap.createBitmap(1920, 1080, Bitmap.Config.ARGB_8888); 2106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut2 = Bitmap.createBitmap(1920, 1080, Bitmap.Config.ARGB_8888); 2116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams break; 2126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams case 1280: 2136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation = Allocation.createFromBitmapResource( 2146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img1280x720a); 2156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation2 = Allocation.createFromBitmapResource( 2166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img1280x720b); 2176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut1 = Bitmap.createBitmap(1280, 720, Bitmap.Config.ARGB_8888); 2186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut2 = Bitmap.createBitmap(1280, 720, Bitmap.Config.ARGB_8888); 2196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams break; 2206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams case 800: 2216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation = Allocation.createFromBitmapResource( 2226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img800x450a); 2236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation2 = Allocation.createFromBitmapResource( 2246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS, getResources(), R.drawable.img800x450b); 2256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut1 = Bitmap.createBitmap(800, 450, Bitmap.Config.ARGB_8888); 2266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut2 = Bitmap.createBitmap(800, 450, Bitmap.Config.ARGB_8888); 2276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams break; 228f73ae162ff9f599909937dcbd32345b636620f8fJason Sams default: 229f73ae162ff9f599909937dcbd32345b636620f8fJason Sams throw new RuntimeException("unhandled bitmap width."); 2306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut1.setHasAlpha(false); 2336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapOut2.setHasAlpha(false); 2346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation1 = Allocation.createFromBitmap(mRS, mBitmapOut1); 2356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation2 = Allocation.createFromBitmap(mRS, mBitmapOut2); 2366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBenchmarkMode = benchmarkMode; 2376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams start(); 2386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 240382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Processor(RenderScript rs, TextureView v, boolean benchmarkMode) { 241382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS = rs; 242382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS.setMessageHandler(new MessageProcessor()); 243382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mScriptUtils = new ScriptC_util(mRS); 244382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayViewIO = v; 245382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 246382bae43c51c2f7224879172a6d8fab238434f04Miao Wang switch(mBitmapWidth) { 247382bae43c51c2f7224879172a6d8fab238434f04Miao Wang case 1920: 248382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation = Allocation.createFromBitmapResource( 249382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img1920x1080a); 250382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation2 = Allocation.createFromBitmapResource( 251382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img1920x1080b); 252382bae43c51c2f7224879172a6d8fab238434f04Miao Wang break; 253382bae43c51c2f7224879172a6d8fab238434f04Miao Wang case 1280: 254382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation = Allocation.createFromBitmapResource( 255382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img1280x720a); 256382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation2 = Allocation.createFromBitmapResource( 257382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img1280x720b); 258382bae43c51c2f7224879172a6d8fab238434f04Miao Wang break; 259382bae43c51c2f7224879172a6d8fab238434f04Miao Wang case 800: 260382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation = Allocation.createFromBitmapResource( 261382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img800x450a); 262382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mInPixelsAllocation2 = Allocation.createFromBitmapResource( 263382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mRS, getResources(), R.drawable.img800x450b); 264382bae43c51c2f7224879172a6d8fab238434f04Miao Wang break; 265382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 266382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 267382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO = Allocation.createTyped(mRS, mInPixelsAllocation.getType(), 268382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Allocation.MipmapControl.MIPMAP_NONE, 269382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Allocation.USAGE_SCRIPT | 270382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Allocation.USAGE_IO_OUTPUT); 271382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutPixelsAllocationIO = mOutDisplayAllocationIO; 272382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 273382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mBenchmarkMode = benchmarkMode; 274382bae43c51c2f7224879172a6d8fab238434f04Miao Wang start(); 275382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 276382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 2776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams class Result { 2786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float totalTime; 279f73ae162ff9f599909937dcbd32345b636620f8fJason Sams int iterations; 2806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Run one loop of kernels for at least the specified minimum time. 2836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // The function returns the average time in ms for the test run 2846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private Result runBenchmarkLoop(float minTime) { 2856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mUpdatesPending = 0; 2866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Result r = new Result(); 2876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams long t = java.lang.System.currentTimeMillis(); 2896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams do { 2906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(this) { 2916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Shows pending is used to track the number of kernels in the RS pipeline 2926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // We throttle it to 2. This provide some buffering to allow a kernel to be started 2936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // before we are nofitied the previous finished. However, larger numbers are uncommon 2946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // in interactive apps as they introduce 'lag' between user input and display. 2956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mShowsPending++; 2966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mShowsPending > 2) { 2976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 2986a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams this.wait(); 2996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch(InterruptedException e) { 3006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3046a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // If animations are enabled update the test state. 3056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mToggleAnimate) { 3066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.animateBars(r.totalTime); 3076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Run the kernel 310382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (!mToggleIO) { 311382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mActiveBitmap == 0) { 312382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mTest.mOutPixelsAllocation = mOutDisplayAllocation1; 313382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } else { 314382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mTest.mOutPixelsAllocation = mOutDisplayAllocation2; 315382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 3166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 317382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mTest.mOutPixelsAllocation = mOutDisplayAllocationIO; 3186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 319382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 3206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.runTest(); 321f73ae162ff9f599909937dcbd32345b636620f8fJason Sams r.iterations ++; 3226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 323382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (!mToggleIO) { 324382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mToggleDisplay) { 325382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mActiveBitmap == 0) { 326382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation1.copyTo(mBitmapOut1); 327382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } else { 328382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation2.copyTo(mBitmapOut2); 329382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 3306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 332382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 3336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Send our RS message handler a message so we know when this work has completed 3346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mScriptUtils.invoke_utilSendMessage(mActiveBitmap); 3356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mActiveBitmap ^= 1; 3366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams long t2 = java.lang.System.currentTimeMillis(); 338f73ae162ff9f599909937dcbd32345b636620f8fJason Sams r.totalTime = (t2 - t) / 1000.f; 3396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } while (r.totalTime < minTime); 3406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS.finish(); 3426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams long t2 = java.lang.System.currentTimeMillis(); 343f73ae162ff9f599909937dcbd32345b636620f8fJason Sams r.totalTime = (t2 - t) / 1000.f; 344f73ae162ff9f599909937dcbd32345b636620f8fJason Sams 345f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // Even if we are not displaying as we go, show the final output 346382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (!mToggleIO) { 347382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation1.copyTo(mBitmapOut1); 348382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation2.copyTo(mBitmapOut2); 349382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 3506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return r; 3516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Get a benchmark result for a specific test 3556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private float getBenchmark() { 3566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mDoingBenchmark = true; 3576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mUpdatesPending = 0; 3586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams long result = 0; 3606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float runtime = 1.f; 3616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mToggleLong) { 3626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams runtime = 10.f; 3636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // We run a short bit of work before starting the actual test 3666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // this is to let any power management do its job and respond 3676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams runBenchmarkLoop(0.3f); 3686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Run the actual benchmark 3706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Result r = runBenchmarkLoop(runtime); 3716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 372f73ae162ff9f599909937dcbd32345b636620f8fJason Sams Log.v("rs", "Test: time=" + r.totalTime +"s, frames=" + r.iterations + 373f73ae162ff9f599909937dcbd32345b636620f8fJason Sams ", avg=" + r.totalTime / r.iterations * 1000.f); 3746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mDoingBenchmark = false; 376f73ae162ff9f599909937dcbd32345b636620f8fJason Sams return r.totalTime / r.iterations * 1000.f; 3776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private int mDisplayedBitmap; 3806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private Handler mHandler = new Handler() { 3816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 3826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void handleMessage(Message msg) { 383f73ae162ff9f599909937dcbd32345b636620f8fJason Sams if (mTestNameChanged) { 384f73ae162ff9f599909937dcbd32345b636620f8fJason Sams getActionBar().setTitle("IP-Compat test: " + mTestName); 385f73ae162ff9f599909937dcbd32345b636620f8fJason Sams } 386f73ae162ff9f599909937dcbd32345b636620f8fJason Sams 387382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (!mToggleIO) { 388382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mDisplayedBitmap == 0) { 389382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayView.setImageBitmap(mBitmapOut1); 390382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } else { 391382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayView.setImageBitmap(mBitmapOut2); 392382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 393382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayedBitmap ^= 1; 394382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayView.invalidate(); 3956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 396382bae43c51c2f7224879172a6d8fab238434f04Miao Wang synchronized(this) { 397382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mRS == null || mOutPixelsAllocationIO == null) { 398382bae43c51c2f7224879172a6d8fab238434f04Miao Wang return; 399382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 400382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mOutDisplayAllocationIO != mOutPixelsAllocationIO) { 401382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO.copyFrom(mOutPixelsAllocationIO); 402382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 403382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO.ioSend(); 404382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 4056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams }; 4086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void run() { 410382bae43c51c2f7224879172a6d8fab238434f04Miao Wang Surface lastSurface = null; 4116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams while (mRun) { 4126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Our loop for launching tests or benchmarks 4136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(this) { 4146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // If we have no work to do, or we have displays pending, wait 4156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if ((mUpdatesPending == 0) || (mShowsPending != 0)) { 4166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 4176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams this.wait(); 4186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch(InterruptedException e) { 4196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 421382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mToggleIO) { 422382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if ((mOutSurface == null) || (mOutPixelsAllocationIO == null)) { 423382bae43c51c2f7224879172a6d8fab238434f04Miao Wang continue; 424382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 425382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (lastSurface != mOutSurface) { 426382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO.setSurface(mOutSurface); 427382bae43c51c2f7224879172a6d8fab238434f04Miao Wang lastSurface = mOutSurface; 428382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 429382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 4306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // We may have been asked to exit while waiting 4316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (!mRun) return; 432382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 4336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mBenchmarkMode) { 4366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Loop over the tests we want to benchmark 4376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int ct=0; (ct < mTestList.length) && mRun; ct++) { 4386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // For reproducibility we wait a short time for any sporadic work 4406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // created by the user touching the screen to launch the test to pass. 4416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Also allows for things to settle after the test changes. 4426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS.finish(); 4436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 4446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams sleep(250); 4456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch(InterruptedException e) { 4466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // If we just ran a test, we destroy it here to relieve some memory pressure 4496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mTest != null) { 4506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.destroy(); 4516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Select the next test 4546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest = changeTest(mTestList[ct], false); 4556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // If the user selected the "long pause" option, wait 4576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mTogglePause) { 4586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int i=0; (i < 100) && mRun; i++) { 4596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 4606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams sleep(100); 4616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch(InterruptedException e) { 4626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Run the test 4676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestResults[ct] = getBenchmark(); 4686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams onBenchmarkFinish(mRun); 4706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return; 4716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 4726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams boolean update = false; 4736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(this) { 4746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // If we have updates to process and are not blocked by pending shows, 4756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // start the next kernel 4766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if ((mUpdatesPending > 0) && (mShowsPending == 0)) { 4776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mUpdatesPending = 0; 4786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams update = true; 4796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mShowsPending++; 4806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 4826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 4836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (update) { 4846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Run the kernel 4856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mActiveBitmap == 0) { 4866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.mOutPixelsAllocation = mOutDisplayAllocation1; 4876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 4886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.mOutPixelsAllocation = mOutDisplayAllocation2; 4896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 490382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mToggleIO) { 491382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mTest.mOutPixelsAllocation = mOutDisplayAllocationIO; 492382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 4936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams runTest(); 4946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 495382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mToggleDisplay && !mToggleIO) { 4966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mActiveBitmap == 0) { 4976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation1.copyTo(mBitmapOut1); 4986a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 4996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation2.copyTo(mBitmapOut2); 5006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Send our RS message handler a message so we know when this work has completed 5046a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mScriptUtils.invoke_utilSendMessage(mActiveBitmap); 5056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mActiveBitmap ^= 1; 5066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void update() { 513f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // Something UI related has changed, enqueue an update if one is not 514f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // already pending. Wake the worker if needed. 5156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(this) { 5166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mUpdatesPending < 2) { 5176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mUpdatesPending++; 5186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams notifyAll(); 5196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 523382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public void setSurface(Surface s) { 524382bae43c51c2f7224879172a6d8fab238434f04Miao Wang synchronized(this) { 525382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutSurface = s; 526382bae43c51c2f7224879172a6d8fab238434f04Miao Wang notifyAll(); 527382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 528382bae43c51c2f7224879172a6d8fab238434f04Miao Wang //update(); 529382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 530382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 5316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void exit() { 5326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRun = false; 5336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams synchronized(this) { 5356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams notifyAll(); 5366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 5396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams this.join(); 5406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch(InterruptedException e) { 5416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation.destroy(); 5446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation2.destroy(); 5456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mTest != null) { 5476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest.destroy(); 5486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTest = null; 5496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 550382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 551382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if(!mToggleIO) { 552382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation1.destroy(); 553382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocation2.destroy(); 554382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } else { 555382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mOutPixelsAllocationIO != mOutDisplayAllocationIO) { 556382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutPixelsAllocationIO.destroy(); 557382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 558382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO.destroy(); 559382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 5606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS.destroy(); 5616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation = null; 5636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mInPixelsAllocation2 = null; 5646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation1 = null; 5656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mOutDisplayAllocation2 = null; 566382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutDisplayAllocationIO = null; 567382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mOutPixelsAllocationIO = null; 5686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mRS = null; 5696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams /////////////////////////////////////////////////////////////////////////////////////// 573572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 574572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private boolean mDoingBenchmark; 5756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public Processor mProcessor; 576572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 5776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams TestBase changeTest(IPTestList.TestName t, boolean setupUI) { 5786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams TestBase tb = IPTestList.newTest(t); 579572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 580f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mTestNameChanged = true; 581f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mTestName = t.toString(); 582f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mProcessor.mHandler.sendMessage(Message.obtain()); 583f73ae162ff9f599909937dcbd32345b636620f8fJason Sams 5846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams tb.createBaseTest(this); 5856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (setupUI) { 5866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams setupBars(tb); 5876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return tb; 5896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 5906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 5916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams TestBase changeTest(int id, boolean setupUI) { 5926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t = IPTestList.TestName.values()[id]; 5936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return changeTest(t, setupUI); 594572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 595572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 596572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 597572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (fromUser) { 598572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (seekBar == mBar1) { 5996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBars[0] = progress; 600572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar2) { 6016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBars[1] = progress; 602572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar3) { 6036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBars[2] = progress; 604572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar4) { 6056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBars[3] = progress; 606572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } else if (seekBar == mBar5) { 6076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBars[4] = progress; 608572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 6096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.update(); 610572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 611572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 612572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 613572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStartTrackingTouch(SeekBar seekBar) { 614572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 615572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 616572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onStopTrackingTouch(SeekBar seekBar) { 617572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 618572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void setupBars(TestBase t) { 620572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mSpinner.setVisibility(View.VISIBLE); 6216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onSpinner1Setup(mSpinner); 622572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 623572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setVisibility(View.VISIBLE); 624572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText1.setVisibility(View.VISIBLE); 6256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onBar1Setup(mBar1, mText1); 626572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 627572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setVisibility(View.VISIBLE); 628572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText2.setVisibility(View.VISIBLE); 6296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onBar2Setup(mBar2, mText2); 630572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 631572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setVisibility(View.VISIBLE); 632572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText3.setVisibility(View.VISIBLE); 6336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onBar3Setup(mBar3, mText3); 634572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 635572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setVisibility(View.VISIBLE); 636572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText4.setVisibility(View.VISIBLE); 6376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onBar4Setup(mBar4, mText4); 638572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 639572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setVisibility(View.VISIBLE); 640572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mText5.setVisibility(View.VISIBLE); 6416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams t.onBar5Setup(mBar5, mText5); 642572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 643572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void hideBars() { 6456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mSpinner.setVisibility(View.INVISIBLE); 646572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBar1.setVisibility(View.INVISIBLE); 6486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mText1.setVisibility(View.INVISIBLE); 649572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBar2.setVisibility(View.INVISIBLE); 6516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mText2.setVisibility(View.INVISIBLE); 652572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBar3.setVisibility(View.INVISIBLE); 6546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mText3.setVisibility(View.INVISIBLE); 655572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBar4.setVisibility(View.INVISIBLE); 6576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mText4.setVisibility(View.INVISIBLE); 658572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBar5.setVisibility(View.INVISIBLE); 6606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mText5.setVisibility(View.INVISIBLE); 6616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 662572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 663572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams @Override 664572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams protected void onCreate(Bundle savedInstanceState) { 665572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams super.onCreate(savedInstanceState); 666572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams setContentView(R.layout.main); 667572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6688467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mDisplayView = findViewById(R.id.display); 6698467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mDisplayViewIO = findViewById(R.id.display2); 6706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams //mDisplayView.setImageBitmap(mBitmapOut); 671572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6728467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mSpinner = findViewById(R.id.spinner1); 673572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6748467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mBar1 = findViewById(R.id.slider1); 6758467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mBar2 = findViewById(R.id.slider2); 6768467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mBar3 = findViewById(R.id.slider3); 6778467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mBar4 = findViewById(R.id.slider4); 6788467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mBar5 = findViewById(R.id.slider5); 679572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 680572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar1.setOnSeekBarChangeListener(this); 681572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar2.setOnSeekBarChangeListener(this); 682572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar3.setOnSeekBarChangeListener(this); 683572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar4.setOnSeekBarChangeListener(this); 684572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mBar5.setOnSeekBarChangeListener(this); 685572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6868467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mText1 = findViewById(R.id.slider1Text); 6878467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mText2 = findViewById(R.id.slider2Text); 6888467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mText3 = findViewById(R.id.slider3Text); 6898467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mText4 = findViewById(R.id.slider4Text); 6908467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mText5 = findViewById(R.id.slider5Text); 6916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 692572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 6946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onPause() { 6956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onPause(); 6966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.exit(); 6976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 698572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 6996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void onBenchmarkFinish(boolean ok) { 7006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (ok) { 7016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent intent = new Intent(); 7026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("tests", mTestList); 7036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("results", mTestResults); 7046a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams setResult(RESULT_OK, intent); 7056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 7066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams setResult(RESULT_CANCELED); 7076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 7086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams finish(); 7096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 710572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 711572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void startProcessor() { 7136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (!mDemoMode) { 7146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams hideBars(); 7156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 716572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Point size = new Point(); 7186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams getWindowManager().getDefaultDisplay().getSize(size); 719572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int mScreenWidth = size.x; 7216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int mScreenHeight = size.y; 722572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int tw = mBitmapWidth; 7246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int th = mBitmapHeight; 725572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (tw > mScreenWidth || th > mScreenHeight) { 7276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float s1 = (float)tw / (float)mScreenWidth; 7286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float s2 = (float)th / (float)mScreenHeight; 729572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (s1 > s2) { 7316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams tw /= s1; 7326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams th /= s1; 7336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } else { 7346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams tw /= s2; 7356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams th /= s2; 736572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 737572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 738572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams android.util.Log.v("rs", "TV sizes " + tw + ", " + th); 740382bae43c51c2f7224879172a6d8fab238434f04Miao Wang if (mToggleIO) { 741382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayViewIO.mWidth = tw; 742382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayViewIO.mHeight = th; 743572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 744382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mProcessor = new Processor(RenderScript.create(this), mDisplayViewIO, !mDemoMode); 745382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mDisplayViewIO.setSurfaceTextureListener(this); 746382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } else { 747382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mProcessor = new Processor(RenderScript.create(this), !mDemoMode); 748382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 7496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mDemoMode) { 7506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.mTest = changeTest(mTestList[0], true); 7516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 7526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mProcessor.update(); 7536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 754572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 7566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onResume() { 7576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onResume(); 7586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent i = getIntent(); 7596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestList = i.getIntArrayExtra("tests"); 760382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mToggleIO = i.getBooleanExtra("enable io", false); 7616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mToggleLong = i.getBooleanExtra("enable long", false); 7626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTogglePause = i.getBooleanExtra("enable pause", false); 7636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mToggleAnimate = i.getBooleanExtra("enable animate", false); 7646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mToggleDisplay = i.getBooleanExtra("enable display", false); 7656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapWidth = i.getIntExtra("resolution X", 0); 7666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mBitmapHeight = i.getIntExtra("resolution Y", 0); 7676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mDemoMode = i.getBooleanExtra("demo", false); 7686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestResults = new float[mTestList.length]; 7696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 7706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams startProcessor(); 7716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 772572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 7736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onDestroy() { 7746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onDestroy(); 775572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 776382bae43c51c2f7224879172a6d8fab238434f04Miao Wang @Override 777382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 778382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mProcessor.setSurface(new Surface(surface)); 779382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 780382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 781382bae43c51c2f7224879172a6d8fab238434f04Miao Wang @Override 782382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 783382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mProcessor.setSurface(new Surface(surface)); 784382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 785382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 786382bae43c51c2f7224879172a6d8fab238434f04Miao Wang @Override 787382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 788382bae43c51c2f7224879172a6d8fab238434f04Miao Wang mProcessor.setSurface(null); 789382bae43c51c2f7224879172a6d8fab238434f04Miao Wang return true; 790382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 791382bae43c51c2f7224879172a6d8fab238434f04Miao Wang 792382bae43c51c2f7224879172a6d8fab238434f04Miao Wang @Override 793382bae43c51c2f7224879172a6d8fab238434f04Miao Wang public void onSurfaceTextureUpdated(SurfaceTexture surface) { 794382bae43c51c2f7224879172a6d8fab238434f04Miao Wang } 7956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 796572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 797