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 java.io.Writer; 206b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport java.util.ArrayList; 216b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport java.util.concurrent.Semaphore; 226b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 236b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.RSSurfaceView; 246b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.RenderScript; 256b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.renderscript.RenderScriptGL; 262738fb1cb13314e68ea5442e335de427261cde3cXia Wangimport android.renderscript.RenderScript.RSMessageHandler; 276b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 286b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.Context; 296b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.res.Resources; 306b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.Bitmap; 316b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.drawable.BitmapDrawable; 326b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.drawable.Drawable; 336b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Handler; 346b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Message; 356b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.AttributeSet; 366b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.Log; 376b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.Surface; 386b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.SurfaceHolder; 396b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.SurfaceView; 406b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.KeyEvent; 416b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.MotionEvent; 426b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 436b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukpublic class RsBenchView extends RSSurfaceView { 446b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 456b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk public RsBenchView(Context context) { 466b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk super(context); 476b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 486b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 496b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private RenderScriptGL mRS; 506b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk private RsBenchRS mRender; 512738fb1cb13314e68ea5442e335de427261cde3cXia Wang private int mLoops = 0; 526b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 536b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 546b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk super.surfaceChanged(holder, format, w, h); 556b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk if (mRS == null) { 566b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig(); 576b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk sc.setDepth(16, 24); 586b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRS = createRenderScriptGL(sc); 596b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRS.setSurface(holder, w, h); 606b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRender = new RsBenchRS(); 612738fb1cb13314e68ea5442e335de427261cde3cXia Wang Log.v("RsBenchView", "mLoops = " + mLoops); 622738fb1cb13314e68ea5442e335de427261cde3cXia Wang mRender.init(mRS, getResources(), w, h, mLoops); 636b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 646b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 656b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 666b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk @Override 676b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk protected void onDetachedFromWindow() { 686b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk if (mRS != null) { 696b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk mRS = null; 706b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk destroyRenderScriptGL(); 716b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 726b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk } 736b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 742738fb1cb13314e68ea5442e335de427261cde3cXia Wang /** 752738fb1cb13314e68ea5442e335de427261cde3cXia Wang * Set the total number of loops the benchmark tests will run 762738fb1cb13314e68ea5442e335de427261cde3cXia Wang * before the test results are collected. 772738fb1cb13314e68ea5442e335de427261cde3cXia Wang */ 782738fb1cb13314e68ea5442e335de427261cde3cXia Wang public void setLoops(int iterations) { 792738fb1cb13314e68ea5442e335de427261cde3cXia Wang if (iterations > 0) { 802738fb1cb13314e68ea5442e335de427261cde3cXia Wang mLoops = iterations; 812738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 822738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 836b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk 842738fb1cb13314e68ea5442e335de427261cde3cXia Wang /** 852738fb1cb13314e68ea5442e335de427261cde3cXia Wang * Wait for message from the script 862738fb1cb13314e68ea5442e335de427261cde3cXia Wang */ 872738fb1cb13314e68ea5442e335de427261cde3cXia Wang public boolean testIsFinished() { 882738fb1cb13314e68ea5442e335de427261cde3cXia Wang return mRender.testIsFinished(); 892738fb1cb13314e68ea5442e335de427261cde3cXia Wang } 9046bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 9137333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk void setBenchmarkMode(int benchNum) { 9237333001cb7801ab510ce0216183bf8df2e93b08Alex Sakhartchouk mRender.setBenchmarkMode(benchNum); 9346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk } 9446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 95e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk void suspendRendering(boolean pause) { 96e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk mRender.pause(pause); 97e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk } 98e7a5b5aa9a3c8b371dd89f44b7d4cef445f7f7c2Alex Sakhartchouk 9946bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk void setDebugMode(int num) { 10046bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk mRender.setDebugMode(num); 10146bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk } 10246bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk 10346bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk String[] getTestNames() { 10446bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk return mRender.mTestNames; 10546bd32ece2e6ae5ae95ac47dacf2801322d156e9Alex Sakhartchouk } 1062738fb1cb13314e68ea5442e335de427261cde3cXia Wang} 107