RSTestCore.java revision dbfa0bfd5516270482ebb9eff483ea058dfa19a9
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
63dbfa0bfd5516270482ebb9eff483ea058dfa19a9Stephen Hines        mScript = new ScriptC_rslist(mRS, mRes, R.raw.rslist);
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