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