1dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines/* 2dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Copyright (C) 2008-2011 The Android Open Source Project 3dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 4dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * you may not use this file except in compliance with the License. 6dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * You may obtain a copy of the License at 7dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 8dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * 10dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * Unless required by applicable law or agreed to in writing, software 11dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * See the License for the specific language governing permissions and 14dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * limitations under the License. 15dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines */ 16dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 17dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespackage com.android.rs.test_v16; 18dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 19dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.content.Context; 20dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.content.res.Resources; 21dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.renderscript.*; 22dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport android.util.Log; 23dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.ArrayList; 24dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.ListIterator; 25dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.Timer; 26dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinesimport java.util.TimerTask; 27dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 28dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 29dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hinespublic class RSTestCore { 30dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int mWidth; 31dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int mHeight; 32dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines Context mCtx; 33dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 34dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public RSTestCore(Context ctx) { 35dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mCtx = ctx; 36dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 37dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 38dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private Resources mRes; 39dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private RenderScriptGL mRS; 40dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 41dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private Font mFont; 42dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines ScriptField_ListAllocs_s mListAllocs; 43dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int mLastX; 44dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int mLastY; 45dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private ScriptC_rslist mScript; 46dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 47dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private ArrayList<UnitTest> unitTests; 48dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private ListIterator<UnitTest> test_iter; 49dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private UnitTest activeTest; 50dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private boolean stopTesting; 51dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 52dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* Periodic timer for ensuring future tests get scheduled */ 53dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines private Timer mTimer; 54dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public static final int RS_TIMER_PERIOD = 100; 55dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 56dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void init(RenderScriptGL rs, Resources res, int width, int height) { 57dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRS = rs; 58dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRes = res; 59dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mWidth = width; 60dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mHeight = height; 61dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines stopTesting = false; 62dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 63f1d97e536561b4731997c85873dde3b3fb721cb2Stephen Hines mScript = new ScriptC_rslist(mRS); 64dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 65dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests = new ArrayList<UnitTest>(); 66dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 67dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_primitives(this, mRes, mCtx)); 68dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_vector(this, mRes, mCtx)); 69dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_rsdebug(this, mRes, mCtx)); 70dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_rstime(this, mRes, mCtx)); 71dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_rstypes(this, mRes, mCtx)); 72dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_alloc(this, mRes, mCtx)); 73dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_refcount(this, mRes, mCtx)); 74dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_foreach(this, mRes, mCtx)); 75dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_math(this, mRes, mCtx)); 76dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UT_fp_mad(this, mRes, mCtx)); 77dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* 78dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 79dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UnitTest()); 80dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UnitTest(null, "<Fail>", -1)); 81dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 82dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines for (int i = 0; i < 20; i++) { 83dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 84dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 85dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines */ 86dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 87dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines UnitTest [] uta = new UnitTest[unitTests.size()]; 88dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines uta = unitTests.toArray(uta); 89dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 90dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); 91dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines for (int i = 0; i < uta.length; i++) { 92dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); 93dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); 94dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines listElem.result = uta[i].result; 95dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mListAllocs.set(listElem, i, false); 96dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines uta[i].setItem(listElem); 97dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 98dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 99dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mListAllocs.copyAll(); 100dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 101dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mScript.bind_gList(mListAllocs); 102dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 103dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8); 104dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mScript.set_gFont(mFont); 105dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 106dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRS.bindRootScript(mScript); 107dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 108dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines test_iter = unitTests.listIterator(); 109dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines refreshTestResults(); /* Kick off the first test */ 110dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 111dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines TimerTask pTask = new TimerTask() { 112dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void run() { 113dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines refreshTestResults(); 114dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 115dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines }; 116dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 117dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer = new Timer(); 118dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); 119dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 120dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 121dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void checkAndRunNextTest() { 122dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (activeTest != null) { 123dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (!activeTest.isAlive()) { 124dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* Properly clean up on our last test */ 125dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines try { 126dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines activeTest.join(); 127dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 128dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines catch (InterruptedException e) { 129dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 130dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines activeTest = null; 131dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 132dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 133dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 134dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (!stopTesting && activeTest == null) { 135dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (test_iter.hasNext()) { 136dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines activeTest = test_iter.next(); 137dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines activeTest.start(); 138dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* This routine will only get called once when a new test 139dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * should start running. The message handler in UnitTest.java 140dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines * ensures this. */ 141dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 142dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines else { 143dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (mTimer != null) { 144dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer.cancel(); 145dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer.purge(); 146dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer = null; 147dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 148dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 149dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 150dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 151dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 152dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void refreshTestResults() { 153dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines checkAndRunNextTest(); 154dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 155dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (mListAllocs != null && mScript != null && mRS != null) { 156dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mListAllocs.copyAll(); 157dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 158dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mScript.bind_gList(mListAllocs); 159dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mRS.bindRootScript(mScript); 160dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 161dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 162dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 163dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void cleanup() { 164dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines stopTesting = true; 165dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines UnitTest t = activeTest; 166dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 167dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* Stop periodic refresh of testing */ 168dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (mTimer != null) { 169dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer.cancel(); 170dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer.purge(); 171dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mTimer = null; 172dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 173dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 174dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines /* Wait to exit until we finish the current test */ 175dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (t != null) { 176dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines try { 177dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines t.join(); 178dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 179dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines catch (InterruptedException e) { 180dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 181dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines t = null; 182dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 183dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 184dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 185dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 186dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void newTouchPosition(float x, float y, float pressure, int id) { 187dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 188dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 189dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void onActionDown(int x, int y) { 190dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mScript.set_gDY(0.0f); 191dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mLastX = x; 192dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mLastY = y; 193dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines refreshTestResults(); 194dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 195dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 196dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines public void onActionMove(int x, int y) { 197dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int dx = mLastX - x; 198dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines int dy = mLastY - y; 199dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 200dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines if (Math.abs(dy) <= 2) { 201dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines dy = 0; 202dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 203dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 204dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mScript.set_gDY(dy); 205dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines 206dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mLastX = x; 207dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines mLastY = y; 208dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines refreshTestResults(); 209dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines } 210dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines} 211