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