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;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Bundle;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.BitmapFactory;
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Bitmap;
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.graphics.Canvas;
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.support.v8.renderscript.*;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.SurfaceView;
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.SurfaceHolder;
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.AdapterView;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ArrayAdapter;
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ImageView;
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.SeekBar;
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.Spinner;
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.TextView;
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.View;
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log;
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Math;
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.os.Environment;
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.app.Instrumentation;
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context;
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Intent;
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.net.Uri;
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.BufferedWriter;
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.File;
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.FileWriter;
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.io.IOException;
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class ImageProcessingActivity2 extends Activity
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                                       implements SeekBar.OnSeekBarChangeListener {
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private final String TAG = "Img";
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public final String RESULT_FILE = "image_processing_result.csv";
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    RenderScript mRS;
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Allocation mInPixelsAllocation;
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Allocation mInPixelsAllocation2;
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Allocation mOutPixelsAllocation;
56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    /**
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams     * Define enum type for test names
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams     */
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public enum TestName {
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        // totally there are 38 test cases
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        LEVELS_VEC3_RELAXED ("Levels Vec3 Relaxed"),
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        LEVELS_VEC4_RELAXED ("Levels Vec4 Relaxed"),
64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        LEVELS_VEC3_FULL ("Levels Vec3 Full"),
65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        LEVELS_VEC4_FULL ("Levels Vec4 Full"),
66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        BLUR_RADIUS_25 ("Blur radius 25"),
67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSIC_BLUE_RADIUS_25 ("Intrinsic Blur radius 25"),
68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        GREYSCALE ("Greyscale"),
69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        GRAIN ("Grain"),
70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        FISHEYE_FULL ("Fisheye Full"),
71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        FISHEYE_RELAXED ("Fisheye Relaxed"),
72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        FISHEYE_APPROXIMATE_FULL ("Fisheye Approximate Full"),
73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        FISHEYE_APPROXIMATE_RELAXED ("Fisheye Approximate Relaxed"),
74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        VIGNETTE_FULL ("Vignette Full"),
75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        VIGNETTE_RELAXED ("Vignette Relaxed"),
76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        VIGNETTE_APPROXIMATE_FULL ("Vignette Approximate Full"),
77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        VIGNETTE_APPROXIMATE_RELAXED ("Vignette Approximate Relaxed"),
78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        GROUP_TEST_EMULATED ("Group Test (emulated)"),
79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        GROUP_TEST_NATIVE ("Group Test (native)"),
80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        CONVOLVE_3X3 ("Convolve 3x3"),
81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_CONVOLVE_3X3 ("Intrinsics Convolve 3x3"),
82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        COLOR_MATRIX ("ColorMatrix"),
83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_COLOR_MATRIX ("Intrinsics ColorMatrix"),
84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_COLOR_MATRIX_GREY ("Intrinsics ColorMatrix Grey"),
85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        COPY ("Copy"),
86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        CROSS_PROCESS_USING_LUT ("CrossProcess (using LUT)"),
87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        CONVOLVE_5X5 ("Convolve 5x5"),
88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_CONVOLVE_5X5 ("Intrinsics Convolve 5x5"),
89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        MANDELBROT ("Mandelbrot"),
90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_BLEND ("Intrinsics Blend"),
91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        INTRINSICS_BLUR_25G ("Intrinsics Blur 25 uchar"),
92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        VIBRANCE ("Vibrance"),
93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        BW_FILTER ("BW Filter"),
94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        SHADOWS ("Shadows"),
95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        CONTRAST ("Contrast"),
96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        EXPOSURE ("Exposure"),
97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        WHITE_BALANCE ("White Balance"),
98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        COLOR_CUBE ("Color Cube"),
99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        COLOR_CUBE_3D_INTRINSIC ("Color Cube (3D LUT intrinsic)");
100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        private final String name;
103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        private TestName(String s) {
105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            name = s;
106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
107572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        // return quoted string as displayed test name
109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        public String toString() {
110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            return name;
111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Bitmap mBitmapIn;
115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Bitmap mBitmapIn2;
116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Bitmap mBitmapOut;
117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Spinner mSpinner;
119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SeekBar mBar1;
120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SeekBar mBar2;
121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SeekBar mBar3;
122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SeekBar mBar4;
123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SeekBar mBar5;
124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mText1;
125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mText2;
126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mText3;
127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mText4;
128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mText5;
129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private float mSaturation = 1.0f;
131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TextView mBenchmarkResult;
133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Spinner mTestSpinner;
134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private SurfaceView mSurfaceView;
136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private ImageView mDisplayView;
137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private boolean mDoingBenchmark;
139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
140572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private TestBase mTest;
141572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private int mRunCount;
142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void updateDisplay() {
144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.updateBitmap(mBitmapOut);
145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mDisplayView.invalidate();
146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        if (fromUser) {
150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            if (seekBar == mBar1) {
152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mTest.onBar1Changed(progress);
153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else if (seekBar == mBar2) {
154572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mTest.onBar2Changed(progress);
155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else if (seekBar == mBar3) {
156572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mTest.onBar3Changed(progress);
157572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else if (seekBar == mBar4) {
158572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mTest.onBar4Changed(progress);
159572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else if (seekBar == mBar5) {
160572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                mTest.onBar5Changed(progress);
161572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
162572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
163572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.runTest();
164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            updateDisplay();
165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void onStartTrackingTouch(SeekBar seekBar) {
169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void onStopTrackingTouch(SeekBar seekBar) {
172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    void setupBars() {
175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mSpinner.setVisibility(View.VISIBLE);
176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onSpinner1Setup(mSpinner);
177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
178572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar1.setVisibility(View.VISIBLE);
179572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText1.setVisibility(View.VISIBLE);
180572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onBar1Setup(mBar1, mText1);
181572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
182572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar2.setVisibility(View.VISIBLE);
183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText2.setVisibility(View.VISIBLE);
184572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onBar2Setup(mBar2, mText2);
185572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
186572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar3.setVisibility(View.VISIBLE);
187572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText3.setVisibility(View.VISIBLE);
188572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onBar3Setup(mBar3, mText3);
189572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
190572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar4.setVisibility(View.VISIBLE);
191572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText4.setVisibility(View.VISIBLE);
192572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onBar4Setup(mBar4, mText4);
193572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
194572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar5.setVisibility(View.VISIBLE);
195572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText5.setVisibility(View.VISIBLE);
196572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.onBar5Setup(mBar5, mText5);
197572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
198572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
199572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
200572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    void changeTest(TestName testName) {
201572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        if (mTest != null) {
202572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.destroy();
203572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
204572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        switch(testName) {
205572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case LEVELS_VEC3_RELAXED:
206572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new LevelsV4(false, false);
207572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
208572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case LEVELS_VEC4_RELAXED:
209572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new LevelsV4(false, true);
210572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
211572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case LEVELS_VEC3_FULL:
212572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new LevelsV4(true, false);
213572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
214572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case LEVELS_VEC4_FULL:
215572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new LevelsV4(true, true);
216572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
217572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case BLUR_RADIUS_25:
218572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Blur25(false);
219572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
220572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSIC_BLUE_RADIUS_25:
221572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Blur25(true);
222572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
223572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case GREYSCALE:
224572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Greyscale();
225572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
226572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case GRAIN:
227572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Grain();
228572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
229572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case FISHEYE_FULL:
230572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Fisheye(false, false);
231572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
232572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case FISHEYE_RELAXED:
233572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Fisheye(false, true);
234572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
235572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case FISHEYE_APPROXIMATE_FULL:
236572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Fisheye(true, false);
237572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
238572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case FISHEYE_APPROXIMATE_RELAXED:
239572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Fisheye(true, true);
240572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
241572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case VIGNETTE_FULL:
242572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Vignette(false, false);
243572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
244572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case VIGNETTE_RELAXED:
245572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Vignette(false, true);
246572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
247572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case VIGNETTE_APPROXIMATE_FULL:
248572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Vignette(true, false);
249572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
250572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case VIGNETTE_APPROXIMATE_RELAXED:
251572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Vignette(true, true);
252572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
253572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case GROUP_TEST_EMULATED:
254572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new GroupTest(false);
255572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
256572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case GROUP_TEST_NATIVE:
257572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new GroupTest(true);
258572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
259572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case CONVOLVE_3X3:
260572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Convolve3x3(false);
261572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
262572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_CONVOLVE_3X3:
263572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Convolve3x3(true);
264572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
265572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case COLOR_MATRIX:
266572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new ColorMatrix(false, false);
267572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
268572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_COLOR_MATRIX:
269572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new ColorMatrix(true, false);
270572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
271572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_COLOR_MATRIX_GREY:
272572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new ColorMatrix(true, true);
273572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
274572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case COPY:
275572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Copy();
276572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
277572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case CROSS_PROCESS_USING_LUT:
278572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new CrossProcess();
279572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
280572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case CONVOLVE_5X5:
281572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Convolve5x5(false);
282572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
283572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_CONVOLVE_5X5:
284572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Convolve5x5(true);
285572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
286572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case MANDELBROT:
287572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Mandelbrot();
288572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
289572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_BLEND:
290572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Blend();
291572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
292572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case INTRINSICS_BLUR_25G:
293572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Blur25G();
294572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
295572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case VIBRANCE:
296572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Vibrance();
297572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
298572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case BW_FILTER:
299572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new BWFilter();
300572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
301572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case SHADOWS:
302572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Shadows();
303572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
304572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case CONTRAST:
305572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Contrast();
306572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
307572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case EXPOSURE:
308572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new Exposure();
309572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
310572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case WHITE_BALANCE:
311572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new WhiteBalance();
312572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
313572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case COLOR_CUBE:
314572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new ColorCube(false);
315572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
316572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case COLOR_CUBE_3D_INTRINSIC:
317572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest = new ColorCube(true);
318572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
319572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
320572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
321572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.createBaseTest(this, mBitmapIn, mBitmapIn2, mBitmapOut);
322572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        setupBars();
323572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
324572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.runTest();
325572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        updateDisplay();
326572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBenchmarkResult.setText("Result: not run");
327572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
328572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
329572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    void setupTests() {
330572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTestSpinner.setAdapter(new ArrayAdapter<TestName>(
331572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            this, R.layout.spinner_layout, TestName.values()));
332572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
333572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
334572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private AdapterView.OnItemSelectedListener mTestSpinnerListener =
335572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            new AdapterView.OnItemSelectedListener() {
336572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
337572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    changeTest(TestName.values()[pos]);
338572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
339572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
340572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                public void onNothingSelected(AdapterView parent) {
341572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
342572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
343572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            };
344572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
345572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    @Override
346572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected void onCreate(Bundle savedInstanceState) {
347572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        super.onCreate(savedInstanceState);
348572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        setContentView(R.layout.main);
349572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
350572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBitmapIn = loadBitmap(R.drawable.img1600x1067);
351572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBitmapIn2 = loadBitmap(R.drawable.img1600x1067b);
352572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(), mBitmapIn.getHeight(),
353572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                                         mBitmapIn.getConfig());
354572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
355572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mSurfaceView = (SurfaceView) findViewById(R.id.surface);
356572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
357572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mDisplayView = (ImageView) findViewById(R.id.display);
358572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mDisplayView.setImageBitmap(mBitmapOut);
359572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
360572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mSpinner = (Spinner) findViewById(R.id.spinner1);
361572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
362572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar1 = (SeekBar) findViewById(R.id.slider1);
363572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar2 = (SeekBar) findViewById(R.id.slider2);
364572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar3 = (SeekBar) findViewById(R.id.slider3);
365572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar4 = (SeekBar) findViewById(R.id.slider4);
366572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar5 = (SeekBar) findViewById(R.id.slider5);
367572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
368572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar1.setOnSeekBarChangeListener(this);
369572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar2.setOnSeekBarChangeListener(this);
370572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar3.setOnSeekBarChangeListener(this);
371572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar4.setOnSeekBarChangeListener(this);
372572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBar5.setOnSeekBarChangeListener(this);
373572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
374572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText1 = (TextView) findViewById(R.id.slider1Text);
375572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText2 = (TextView) findViewById(R.id.slider2Text);
376572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText3 = (TextView) findViewById(R.id.slider3Text);
377572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText4 = (TextView) findViewById(R.id.slider4Text);
378572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mText5 = (TextView) findViewById(R.id.slider5Text);
379572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
380572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTestSpinner = (Spinner) findViewById(R.id.filterselection);
381572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTestSpinner.setOnItemSelectedListener(mTestSpinnerListener);
382572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
383572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText);
384572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBenchmarkResult.setText("Result: not run");
385572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
386572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
387572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mRS = RenderScript.create(this);
388572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn);
389572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mInPixelsAllocation2 = Allocation.createFromBitmap(mRS, mBitmapIn2);
390572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mOutPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapOut);
391572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
392572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
393572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        setupTests();
394572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        changeTest(TestName.LEVELS_VEC3_RELAXED);
395572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
396572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
397572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
398572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Bitmap loadBitmap(int resource) {
399572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        final BitmapFactory.Options options = new BitmapFactory.Options();
400572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
401572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        return BitmapFactory.decodeResource(getResources(), resource, options);
402572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
403572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
404572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    // button hook
405572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void benchmark(View v) {
406572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        float t = getBenchmark();
407572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        //long javaTime = javaFilter();
408572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        //mBenchmarkResult.setText("RS: " + t + " ms  Java: " + javaTime + " ms");
409572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBenchmarkResult.setText("Result: " + t + " ms");
410572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        Log.v(TAG, "getBenchmark: Renderscript frame time core ms " + t);
411572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
412572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
413572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void benchmark_all(View v) {
414572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        // write result into a file
415572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        File externalStorage = Environment.getExternalStorageDirectory();
416572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        if (!externalStorage.canWrite()) {
417572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            Log.v(TAG, "sdcard is not writable");
418572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            return;
419572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
420572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        File resultFile = new File(externalStorage, RESULT_FILE);
421572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        //resultFile.setWritable(true, false);
422572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        try {
423572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile));
424572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath());
425572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            for (TestName tn: TestName.values()) {
426572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                changeTest(tn);
427572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                float t = getBenchmark();
428572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                String s = new String("" + tn.toString() + ", " + t);
429572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                rsWriter.write(s + "\n");
430572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                Log.v(TAG, "Test " + s + "ms\n");
431572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
432572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            rsWriter.close();
433572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        } catch (IOException e) {
434572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            Log.v(TAG, "Unable to write result file " + e.getMessage());
435572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
436572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        changeTest(TestName.LEVELS_VEC3_RELAXED);
437572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
438572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
439572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    // For benchmark test
440572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public float getBenchmark() {
441572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mDoingBenchmark = true;
442572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
443572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.setupBenchmark();
444572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        long result = 0;
445572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
446572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        //Log.v(TAG, "Warming");
447572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        long t = java.lang.System.currentTimeMillis() + 250;
448572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        do {
449572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.runTest();
450572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.finish();
451572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        } while (t > java.lang.System.currentTimeMillis());
452572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
453572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        //Log.v(TAG, "Benchmarking");
454572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        int ct = 0;
455572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        t = java.lang.System.currentTimeMillis();
456572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        do {
457572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.runTest();
458572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mTest.finish();
459572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            ct++;
460572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        } while ((t+1000) > java.lang.System.currentTimeMillis());
461572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        t = java.lang.System.currentTimeMillis() - t;
462572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        float ft = (float)t;
463572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        ft /= ct;
464572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
465572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mTest.exitBenchmark();
466572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mDoingBenchmark = false;
467572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
468572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        return ft;
469572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
470572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
471