1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/* 2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2008-2011 The Android Open Source Project 3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License. 6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at 7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software 11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and 14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License. 15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.test_v14; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context; 20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.res.Resources; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.*; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.ArrayList; 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.ListIterator; 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.Timer; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.TimerTask; 27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class RSTestCore { 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int mWidth; 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int mHeight; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams Context mCtx; 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public RSTestCore(Context ctx) { 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mCtx = ctx; 36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Resources mRes; 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private RenderScriptGL mRS; 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Font mFont; 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ScriptField_ListAllocs_s mListAllocs; 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int mLastX; 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int mLastY; 45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ScriptC_rslist mScript; 46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ArrayList<UnitTest> unitTests; 48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ListIterator<UnitTest> test_iter; 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private UnitTest activeTest; 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private boolean stopTesting; 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Periodic timer for ensuring future tests get scheduled */ 53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Timer mTimer; 54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public static final int RS_TIMER_PERIOD = 100; 55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void init(RenderScriptGL rs, Resources res, int width, int height) { 57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = rs; 58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRes = res; 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mWidth = width; 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mHeight = height; 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams stopTesting = false; 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 63f1d97e536561b4731997c85873dde3b3fb721cb2Stephen Hines mScript = new ScriptC_rslist(mRS); 64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests = new ArrayList<UnitTest>(); 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_primitives(this, mRes, mCtx)); 68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_vector(this, mRes, mCtx)); 69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rsdebug(this, mRes, mCtx)); 70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rstime(this, mRes, mCtx)); 71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rstypes(this, mRes, mCtx)); 72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_alloc(this, mRes, mCtx)); 73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_refcount(this, mRes, mCtx)); 74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_foreach(this, mRes, mCtx)); 75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_math(this, mRes, mCtx)); 76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_fp_mad(this, mRes, mCtx)); 77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* 78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Pass>", 1)); 79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest()); 80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Fail>", -1)); 81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i = 0; i < 20; i++) { 83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Pass>", 1)); 84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams UnitTest [] uta = new UnitTest[unitTests.size()]; 88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams uta = unitTests.toArray(uta); 89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); 91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i = 0; i < uta.length; i++) { 92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); 93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); 94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams listElem.result = uta[i].result; 95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs.set(listElem, i, false); 96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams uta[i].setItem(listElem); 97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs.copyAll(); 100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.bind_gList(mListAllocs); 102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8); 104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.set_gFont(mFont); 105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS.bindRootScript(mScript); 107572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams test_iter = unitTests.listIterator(); 109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); /* Kick off the first test */ 110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams TimerTask pTask = new TimerTask() { 112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void run() { 113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); 114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = new Timer(); 118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); 119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void checkAndRunNextTest() { 122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (activeTest != null) { 123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!activeTest.isAlive()) { 124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Properly clean up on our last test */ 125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest.join(); 127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams catch (InterruptedException e) { 129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest = null; 131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!stopTesting && activeTest == null) { 135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (test_iter.hasNext()) { 136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest = test_iter.next(); 137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest.start(); 138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* This routine will only get called once when a new test 139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * should start running. The message handler in UnitTest.java 140572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * ensures this. */ 141572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams else { 143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTimer != null) { 144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.cancel(); 145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.purge(); 146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = null; 147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void refreshTestResults() { 153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams checkAndRunNextTest(); 154572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mListAllocs != null && mScript != null && mRS != null) { 156572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs.copyAll(); 157572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 158572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.bind_gList(mListAllocs); 159572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS.bindRootScript(mScript); 160572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 161572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 162572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 163572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void cleanup() { 164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams stopTesting = true; 165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams UnitTest t = activeTest; 166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Stop periodic refresh of testing */ 168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTimer != null) { 169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.cancel(); 170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.purge(); 171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = null; 172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Wait to exit until we finish the current test */ 175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (t != null) { 176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t.join(); 178572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 179572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams catch (InterruptedException e) { 180572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 181572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = null; 182572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 184572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 185572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 186572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void newTouchPosition(float x, float y, float pressure, int id) { 187572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 188572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 189572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onActionDown(int x, int y) { 190572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.set_gDY(0.0f); 191572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mLastX = x; 192572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mLastY = y; 193572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); 194572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 195572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 196572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void onActionMove(int x, int y) { 197572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int dx = mLastX - x; 198572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams int dy = mLastY - y; 199572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 200572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (Math.abs(dy) <= 2) { 201572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams dy = 0; 202572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 203572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 204572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mScript.set_gDY(dy); 205572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 206572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mLastX = x; 207572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mLastY = y; 208572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); 209572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 210572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 211