RsBenchView.java revision 6b5222dd5334ebd8c8b641fa507776714505d198
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
176b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukpackage com.android.samples;
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;
266b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
276b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.Context;
286b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.content.res.Resources;
296b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.Bitmap;
306b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.drawable.BitmapDrawable;
316b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.graphics.drawable.Drawable;
326b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Handler;
336b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.os.Message;
346b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.AttributeSet;
356b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.util.Log;
366b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.Surface;
376b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.SurfaceHolder;
386b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.SurfaceView;
396b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.KeyEvent;
406b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukimport android.view.MotionEvent;
416b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
426b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchoukpublic class RsBenchView extends RSSurfaceView {
436b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
446b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    public RsBenchView(Context context) {
456b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        super(context);
466b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        //setFocusable(true);
476b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
486b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
496b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    private RenderScriptGL mRS;
506b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    private RsBenchRS mRender;
516b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
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();
616b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk            mRender.init(mRS, getResources(), w, h);
626b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        }
636b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
646b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
656b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
666b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    protected void onDetachedFromWindow() {
676b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        if (mRS != null) {
686b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk            mRS = null;
696b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk            destroyRenderScriptGL();
706b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        }
716b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
726b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
736b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
746b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    public boolean onKeyDown(int keyCode, KeyEvent event)
756b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    {
766b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // break point at here
776b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        // this method doesn't work when 'extends View' include 'extends ScrollView'.
786b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        return super.onKeyDown(keyCode, event);
796b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
806b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
816b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
826b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    @Override
836b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    public boolean onTouchEvent(MotionEvent ev)
846b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    {
856b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        boolean ret = false;
866b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        int act = ev.getAction();
876b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        if (act == ev.ACTION_DOWN) {
886b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk            mRender.onActionDown((int)ev.getX(), (int)ev.getY());
896b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk            ret = true;
906b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        }
916b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
926b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk        return ret;
936b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk    }
946b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk}
956b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
966b5222dd5334ebd8c8b641fa507776714505d198Alex Sakhartchouk
97