/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.rs.rsov.test; import android.app.ListActivity; import android.renderscript.Allocation; import android.renderscript.RenderScript; import android.widget.ArrayAdapter; import java.util.ArrayList; import java.util.ListIterator; import java.util.Timer; import java.util.TimerTask; public class RSoVTestCore { ListActivity mCtx; public RSoVTestCore(ListActivity ctx) { mCtx = ctx; } private RenderScript mRS; private ArrayList unitTests; private ListIterator test_iter; private UnitTest activeTest; private boolean stopTesting; private ScriptField_ListAllocs_s mListAllocs; private ArrayAdapter testAdapter; /* Periodic timer for ensuring future tests get scheduled */ private Timer mTimer; public static final int RS_TIMER_PERIOD = 100; public void init(RenderScript rs) { mRS = rs; stopTesting = false; unitTests = new ArrayList(); unitTests.add(new UT_invert(this, mCtx)); unitTests.add(new UT_modulo(this, mCtx)); unitTests.add(new UT_multi_kernel(this, mCtx)); unitTests.add(new UT_multi_input(this, mCtx)); unitTests.add(new UT_global_query(this, mCtx)); unitTests.add(new UT_global(this, mCtx)); UnitTest[] uta = new UnitTest[unitTests.size()]; uta = unitTests.toArray(uta); /* mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); for (int i = 0; i < uta.length; i++) { ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); listElem.result = uta[i].getResult(); mListAllocs.set(listElem, i, false); uta[i].setItem(listElem); } mListAllocs.copyAll(); */ testAdapter = new ArrayAdapter(mCtx, android.R.layout.simple_list_item_1, unitTests); mCtx.setListAdapter(testAdapter); test_iter = unitTests.listIterator(); refreshTestResults(); /* Kick off the first test */ TimerTask pTask = new TimerTask() { public void run() { refreshTestResults(); } }; mTimer = new Timer(); mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); } public void checkAndRunNextTest() { mCtx.runOnUiThread(new Runnable() { public void run() { if (testAdapter != null) testAdapter.notifyDataSetChanged(); } }); if (activeTest != null) { if (!activeTest.isAlive()) { /* Properly clean up on our last test */ try { activeTest.join(); } catch (InterruptedException e) { } activeTest = null; } } if (!stopTesting && activeTest == null) { if (test_iter.hasNext()) { activeTest = test_iter.next(); activeTest.start(); /* This routine will only get called once when a new test * should start running. The message handler in UnitTest.java * ensures this. */ } else { if (mTimer != null) { mTimer.cancel(); mTimer.purge(); mTimer = null; } } } } public void refreshTestResults() { checkAndRunNextTest(); } public void cleanup() { stopTesting = true; UnitTest t = activeTest; /* Stop periodic refresh of testing */ if (mTimer != null) { mTimer.cancel(); mTimer.purge(); mTimer = null; } /* Wait to exit until we finish the current test */ if (t != null) { try { t.join(); } catch (InterruptedException e) { } t = null; } } }