16a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams/* 26a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Copyright (C) 2013 The Android Open Source Project 36a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * 46a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 56a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * you may not use this file except in compliance with the License. 66a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * You may obtain a copy of the License at 76a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * 86a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * http://www.apache.org/licenses/LICENSE-2.0 96a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * 106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Unless required by applicable law or agreed to in writing, software 116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * See the License for the specific language governing permissions and 146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * limitations under the License. 156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams */ 166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samspackage com.android.rs.image2; 186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.Menu; 206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.MenuItem; 216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.MenuInflater; 226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.app.Activity; 246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.os.Bundle; 256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.os.Handler; 266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.graphics.Point; 276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.SurfaceView; 286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.AdapterView; 296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.ArrayAdapter; 306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.ImageView; 316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.SeekBar; 326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.Spinner; 336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.ToggleButton; 346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.TextView; 356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.CompoundButton; 366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.widget.ListView; 376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.View; 386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.util.ArrayList; 396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.util.ListIterator; 406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.util.Log; 416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.content.Intent; 426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.os.Environment; 446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.io.BufferedWriter; 456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.io.File; 466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.io.FileWriter; 476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport java.io.IOException; 486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samspublic class IPControls extends Activity { 506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private final String TAG = "Img"; 516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public final String RESULT_FILE = "ip_compat_result.csv"; 526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 53f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private Spinner mResolutionSpinner; 546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private ListView mTestListView; 556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private TextView mResultView; 566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private ArrayAdapter<String> mTestListAdapter; 586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private ArrayList<String> mTestList = new ArrayList<String>(); 596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 60382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private boolean mSettings[] = {true, true, false, false, false}; 61f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private static final int SETTING_ANIMATE = 0; 62f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private static final int SETTING_DISPLAY = 1; 63f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private static final int SETTING_LONG_RUN = 2; 64f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private static final int SETTING_PAUSE = 3; 65382bae43c51c2f7224879172a6d8fab238434f04Miao Wang private static final int SETTING_USAGE_IO = 4; 666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private float mResults[]; 686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public enum Resolutions { 706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams RES_1080P(1920, 1080, "1080p (1920x1080)"), 716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams RES_720P(1280, 720, "720p (1280x720)"), 726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams RES_WVGA(800, 480, "WVGA (800x480)"); 736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private final String name; 756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public final int width; 766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public final int height; 776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private Resolutions(int w, int h, String s) { 796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams width = w; 806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams height = h; 816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams name = s; 826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // return quoted string as displayed test name 856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public String toString() { 866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return name; 876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 89f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private Resolutions mResolution; 906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public boolean onCreateOptionsMenu(Menu menu) { 936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Inflate the menu items for use in the action bar 946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams MenuInflater inflater = getMenuInflater(); 956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams inflater.inflate(R.menu.main_activity_actions, menu); 966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams MenuItem searchItem = menu.findItem(R.id.action_res); 98f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolutionSpinner = (Spinner) searchItem.getActionView(); 996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 100f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolutionSpinner.setOnItemSelectedListener(mResolutionSpinnerListener); 101f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolutionSpinner.setAdapter(new ArrayAdapter<Resolutions>( 1026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams this, R.layout.spinner_layout, Resolutions.values())); 1036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 104f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // Choose one of the image sizes that is close to the resolution 1056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // of the screen. 1066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Point size = new Point(); 1076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams getWindowManager().getDefaultDisplay().getSize(size); 108f73ae162ff9f599909937dcbd32345b636620f8fJason Sams boolean didSet = false; 1096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int md = (size.x > size.y) ? size.x : size.y; 1106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int ct=0; ct < Resolutions.values().length; ct++) { 1116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (Resolutions.values()[ct].width <= (int)(md * 1.2)) { 112f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolutionSpinner.setSelection(ct); 113f73ae162ff9f599909937dcbd32345b636620f8fJason Sams didSet = true; 1146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams break; 1156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 117f73ae162ff9f599909937dcbd32345b636620f8fJason Sams if (!didSet) { 118f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // If no good resolution was found, pick the lowest one. 119f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolutionSpinner.setSelection(Resolutions.values().length - 1); 120f73ae162ff9f599909937dcbd32345b636620f8fJason Sams } 1216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return super.onCreateOptionsMenu(menu); 1236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 126f73ae162ff9f599909937dcbd32345b636620f8fJason Sams private AdapterView.OnItemSelectedListener mResolutionSpinnerListener = 1276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams new AdapterView.OnItemSelectedListener() { 1286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 129f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mResolution = Resolutions.values()[pos]; 1306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void onNothingSelected(AdapterView parent) { 1336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams }; 1356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void launchDemo(int id) { 1376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int testList[] = new int[1]; 1386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams testList[0] = id; 1396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent intent = makeBasicLaunchIntent(); 1416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("tests", testList); 1426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("demo", true); 1436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams startActivityForResult(intent, 0); 1446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams void init() { 1476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int i=0; i < IPTestList.TestName.values().length; i++) { 1496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestList.add(IPTestList.TestName.values()[i].toString()); 1506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListView = (ListView) findViewById(R.id.test_list); 1536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListAdapter = new ArrayAdapter(this, 1546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams android.R.layout.simple_list_item_activated_1, 1556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestList); 1566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListView.setAdapter(mTestListAdapter); 1586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 1596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListAdapter.notifyDataSetChanged(); 1606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mResultView = (TextView) findViewById(R.id.results); 1626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListView.setOnItemLongClickListener(new ListView.OnItemLongClickListener() { 1646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 1656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int pos, long id) { 1666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams launchDemo(pos); 1676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return true; 1686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams }); 1706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 1736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onCreate(Bundle savedInstanceState) { 1746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onCreate(savedInstanceState); 1756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams setContentView(R.layout.controls); 1766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams init(); 1776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 1806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onPause() { 1816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onPause(); 1826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams @Override 1866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onResume() { 1876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams super.onResume(); 1886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private void checkGroup(int group) { 1916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t[] = IPTestList.TestName.values(); 1926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int i=0; i < t.length; i++) { 1936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListView.setItemChecked(i, group == t[i].group); 1946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 1966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 1976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent makeBasicLaunchIntent() { 1986a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent intent = new Intent(this, ImageProcessingActivity2.class); 1996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("enable long", mSettings[SETTING_LONG_RUN]); 2006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("enable pause", mSettings[SETTING_PAUSE]); 2016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("enable animate", mSettings[SETTING_ANIMATE]); 2026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("enable display", mSettings[SETTING_DISPLAY]); 203382bae43c51c2f7224879172a6d8fab238434f04Miao Wang intent.putExtra("enable io", mSettings[SETTING_USAGE_IO]); 204f73ae162ff9f599909937dcbd32345b636620f8fJason Sams intent.putExtra("resolution X", mResolution.width); 205f73ae162ff9f599909937dcbd32345b636620f8fJason Sams intent.putExtra("resolution Y", mResolution.height); 2066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return intent; 2076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void btnRun(View v) { 2106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t[] = IPTestList.TestName.values(); 2116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int count = 0; 2136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int i = 0; i < t.length; i++) { 2146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mTestListView.isItemChecked(i)) { 2156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams count++; 2166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (count == 0) { 2196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return; 2206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int testList[] = new int[count]; 2236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams count = 0; 2246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int i = 0; i < t.length; i++) { 2256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (mTestListView.isItemChecked(i)) { 2266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams testList[count++] = i; 2276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Intent intent = makeBasicLaunchIntent(); 2316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams intent.putExtra("tests", testList); 2326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams startActivityForResult(intent, 0); 2336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 235f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // Rebase normalizes the performance result for the resolution and 236f73ae162ff9f599909937dcbd32345b636620f8fJason Sams // compares it to a baseline device. 2376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float rebase(float v, IPTestList.TestName t) { 2386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (v > 0.001) { 2396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams v = t.baseline / v; 2406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 241f73ae162ff9f599909937dcbd32345b636620f8fJason Sams float pr = (1920.f / mResolution.width) * (1080.f / mResolution.height); 2426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return v / pr; 2436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams private void writeResults() { 2466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // write result into a file 2476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams File externalStorage = Environment.getExternalStorageDirectory(); 2486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (!externalStorage.canWrite()) { 2496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Log.v(TAG, "sdcard is not writable"); 2506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return; 2516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams File resultFile = new File(externalStorage, RESULT_FILE); 2536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams resultFile.setWritable(true, false); 2546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams try { 2556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 2566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 2576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams java.text.DecimalFormat df = new java.text.DecimalFormat("######.##"); 2586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int ct=0; ct < IPTestList.TestName.values().length; ct++) { 2606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t = IPTestList.TestName.values()[ct]; 2616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams final float r = mResults[ct]; 2626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float r2 = rebase(r, t); 2636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams String s = new String("" + t.toString() + ", " + df.format(r) + ", " + df.format(r2)); 2646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams rsWriter.write(s + "\n"); 2656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams rsWriter.close(); 2676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } catch (IOException e) { 2686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams Log.v(TAG, "Unable to write result file " + e.getMessage()); 2696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams protected void onActivityResult(int requestCode, int resultCode, Intent data) { 2736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (requestCode == 0) { 2746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams if (resultCode == RESULT_OK) { 2756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams java.text.DecimalFormat df = new java.text.DecimalFormat("######.#"); 2766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mResults = new float[IPTestList.TestName.values().length]; 2776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams float r[] = data.getFloatArrayExtra("results"); 2796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams int id[] = data.getIntArrayExtra("tests"); 2806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int ct=0; ct < id.length; ct++) { 2826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t = IPTestList.TestName.values()[id[ct]]; 2836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 2846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams String s = t.toString() + " " + df.format(rebase(r[ct], t)) + 2856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams "X, " + df.format(r[ct]) + "ms"; 2866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestList.set(id[ct], s); 2876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mTestListAdapter.notifyDataSetChanged(); 2886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mResults[id[ct]] = r[ct]; 2896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 2906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 291f73ae162ff9f599909937dcbd32345b636620f8fJason Sams double geometricMean[] = {1.0, 1.0, 1.0}; 2926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams double count[] = {0, 0, 0}; 2936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams for (int ct=0; ct < IPTestList.TestName.values().length; ct++) { 2946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPTestList.TestName t = IPTestList.TestName.values()[ct]; 295f73ae162ff9f599909937dcbd32345b636620f8fJason Sams geometricMean[t.group] *= rebase(mResults[ct], t); 2966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams count[t.group] += 1.0; 2976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 298f73ae162ff9f599909937dcbd32345b636620f8fJason Sams geometricMean[0] = java.lang.Math.pow(geometricMean[0], 1.0 / count[0]); 299f73ae162ff9f599909937dcbd32345b636620f8fJason Sams geometricMean[1] = java.lang.Math.pow(geometricMean[1], 1.0 / count[1]); 300f73ae162ff9f599909937dcbd32345b636620f8fJason Sams geometricMean[2] = java.lang.Math.pow(geometricMean[2], 1.0 / count[2]); 3016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 302f73ae162ff9f599909937dcbd32345b636620f8fJason Sams String s = "Results: fp full=" + df.format(geometricMean[0]) + 303f73ae162ff9f599909937dcbd32345b636620f8fJason Sams ", fp relaxed=" +df.format(geometricMean[1]) + 304f73ae162ff9f599909937dcbd32345b636620f8fJason Sams ", intrinsics=" + df.format(geometricMean[2]); 3056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams mResultView.setText(s); 3066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams writeResults(); 3076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public boolean onOptionsItemSelected(MenuItem item) { 3126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams // Handle presses on the action bar items 3136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams switch(item.getItemId()) { 3146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams case R.id.action_settings: 3156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPSettings newFragment = new IPSettings(mSettings); 3166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams newFragment.show(getFragmentManager(), "settings"); 3176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return true; 3186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams default: 3196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams return super.onOptionsItemSelected(item); 3206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 323f73ae162ff9f599909937dcbd32345b636620f8fJason Sams public void btnSelAll(View v) { 324f73ae162ff9f599909937dcbd32345b636620f8fJason Sams IPTestList.TestName t[] = IPTestList.TestName.values(); 325f73ae162ff9f599909937dcbd32345b636620f8fJason Sams for (int i=0; i < t.length; i++) { 326f73ae162ff9f599909937dcbd32345b636620f8fJason Sams mTestListView.setItemChecked(i, true); 327f73ae162ff9f599909937dcbd32345b636620f8fJason Sams } 3286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 330f73ae162ff9f599909937dcbd32345b636620f8fJason Sams public void btnSelNone(View v) { 331f73ae162ff9f599909937dcbd32345b636620f8fJason Sams checkGroup(-1); 3326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void btnSettings(View v) { 3356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams IPSettings newFragment = new IPSettings(mSettings); 3366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams newFragment.show(getFragmentManager(), "settings"); 3376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams public void btnSelIntrinsic(View v) { 340f73ae162ff9f599909937dcbd32345b636620f8fJason Sams checkGroup(IPTestList.INTRINSIC); 3416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams } 3426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams 3456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams} 346