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