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)