12a114bdc64a33df509abb84de1a730ed3be49119Jason Sams/*
2109116bb2f751d84a9ce89ac40c45e76c0aa462cStephen Hines * Copyright (C) 2008-2012 The Android Open Source Project
32a114bdc64a33df509abb84de1a730ed3be49119Jason Sams *
42a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
52a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * you may not use this file except in compliance with the License.
62a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * You may obtain a copy of the License at
72a114bdc64a33df509abb84de1a730ed3be49119Jason Sams *
82a114bdc64a33df509abb84de1a730ed3be49119Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
92a114bdc64a33df509abb84de1a730ed3be49119Jason Sams *
102a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * Unless required by applicable law or agreed to in writing, software
112a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
122a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * See the License for the specific language governing permissions and
142a114bdc64a33df509abb84de1a730ed3be49119Jason Sams * limitations under the License.
152a114bdc64a33df509abb84de1a730ed3be49119Jason Sams */
162a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
172a114bdc64a33df509abb84de1a730ed3be49119Jason Samspackage com.android.rs.test;
182a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
196b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
202a114bdc64a33df509abb84de1a730ed3be49119Jason Samsimport android.content.res.Resources;
212a114bdc64a33df509abb84de1a730ed3be49119Jason Samsimport android.renderscript.*;
222a114bdc64a33df509abb84de1a730ed3be49119Jason Samsimport android.util.Log;
23ff4d70872aa48675a06fc4673c732860c1619758Stephen Hinesimport java.util.ArrayList;
24ff4d70872aa48675a06fc4673c732860c1619758Stephen Hinesimport java.util.ListIterator;
2501f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hinesimport java.util.Timer;
2601f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hinesimport java.util.TimerTask;
272a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
282a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
292a114bdc64a33df509abb84de1a730ed3be49119Jason Samspublic class RSTestCore {
30ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    int mWidth;
31ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    int mHeight;
326b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    Context mCtx;
332a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
346b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public RSTestCore(Context ctx) {
356b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        mCtx = ctx;
362a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    }
372a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
382a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    private Resources mRes;
392a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    private RenderScriptGL mRS;
402a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
41ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    private Font mFont;
42ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    ScriptField_ListAllocs_s mListAllocs;
43ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    int mLastX;
44ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    int mLastY;
45ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    private ScriptC_rslist mScript;
462a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
47ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    private ArrayList<UnitTest> unitTests;
48ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines    private ListIterator<UnitTest> test_iter;
49ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines    private UnitTest activeTest;
5001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    private boolean stopTesting;
5101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
5201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    /* Periodic timer for ensuring future tests get scheduled */
5301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    private Timer mTimer;
5401f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    public static final int RS_TIMER_PERIOD = 100;
55065149f1628a2882a46af810ca9fc3913f7b0438Stephen Hines
562a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    public void init(RenderScriptGL rs, Resources res, int width, int height) {
572a114bdc64a33df509abb84de1a730ed3be49119Jason Sams        mRS = rs;
582a114bdc64a33df509abb84de1a730ed3be49119Jason Sams        mRes = res;
59ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mWidth = width;
60ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mHeight = height;
6101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        stopTesting = false;
62ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
633ba02b3d2f6fb49677466a2e93c96f307d2a7a41Jason Sams        mScript = new ScriptC_rslist(mRS, mRes, R.raw.rslist);
64ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
65ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        unitTests = new ArrayList<UnitTest>();
66ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
676b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        unitTests.add(new UT_primitives(this, mRes, mCtx));
68071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines        unitTests.add(new UT_constant(this, mRes, mCtx));
6979ad3f25bc224a86487aa6cf7b2c7ffe617ee77dStephen Hines        unitTests.add(new UT_vector(this, mRes, mCtx));
7085dae98ca1b9c9a941744c8e757cff86465fe783Stephen Hines        unitTests.add(new UT_unsigned(this, mRes, mCtx));
71330f676b7e282331f6987ca47526d2806a487457Stephen Hines        unitTests.add(new UT_array_init(this, mRes, mCtx));
72adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        unitTests.add(new UT_array_alloc(this, mRes, mCtx));
73263459d028a714d731b4b729547f5989498b137dStephen Hines        unitTests.add(new UT_kernel(this, mRes, mCtx));
74c4358c796022264bef07385b9573aac1241f2ac7Stephen Hines        unitTests.add(new UT_kernel_struct(this, mRes, mCtx));
75d895d37e273503ae334dfd7a5ba60be49fe241bdStephen Hines        unitTests.add(new UT_bug_char(this, mRes, mCtx));
76a25b2e80c7b4af0764e86dd3416c63c1590698d5Stephen Hines        unitTests.add(new UT_clamp(this, mRes, mCtx));
77a25b2e80c7b4af0764e86dd3416c63c1590698d5Stephen Hines        unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx));
7847e432e37cb9d2eb1c08111e8228fa7551c7c49aStephen Hines        unitTests.add(new UT_convert(this, mRes, mCtx));
79724de98edb6de61c12c3d86d8bdfad0652321cceStephen Hines        unitTests.add(new UT_convert_relaxed(this, mRes, mCtx));
8085d4955a13339054ffbd350874b1646125a6a130Jason Sams        unitTests.add(new UT_copy_test(this, mRes, mCtx));
816b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        unitTests.add(new UT_rsdebug(this, mRes, mCtx));
821ac9da6717f27ecfd3c650bd1bfd84d336674dfcStephen Hines        unitTests.add(new UT_rstime(this, mRes, mCtx));
836b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        unitTests.add(new UT_rstypes(this, mRes, mCtx));
84e004058419dc1d3315274dbdf538e57769a2db9cStephen Hines        unitTests.add(new UT_alloc(this, mRes, mCtx));
85cb60fdca9bb89e2042ecfcebf6093fbf88fd0ff0Stephen Hines        unitTests.add(new UT_refcount(this, mRes, mCtx));
861222393e357e97a2218bae8a2a41b7d8031d1171Stephen Hines        unitTests.add(new UT_foreach(this, mRes, mCtx));
87473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines        unitTests.add(new UT_noroot(this, mRes, mCtx));
88109116bb2f751d84a9ce89ac40c45e76c0aa462cStephen Hines        unitTests.add(new UT_atomic(this, mRes, mCtx));
89b1ea64edb0a8bcf23cfe04ec5f51f6ed867d9c74Stephen Hines        unitTests.add(new UT_struct(this, mRes, mCtx));
90688de88b65cdafc62a82a4eb2ff182fd320a0e51Stephen Hines        unitTests.add(new UT_math(this, mRes, mCtx));
9172afa117b773b2e57c7bb17753fd77d5a03af625Stephen Hines        unitTests.add(new UT_math_conformance(this, mRes, mCtx));
92325ca45471862654a70948e09415277d8646c68bRajeev Sharma        unitTests.add(new UT_math_agree(this, mRes, mCtx));
936e1b91775996bf17e6ced3b44ef87eb19ad43221Rajeev Sharma        unitTests.add(new UT_min(this, mRes, mCtx));
947bb5745b970a760de11e71dc06f18ef77e5f4783Stephen Hines        unitTests.add(new UT_int4(this, mRes, mCtx));
95473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines        unitTests.add(new UT_element(this, mRes, mCtx));
96473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines        unitTests.add(new UT_sampler(this, mRes, mCtx));
97473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines        unitTests.add(new UT_program_store(this, mRes, mCtx));
98473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines        unitTests.add(new UT_program_raster(this, mRes, mCtx));
999b9e74eea1435e4c44eced0f65d301ff9c249c6aStephen Hines        unitTests.add(new UT_mesh(this, mRes, mCtx));
1006b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        unitTests.add(new UT_fp_mad(this, mRes, mCtx));
101473a2048d3c54fe38b6f9a58457645c9c472b238Stephen Hines
102ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        /*
103ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        unitTests.add(new UnitTest(null, "<Pass>", 1));
104ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        unitTests.add(new UnitTest());
105ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        unitTests.add(new UnitTest(null, "<Fail>", -1));
106ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines
107ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        for (int i = 0; i < 20; i++) {
108ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines            unitTests.add(new UnitTest(null, "<Pass>", 1));
109ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        }
110ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        */
111ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
112ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        UnitTest [] uta = new UnitTest[unitTests.size()];
113ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        uta = unitTests.toArray(uta);
114ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
115bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines        mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length);
116bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines        for (int i = 0; i < uta.length; i++) {
117bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines            ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item();
1185476b450e50939940dcf3f15c92335cee2fc572dJason Sams            listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT);
119071abd1a5c0b405cd7989a625f34a1e5516db8b7Stephen Hines            listElem.result = uta[i].getResult();
120bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines            mListAllocs.set(listElem, i, false);
121bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines            uta[i].setItem(listElem);
122bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines        }
123bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines
124ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mListAllocs.copyAll();
1252a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
126ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mScript.bind_gList(mListAllocs);
1272a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
128e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk        mFont = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8);
129ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mScript.set_gFont(mFont);
130ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
131bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mRS.bindRootScript(mScript);
132ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines
133ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        test_iter = unitTests.listIterator();
134ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        refreshTestResults(); /* Kick off the first test */
13501f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
13601f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        TimerTask pTask = new TimerTask() {
13701f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            public void run() {
13801f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                refreshTestResults();
13901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            }
14001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        };
14101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
14201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        mTimer = new Timer();
14301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD);
144ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines    }
145ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines
146ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines    public void checkAndRunNextTest() {
147ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        if (activeTest != null) {
148ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines            if (!activeTest.isAlive()) {
149ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                /* Properly clean up on our last test */
150ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                try {
151ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    activeTest.join();
152ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                }
153ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                catch (InterruptedException e) {
154ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                }
155ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                activeTest = null;
156ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines            }
157ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        }
158ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines
15901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        if (!stopTesting && activeTest == null) {
160ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines            if (test_iter.hasNext()) {
161ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                activeTest = test_iter.next();
162ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                activeTest.start();
163ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                /* This routine will only get called once when a new test
164ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                 * should start running. The message handler in UnitTest.java
165ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                 * ensures this. */
166ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines            }
16701f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            else {
16801f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                if (mTimer != null) {
16901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                    mTimer.cancel();
17001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                    mTimer.purge();
17101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                    mTimer = null;
17201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                }
17301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            }
174ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        }
1752a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    }
1762a114bdc64a33df509abb84de1a730ed3be49119Jason Sams
177bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines    public void refreshTestResults() {
178ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        checkAndRunNextTest();
179ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines
180bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines        if (mListAllocs != null && mScript != null && mRS != null) {
181bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines            mListAllocs.copyAll();
182bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines
183bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines            mScript.bind_gList(mListAllocs);
184bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            mRS.bindRootScript(mScript);
185bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines        }
186bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines    }
187bbc529244d7ec0ade499afebe0582be6735a4416Stephen Hines
18801f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    public void cleanup() {
18901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        stopTesting = true;
19001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        UnitTest t = activeTest;
19101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
19201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        /* Stop periodic refresh of testing */
19301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        if (mTimer != null) {
19401f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            mTimer.cancel();
19501f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            mTimer.purge();
19601f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            mTimer = null;
19701f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        }
19801f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
19901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        /* Wait to exit until we finish the current test */
20001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        if (t != null) {
20101f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            try {
20201f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines                t.join();
20301f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            }
20401f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            catch (InterruptedException e) {
20501f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            }
20601f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines            t = null;
20701f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines        }
20801f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
20901f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines    }
21001f0ad7c13b8878c2167bff10ea875d7509edca5Stephen Hines
2112a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    public void newTouchPosition(float x, float y, float pressure, int id) {
2122a114bdc64a33df509abb84de1a730ed3be49119Jason Sams    }
213ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
214ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    public void onActionDown(int x, int y) {
215ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mScript.set_gDY(0.0f);
216ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mLastX = x;
217ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mLastY = y;
218ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        refreshTestResults();
219ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    }
220ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
221ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    public void onActionMove(int x, int y) {
222ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        int dx = mLastX - x;
223ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        int dy = mLastY - y;
224ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
225ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        if (Math.abs(dy) <= 2) {
226ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines            dy = 0;
227ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        }
228ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
229ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mScript.set_gDY(dy);
230ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines
231ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mLastX = x;
232ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines        mLastY = y;
233ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines        refreshTestResults();
234ff4d70872aa48675a06fc4673c732860c1619758Stephen Hines    }
2352a114bdc64a33df509abb84de1a730ed3be49119Jason Sams}
236