16b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk/*
26b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * Copyright (C) 2008 The Android Open Source Project
36b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk *
46b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
56b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * you may not use this file except in compliance with the License.
66b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * You may obtain a copy of the License at
76b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk *
86b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
96b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk *
106b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
116b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
126b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * See the License for the specific language governing permissions and
146b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk * limitations under the License.
156b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk */
166b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
17c29a4442812d5f0e9f1af13b36cb6a806b6b46e0Alex Sakhartchoukpackage com.android.perftest;
186b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
196b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.RSSurfaceView;
206b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.RenderScript;
216b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
226b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.app.Activity;
236b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.res.Configuration;
242738fb1cb13314e68ea5442e335de427261cde3cXia Wangimport android.content.Intent;
252738fb1cb13314e68ea5442e335de427261cde3cXia Wangimport android.net.Uri;
266b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Bundle;
276b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Handler;
286b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Looper;
296b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Message;
306b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.provider.Settings.System;
316b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.Log;
326b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.Menu;
336b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.MenuItem;
3446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchoukimport android.view.MenuInflater;
356b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.View;
366b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.Window;
376b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.widget.Button;
386b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.widget.ListView;
3946bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchoukimport android.app.AlertDialog;
4046bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchoukimport android.content.DialogInterface;
4146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchoukimport android.widget.Toast;
426b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
436b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport java.lang.Runtime;
446b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
456b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukpublic class RsBench extends Activity {
462738fb1cb13314e68ea5442e335de427261cde3cXia Wang    private final String TAG = "RsBench";
472738fb1cb13314e68ea5442e335de427261cde3cXia Wang    public RsBenchView mView;
486b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
496b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
506b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    public void onCreate(Bundle icicle) {
516b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        super.onCreate(icicle);
522738fb1cb13314e68ea5442e335de427261cde3cXia Wang        int iterations = 0;
532738fb1cb13314e68ea5442e335de427261cde3cXia Wang        Intent intent = getIntent();
542738fb1cb13314e68ea5442e335de427261cde3cXia Wang        Uri uri = intent.getData();
552738fb1cb13314e68ea5442e335de427261cde3cXia Wang        if (uri != null) {
562738fb1cb13314e68ea5442e335de427261cde3cXia Wang            // when lauched from instrumentation
572738fb1cb13314e68ea5442e335de427261cde3cXia Wang            String scheme = uri.getScheme();
582738fb1cb13314e68ea5442e335de427261cde3cXia Wang            if ("iterations".equals(scheme)) {
592738fb1cb13314e68ea5442e335de427261cde3cXia Wang                iterations = Integer.parseInt(uri.getSchemeSpecificPart());
602738fb1cb13314e68ea5442e335de427261cde3cXia Wang            }
612738fb1cb13314e68ea5442e335de427261cde3cXia Wang        }
626b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // Create our Preview view and set it as the content of our
636b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // Activity
646b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        mView = new RsBenchView(this);
656b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        setContentView(mView);
662738fb1cb13314e68ea5442e335de427261cde3cXia Wang        mView.setLoops(iterations);
676b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
686b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
696b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
706b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    protected void onResume() {
716b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // Ideally a game should implement onResume() and onPause()
720857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk        // to take appropriate action when the activity loses focus
736b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        super.onResume();
746b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        mView.resume();
756b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
766b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
776b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
786b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    protected void onPause() {
796b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // Ideally a game should implement onResume() and onPause()
800857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk        // to take appropriate action when the activity loses focus
816b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        super.onPause();
826b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        mView.pause();
836b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
8446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk
8546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    @Override
8646bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    public boolean onCreateOptionsMenu(Menu menu) {
8746bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        MenuInflater inflater = getMenuInflater();
8846bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        inflater.inflate(R.menu.loader_menu, menu);
8946bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        return true;
9046bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    }
9146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk
9246bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    @Override
9346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    public boolean onOptionsItemSelected(MenuItem item) {
9446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        // Handle item selection
9546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        switch (item.getItemId()) {
9637333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk            case R.id.benchmark_all:
9737333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                mView.setBenchmarkMode(-1);
98e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk                mView.suspendRendering(false);
9946bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                return true;
10037333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk            case R.id.benchmark_one:
101e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk                mView.suspendRendering(true);
10246bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                AlertDialog.Builder builder = new AlertDialog.Builder(this);
10346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                builder.setTitle("Pick a Test");
10446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                builder.setItems(mView.getTestNames(),
10546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                                 new DialogInterface.OnClickListener() {
10646bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                    public void onClick(DialogInterface dialog, int item) {
10746bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                        Toast.makeText(getApplicationContext(),
10837333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                                       "Starting to benchmark: " + mView.getTestNames()[item],
10937333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                                       Toast.LENGTH_SHORT).show();
11037333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                        mView.setBenchmarkMode(item);
111e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk                        mView.suspendRendering(false);
11237333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                    }
11337333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                });
11437333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                builder.show();
11537333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                return true;
11637333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk            case R.id.debug_mode:
117e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk                mView.suspendRendering(true);
11837333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                AlertDialog.Builder debugBuilder = new AlertDialog.Builder(this);
11937333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                debugBuilder.setTitle("Pick a Test");
12037333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                debugBuilder.setItems(mView.getTestNames(),
12137333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                                 new DialogInterface.OnClickListener() {
12237333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                    public void onClick(DialogInterface dialog, int item) {
12337333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                        Toast.makeText(getApplicationContext(),
12446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                                       "Switching to: " + mView.getTestNames()[item],
12546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                                       Toast.LENGTH_SHORT).show();
12646bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                        mView.setDebugMode(item);
127e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk                        mView.suspendRendering(false);
12846bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                    }
12946bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                });
13037333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk                debugBuilder.show();
13146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                return true;
13246bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk            default:
13346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk                return super.onOptionsItemSelected(item);
13446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk        }
13546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk    }
1366b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk}
137