RSTestCore.java revision f1d97e536561b4731997c85873dde3b3fb721cb2
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2008 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * See the License for the specific language governing permissions and
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)package com.android.rs.test_v11;
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.res.Resources;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.renderscript.*;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.Log;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.ArrayList;
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import java.util.ListIterator;
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import java.util.Timer;
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochimport java.util.TimerTask;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)public class RSTestCore {
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    int mWidth;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int mHeight;
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    Context mCtx;
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public RSTestCore(Context ctx) {
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mCtx = ctx;
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private Resources mRes;
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private RenderScriptGL mRS;
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private Font mFont;
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ScriptField_ListAllocs_s mListAllocs;
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    int mLastX;
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    int mLastY;
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private ScriptC_rslist mScript;
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private ArrayList<UnitTest> unitTests;
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private ListIterator<UnitTest> test_iter;
49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private UnitTest activeTest;
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private boolean stopTesting;
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /* Periodic timer for ensuring future tests get scheduled */
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private Timer mTimer;
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int RS_TIMER_PERIOD = 100;
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void init(RenderScriptGL rs, Resources res, int width, int height) {
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mRS = rs;
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mRes = res;
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mWidth = width;
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mHeight = height;
610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        stopTesting = false;
620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        mScript = new ScriptC_rslist(mRS);
640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests = new ArrayList<UnitTest>();
660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_primitives(this, mRes, mCtx));
680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_rsdebug(this, mRes, mCtx));
690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_rstime(this, mRes, mCtx));
700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_rstypes(this, mRes, mCtx));
710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_math(this, mRes, mCtx));
720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UT_fp_mad(this, mRes, mCtx));
730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        /*
740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UnitTest(null, "<Pass>", 1));
750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UnitTest());
760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        unitTests.add(new UnitTest(null, "<Fail>", -1));
770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        for (int i = 0; i < 20; i++) {
790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            unitTests.add(new UnitTest(null, "<Pass>", 1));
800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        }
810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        */
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        UnitTest [] uta = new UnitTest[unitTests.size()];
840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        uta = unitTests.toArray(uta);
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length);
870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        for (int i = 0; i < uta.length; i++) {
880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item();
890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT);
900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            listElem.result = uta[i].result;
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mListAllocs.set(listElem, i, false);
920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            uta[i].setItem(listElem);
930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        }
940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        mListAllocs.copyAll();
960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        mScript.bind_gList(mListAllocs);
980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mScript.set_gFont(mFont);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mRS.bindRootScript(mScript);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        test_iter = unitTests.listIterator();
1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        refreshTestResults(); /* Kick off the first test */
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TimerTask pTask = new TimerTask() {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            public void run() {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                refreshTestResults();
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        };
1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mTimer = new Timer();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void checkAndRunNextTest() {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (activeTest != null) {
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (!activeTest.isAlive()) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                /* Properly clean up on our last test */
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                try {
1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    activeTest.join();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                catch (InterruptedException e) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                activeTest = null;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (!stopTesting && activeTest == null) {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (test_iter.hasNext()) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                activeTest = test_iter.next();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                activeTest.start();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                /* This routine will only get called once when a new test
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                 * should start running. The message handler in UnitTest.java
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 * ensures this. */
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            else {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                if (mTimer != null) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    mTimer.cancel();
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    mTimer.purge();
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    mTimer = null;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    public void refreshTestResults() {
1498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        checkAndRunNextTest();
1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (mListAllocs != null && mScript != null && mRS != null) {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mListAllocs.copyAll();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mScript.bind_gList(mListAllocs);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mRS.bindRootScript(mScript);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void cleanup() {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        stopTesting = true;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        UnitTest t = activeTest;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        /* Stop periodic refresh of testing */
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (mTimer != null) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mTimer.cancel();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mTimer.purge();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mTimer = null;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        /* Wait to exit until we finish the current test */
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (t != null) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            try {
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                t.join();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            catch (InterruptedException e) {
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            t = null;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void newTouchPosition(float x, float y, float pressure, int id) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void onActionDown(int x, int y) {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mScript.set_gDY(0.0f);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mLastX = x;
1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        mLastY = y;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        refreshTestResults();
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void onActionMove(int x, int y) {
1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        int dx = mLastX - x;
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        int dy = mLastY - y;
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (Math.abs(dy) <= 2) {
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            dy = 0;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mScript.set_gDY(dy);
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mLastX = x;
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mLastY = y;
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        refreshTestResults();
2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    }
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)