14546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond/* 24546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * Copyright (C) 2016 The Android Open Source Project 34546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * 44546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * Licensed under the Apache License, Version 2.0 (the "License"); 54546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * you may not use this file except in compliance with the License. 64546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * You may obtain a copy of the License at 74546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * 84546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * http://www.apache.org/licenses/LICENSE-2.0 94546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * 104546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * Unless required by applicable law or agreed to in writing, software 114546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * distributed under the License is distributed on an "AS IS" BASIS, 124546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * See the License for the specific language governing permissions and 144546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * limitations under the License. 154546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond */ 164546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 174546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond/* This application is a simple scheduler for testing the lldb debugger 184546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * implementation for general reduction kernels. 194546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * 204546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond * It launches one of two simple reductions in a loop 214546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond */ 224546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 234546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondpackage com.android.rs.lldbreductiontest; 244546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 254546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.app.Activity; 264546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.content.Context; 274546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.content.res.Resources; 284546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.os.Handler; 294546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.os.Bundle; 304546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.util.Log; 314546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport android.renderscript.*; 324546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 334546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport java.lang.Float; 344546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport java.lang.Math; 354546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport java.util.ArrayList; 364546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport java.util.Arrays; 374546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondimport java.util.Random; 384546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 394546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummondpublic class MainActivity extends Activity { 404546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond static private int idxOffset = 10; 414546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond static private int mX = 128; 424546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond static private int mY = 2; 434546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond static private int mZ = 2; 444546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond static private float mMultiplier = 2.f; 454546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private RenderScript mRS; 464546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private ScriptC_reduce mScript; 474546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private ScriptC_reduce_auto_comb mScript_auto_comb; 484546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 494546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond @Override 504546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond protected void onCreate(Bundle savedInstanceState) { 514546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond super.onCreate(savedInstanceState); 524546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond initRS(); 534546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 544546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond int loopDelayMillis = 1000; 554546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond Handler loopHandler = new Handler(); 564546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond loopHandler.postDelayed(new Runnable() { 574546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond @Override 584546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond public void run() { 594546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond runRS(); 604546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond loopHandler.postDelayed(this, loopDelayMillis); 614546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 624546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond }, loopDelayMillis); 634546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 644546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 654546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private float findMinUserTypeAutoComb( 664546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond RenderScript rs, ScriptC_reduce_auto_comb s, Allocation alloc) { 674546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_a_startval(mX); 684546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_b_startval(mY); 694546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_multiplier(mMultiplier); 704546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 714546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond return s.reduce_find_min_user_type_auto_comb(alloc).get(); 724546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 734546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 744546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private float findMinUserType(RenderScript rs, ScriptC_reduce s, Allocation alloc) { 754546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_a_startval(mX); 764546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_b_startval(mY); 774546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond s.set_multiplier(mMultiplier); 784546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 794546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond return s.reduce_find_min_user_type(alloc).get(); 804546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 814546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 824546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private float findMinUserType1DAutoComb(RenderScript rs, ScriptC_reduce_auto_comb s, int xCount) { 834546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond ScriptField_MinUserType minUserType = new ScriptField_MinUserType(rs, xCount); 844546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond for (int i = 0; i < xCount; i++) { 854546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond ScriptField_MinUserType.Item val = new ScriptField_MinUserType.Item(); 864546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond val.a = i + idxOffset; 874546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond val.b = i + idxOffset; 884546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond minUserType.set(val, i, true); 894546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 904546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 914546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond Allocation alloc = minUserType.getAllocation(); 924546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 934546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond return findMinUserTypeAutoComb(rs, s, alloc); 944546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 954546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 964546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond private float findMinUserType1D(RenderScript rs, ScriptC_reduce s, int xCount) { 974546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond ScriptField_MinUserType minUserType = new ScriptField_MinUserType(rs, xCount); 984546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond for (int i = 0; i < xCount; i++) { 994546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond ScriptField_MinUserType.Item val = new ScriptField_MinUserType.Item(); 1004546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond val.a = i + idxOffset; 1014546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond val.b = i + idxOffset; 1024546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond minUserType.set(val, i, true); 1034546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 1044546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 1054546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond Allocation alloc = minUserType.getAllocation(); 1064546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 1074546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond return findMinUserType(rs, s, alloc); 1084546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 1094546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 1104546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond public void initRS() { 1114546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond mRS = RenderScript.create(this, RenderScript.ContextType.NORMAL, 1124546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond RenderScript.CREATE_FLAG_LOW_LATENCY | RenderScript.CREATE_FLAG_WAIT_FOR_ATTACH); 1134546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond mScript = new ScriptC_reduce(mRS); 1144546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond mScript_auto_comb = new ScriptC_reduce_auto_comb(mRS); 1154546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 1164546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 1174546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond public void runRS() { 1184546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond findMinUserType1D(mRS, mScript, mX); 1194546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond findMinUserType1DAutoComb(mRS, mScript_auto_comb, mX); 1204546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 1214546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond 1224546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond public void onDestroy() { 1234546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond mRS.finish(); 1244546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond mRS.destroy(); 1254546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond } 1264546f4b74db2655d36b2e19d1e839d7ef37cb27cLuke Drummond} 127