141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines/* 241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Copyright (C) 2008 The Android Open Source Project 341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * you may not use this file except in compliance with the License. 641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * You may obtain a copy of the License at 741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * 1041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * Unless required by applicable law or agreed to in writing, software 1141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 1241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * See the License for the specific language governing permissions and 1441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * limitations under the License. 1541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines */ 1641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 1741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespackage com.android.rs.test_v11; 1841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 1941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.Context; 2041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.content.res.Resources; 2141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.renderscript.*; 2241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport android.util.Log; 2341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.ArrayList; 2441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.ListIterator; 2541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.Timer; 2641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinesimport java.util.TimerTask; 2741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 2841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 2941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hinespublic class RSTestCore { 3041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int mWidth; 3141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int mHeight; 3241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines Context mCtx; 3341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 3441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public RSTestCore(Context ctx) { 3541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mCtx = ctx; 3641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 3741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 3841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private Resources mRes; 3941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private RenderScriptGL mRS; 4041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 4141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private Font mFont; 4241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines ScriptField_ListAllocs_s mListAllocs; 4341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int mLastX; 4441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int mLastY; 4541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private ScriptC_rslist mScript; 4641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 4741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private ArrayList<UnitTest> unitTests; 4841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private ListIterator<UnitTest> test_iter; 4941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private UnitTest activeTest; 5041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private boolean stopTesting; 5141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 5241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Periodic timer for ensuring future tests get scheduled */ 5341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines private Timer mTimer; 5441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public static final int RS_TIMER_PERIOD = 100; 5541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 5641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void init(RenderScriptGL rs, Resources res, int width, int height) { 5741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRS = rs; 5841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRes = res; 5941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mWidth = width; 6041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mHeight = height; 6141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines stopTesting = false; 6241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 6341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript = new ScriptC_rslist(mRS, mRes, R.raw.rslist); 6441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 6541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests = new ArrayList<UnitTest>(); 6641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 6741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_primitives(this, mRes, mCtx)); 6841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_rsdebug(this, mRes, mCtx)); 6941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_rstime(this, mRes, mCtx)); 7041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_rstypes(this, mRes, mCtx)); 7141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_math(this, mRes, mCtx)); 7241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UT_fp_mad(this, mRes, mCtx)); 7341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* 7441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 7541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UnitTest()); 7641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UnitTest(null, "<Fail>", -1)); 7741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 7841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines for (int i = 0; i < 20; i++) { 7941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 8041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 8141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines */ 8241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 8341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines UnitTest [] uta = new UnitTest[unitTests.size()]; 8441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines uta = unitTests.toArray(uta); 8541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 8641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); 8741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines for (int i = 0; i < uta.length; i++) { 8841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); 8941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); 9041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines listElem.result = uta[i].result; 9141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mListAllocs.set(listElem, i, false); 9241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines uta[i].setItem(listElem); 9341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 9441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mListAllocs.copyAll(); 9641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript.bind_gList(mListAllocs); 9841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 9941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8); 10041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript.set_gFont(mFont); 10141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRS.bindRootScript(mScript); 10341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines test_iter = unitTests.listIterator(); 10541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines refreshTestResults(); /* Kick off the first test */ 10641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 10741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines TimerTask pTask = new TimerTask() { 10841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void run() { 10941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines refreshTestResults(); 11041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 11141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines }; 11241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 11341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer = new Timer(); 11441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); 11541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 11641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 11741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void checkAndRunNextTest() { 11841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (activeTest != null) { 11941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (!activeTest.isAlive()) { 12041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Properly clean up on our last test */ 12141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines try { 12241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines activeTest.join(); 12341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 12441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines catch (InterruptedException e) { 12541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 12641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines activeTest = null; 12741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 12841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 12941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 13041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (!stopTesting && activeTest == null) { 13141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (test_iter.hasNext()) { 13241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines activeTest = test_iter.next(); 13341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines activeTest.start(); 13441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* This routine will only get called once when a new test 13541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * should start running. The message handler in UnitTest.java 13641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines * ensures this. */ 13741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 13841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines else { 13941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mTimer != null) { 14041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer.cancel(); 14141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer.purge(); 14241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer = null; 14341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 14441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 14541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 14641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 14741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 14841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void refreshTestResults() { 14941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines checkAndRunNextTest(); 15041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 15141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mListAllocs != null && mScript != null && mRS != null) { 15241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mListAllocs.copyAll(); 15341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 15441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript.bind_gList(mListAllocs); 15541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mRS.bindRootScript(mScript); 15641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 15741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 15841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 15941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void cleanup() { 16041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines stopTesting = true; 16141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines UnitTest t = activeTest; 16241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 16341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Stop periodic refresh of testing */ 16441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (mTimer != null) { 16541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer.cancel(); 16641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer.purge(); 16741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mTimer = null; 16841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 16941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 17041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines /* Wait to exit until we finish the current test */ 17141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (t != null) { 17241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines try { 17341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines t.join(); 17441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 17541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines catch (InterruptedException e) { 17641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 17741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines t = null; 17841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 17941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 18041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 18141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 18241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void newTouchPosition(float x, float y, float pressure, int id) { 18341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 18441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 18541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void onActionDown(int x, int y) { 18641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript.set_gDY(0.0f); 18741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mLastX = x; 18841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mLastY = y; 18941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines refreshTestResults(); 19041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 19141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 19241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines public void onActionMove(int x, int y) { 19341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int dx = mLastX - x; 19441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines int dy = mLastY - y; 19541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 19641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines if (Math.abs(dy) <= 2) { 19741f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines dy = 0; 19841f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 19941f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 20041f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mScript.set_gDY(dy); 20141f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines 20241f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mLastX = x; 20341f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines mLastY = y; 20441f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines refreshTestResults(); 20541f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines } 20641f1e5edee2d2663ae46b64528894896ff96fa3dStephen Hines} 207