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