1648a1c137663ef7207684d0d7009dd5518942111Stephen Hines/* 2648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Copyright (C) 2008-2013 The Android Open Source Project 3648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 4648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * you may not use this file except in compliance with the License. 6648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * You may obtain a copy of the License at 7648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 8648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 10648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Unless required by applicable law or agreed to in writing, software 11648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * See the License for the specific language governing permissions and 14648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * limitations under the License. 15648a1c137663ef7207684d0d7009dd5518942111Stephen Hines */ 16648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 17648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespackage com.android.rs.test_compatlegacy; 18648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 19648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.Context; 20648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.res.Resources; 21648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.support.v8.renderscript.*; 22648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.util.Log; 23648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport java.util.ArrayList; 24648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport java.util.ListIterator; 25648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport java.util.Timer; 26648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport java.util.TimerTask; 27648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.app.ListActivity; 28648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.widget.ArrayAdapter; 29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 30648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class RSTestCore { 31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines ListActivity mCtx; 32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public RSTestCore(ListActivity ctx) { 34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mCtx = ctx; 35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private Resources mRes; 38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private RenderScript mRS; 39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private ArrayList<UnitTest> unitTests; 41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private ListIterator<UnitTest> test_iter; 42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private UnitTest activeTest; 43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private boolean stopTesting; 44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private ScriptField_ListAllocs_s mListAllocs; 46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private ArrayAdapter<UnitTest> testAdapter; 48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* Periodic timer for ensuring future tests get scheduled */ 50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private Timer mTimer; 51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public static final int RS_TIMER_PERIOD = 100; 52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void init(RenderScript rs, Resources res) { 54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRS = rs; 55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRes = res; 56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines stopTesting = false; 57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests = new ArrayList<UnitTest>(); 59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_apitest(this, mRes, mCtx)); 61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_primitives(this, mRes, mCtx)); 62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_instance(this, mRes, mCtx)); 63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_constant(this, mRes, mCtx)); 64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_vector(this, mRes, mCtx)); 65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_unsigned(this, mRes, mCtx)); 66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_array_init(this, mRes, mCtx)); 67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_array_alloc(this, mRes, mCtx)); 68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_alloc_copy(this, mRes, mCtx)); 69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_alloc_copyPadded(this, mRes, mCtx)); 70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_kernel(this, mRes, mCtx)); 71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_kernel_struct(this, mRes, mCtx)); 72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_bug_char(this, mRes, mCtx)); 73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_clamp(this, mRes, mCtx)); 74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx)); 75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_convert(this, mRes, mCtx)); 76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_convert_relaxed(this, mRes, mCtx)); 77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_copy_test(this, mRes, mCtx)); 78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_rsdebug(this, mRes, mCtx)); 79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_rstime(this, mRes, mCtx)); 80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_rstypes(this, mRes, mCtx)); 81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_alloc(this, mRes, mCtx)); 82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_refcount(this, mRes, mCtx)); 83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_foreach(this, mRes, mCtx)); 84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_foreach_bounds(this, mRes, mCtx)); 85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_noroot(this, mRes, mCtx)); 86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_atomic(this, mRes, mCtx)); 87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_struct(this, mRes, mCtx)); 88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_math(this, mRes, mCtx)); 89648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_math_conformance(this, mRes, mCtx)); 90648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_math_agree(this, mRes, mCtx)); 91648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_min(this, mRes, mCtx)); 92648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_int4(this, mRes, mCtx)); 93648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_element(this, mRes, mCtx)); 94648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_sampler(this, mRes, mCtx)); 95648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UT_fp_mad(this, mRes, mCtx)); 96648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 97648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* 98648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 99648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UnitTest()); 100648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UnitTest(null, "<Fail>", -1)); 101648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 102648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int i = 0; i < 20; i++) { 103648a1c137663ef7207684d0d7009dd5518942111Stephen Hines unitTests.add(new UnitTest(null, "<Pass>", 1)); 104648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 105648a1c137663ef7207684d0d7009dd5518942111Stephen Hines */ 106648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 107648a1c137663ef7207684d0d7009dd5518942111Stephen Hines UnitTest [] uta = new UnitTest[unitTests.size()]; 108648a1c137663ef7207684d0d7009dd5518942111Stephen Hines uta = unitTests.toArray(uta); 109648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 110648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); 111648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int i = 0; i < uta.length; i++) { 112648a1c137663ef7207684d0d7009dd5518942111Stephen Hines ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); 113648a1c137663ef7207684d0d7009dd5518942111Stephen Hines listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); 114648a1c137663ef7207684d0d7009dd5518942111Stephen Hines listElem.result = uta[i].getResult(); 115648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mListAllocs.set(listElem, i, false); 116648a1c137663ef7207684d0d7009dd5518942111Stephen Hines uta[i].setItem(listElem); 117648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 118648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 119648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mListAllocs.copyAll(); 120648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 121648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testAdapter = new ArrayAdapter<UnitTest>(mCtx, android.R.layout.simple_list_item_1, unitTests); 122648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mCtx.setListAdapter(testAdapter); 123648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 124648a1c137663ef7207684d0d7009dd5518942111Stephen Hines test_iter = unitTests.listIterator(); 125648a1c137663ef7207684d0d7009dd5518942111Stephen Hines refreshTestResults(); /* Kick off the first test */ 126648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 127648a1c137663ef7207684d0d7009dd5518942111Stephen Hines TimerTask pTask = new TimerTask() { 128648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void run() { 129648a1c137663ef7207684d0d7009dd5518942111Stephen Hines refreshTestResults(); 130648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 131648a1c137663ef7207684d0d7009dd5518942111Stephen Hines }; 132648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 133648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer = new Timer(); 134648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); 135648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 136648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 137648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void checkAndRunNextTest() { 138648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mCtx.runOnUiThread(new Runnable() { 139648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void run() { 140648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (testAdapter != null) 141648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testAdapter.notifyDataSetChanged(); 142648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 143648a1c137663ef7207684d0d7009dd5518942111Stephen Hines }); 144648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 145648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (activeTest != null) { 146648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (!activeTest.isAlive()) { 147648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* Properly clean up on our last test */ 148648a1c137663ef7207684d0d7009dd5518942111Stephen Hines try { 149648a1c137663ef7207684d0d7009dd5518942111Stephen Hines activeTest.join(); 150648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 151648a1c137663ef7207684d0d7009dd5518942111Stephen Hines catch (InterruptedException e) { 152648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 153648a1c137663ef7207684d0d7009dd5518942111Stephen Hines activeTest = null; 154648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 155648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 156648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 157648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (!stopTesting && activeTest == null) { 158648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (test_iter.hasNext()) { 159648a1c137663ef7207684d0d7009dd5518942111Stephen Hines activeTest = test_iter.next(); 160648a1c137663ef7207684d0d7009dd5518942111Stephen Hines activeTest.start(); 161648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* This routine will only get called once when a new test 162648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * should start running. The message handler in UnitTest.java 163648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * ensures this. */ 164648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 165648a1c137663ef7207684d0d7009dd5518942111Stephen Hines else { 166648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (mTimer != null) { 167648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer.cancel(); 168648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer.purge(); 169648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer = null; 170648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 171648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 172648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 173648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 174648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 175648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void refreshTestResults() { 176648a1c137663ef7207684d0d7009dd5518942111Stephen Hines checkAndRunNextTest(); 177648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 178648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 179648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void cleanup() { 180648a1c137663ef7207684d0d7009dd5518942111Stephen Hines stopTesting = true; 181648a1c137663ef7207684d0d7009dd5518942111Stephen Hines UnitTest t = activeTest; 182648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 183648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* Stop periodic refresh of testing */ 184648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (mTimer != null) { 185648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer.cancel(); 186648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer.purge(); 187648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mTimer = null; 188648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 189648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 190648a1c137663ef7207684d0d7009dd5518942111Stephen Hines /* Wait to exit until we finish the current test */ 191648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (t != null) { 192648a1c137663ef7207684d0d7009dd5518942111Stephen Hines try { 193648a1c137663ef7207684d0d7009dd5518942111Stephen Hines t.join(); 194648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 195648a1c137663ef7207684d0d7009dd5518942111Stephen Hines catch (InterruptedException e) { 196648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 197648a1c137663ef7207684d0d7009dd5518942111Stephen Hines t = null; 198648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 199648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 200648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 201648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 202648a1c137663ef7207684d0d7009dd5518942111Stephen Hines} 203