1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.cts.compilation; 18 19 import android.app.Activity; 20 import android.os.AsyncTask; 21 22 import java.util.ArrayList; 23 import java.util.Collections; 24 import java.util.List; 25 import java.util.Random; 26 27 /** 28 * A simple activity which can be subjected to (dex to native) compilation. 29 * 30 * If you change this code, you need to regenerate APK and profile using the 31 * the new code - see instructions in {@code assets/README.txt}. 32 */ 33 public class CompilationTargetActivity extends Activity { 34 35 private AsyncTask<Integer, String, Void> mTask; 36 37 @Override 38 protected void onResume() { 39 super.onResume(); 40 setTitle("Starting..."); 41 mTask = new AsyncTask<Integer, String, Void>() { 42 @Override 43 protected Void doInBackground(Integer... params) { 44 int numValues = params[0]; 45 int numIter = params[1]; 46 for (int i = 0; i < numIter; i++) { 47 if (Thread.interrupted()) { 48 break; 49 } 50 publishProgress("Step " + (i+1) + " of " + numIter); 51 List<Integer> values = makeValues(numValues); 52 Collections.shuffle(values); 53 Collections.sort(values); 54 } 55 return null; 56 } 57 58 @Override 59 protected void onProgressUpdate(String... values) { 60 setTitle(values[0]); 61 } 62 63 @Override 64 protected void onPostExecute(Void aVoid) { 65 setTitle("Done"); 66 } 67 }; 68 mTask.execute(1024, 100 * 1000); 69 } 70 71 @Override 72 protected void onPause() { 73 mTask.cancel(/* mayInterruptIfRunning */ true); 74 mTask = null; 75 super.onPause(); 76 } 77 78 private List<Integer> makeValues(int numValues) { 79 List<Integer> result = new ArrayList<>(); 80 Random random = new Random(); 81 for (int i = 0; i < numValues; i++) { 82 int v = dispatch(random.nextInt()); 83 result.add(v); 84 } 85 return result; 86 } 87 88 /** 89 * Dispatches to a bunch of simple methods because JIT profiles are only generated for 90 * apps with enough methods (10, as of May 2016). 91 */ 92 private int dispatch(int i) { 93 int v = Math.abs(i % 100); 94 switch (v) { 95 case 0: return m0(); 96 case 1: return m1(); 97 case 2: return m2(); 98 case 3: return m3(); 99 case 4: return m4(); 100 case 5: return m5(); 101 case 6: return m6(); 102 case 7: return m7(); 103 case 8: return m8(); 104 case 9: return m9(); 105 case 10: return m10(); 106 case 11: return m11(); 107 case 12: return m12(); 108 case 13: return m13(); 109 case 14: return m14(); 110 case 15: return m15(); 111 case 16: return m16(); 112 case 17: return m17(); 113 case 18: return m18(); 114 case 19: return m19(); 115 case 20: return m20(); 116 case 21: return m21(); 117 case 22: return m22(); 118 case 23: return m23(); 119 case 24: return m24(); 120 case 25: return m25(); 121 case 26: return m26(); 122 case 27: return m27(); 123 case 28: return m28(); 124 case 29: return m29(); 125 case 30: return m30(); 126 case 31: return m31(); 127 case 32: return m32(); 128 case 33: return m33(); 129 case 34: return m34(); 130 case 35: return m35(); 131 case 36: return m36(); 132 case 37: return m37(); 133 case 38: return m38(); 134 case 39: return m39(); 135 case 40: return m40(); 136 case 41: return m41(); 137 case 42: return m42(); 138 case 43: return m43(); 139 case 44: return m44(); 140 case 45: return m45(); 141 case 46: return m46(); 142 case 47: return m47(); 143 case 48: return m48(); 144 case 49: return m49(); 145 case 50: return m50(); 146 case 51: return m51(); 147 case 52: return m52(); 148 case 53: return m53(); 149 case 54: return m54(); 150 case 55: return m55(); 151 case 56: return m56(); 152 case 57: return m57(); 153 case 58: return m58(); 154 case 59: return m59(); 155 case 60: return m60(); 156 case 61: return m61(); 157 case 62: return m62(); 158 case 63: return m63(); 159 case 64: return m64(); 160 case 65: return m65(); 161 case 66: return m66(); 162 case 67: return m67(); 163 case 68: return m68(); 164 case 69: return m69(); 165 case 70: return m70(); 166 case 71: return m71(); 167 case 72: return m72(); 168 case 73: return m73(); 169 case 74: return m74(); 170 case 75: return m75(); 171 case 76: return m76(); 172 case 77: return m77(); 173 case 78: return m78(); 174 case 79: return m79(); 175 case 80: return m80(); 176 case 81: return m81(); 177 case 82: return m82(); 178 case 83: return m83(); 179 case 84: return m84(); 180 case 85: return m85(); 181 case 86: return m86(); 182 case 87: return m87(); 183 case 88: return m88(); 184 case 89: return m89(); 185 case 90: return m90(); 186 case 91: return m91(); 187 case 92: return m92(); 188 case 93: return m93(); 189 case 94: return m94(); 190 case 95: return m95(); 191 case 96: return m96(); 192 case 97: return m97(); 193 case 98: return m98(); 194 case 99: return m99(); 195 default: throw new AssertionError(v + " out of bounds"); 196 } 197 } 198 199 public int m0() { return new Random(0).nextInt(); } 200 public int m1() { return new Random(1).nextInt(); } 201 public int m2() { return new Random(2).nextInt(); } 202 public int m3() { return new Random(3).nextInt(); } 203 public int m4() { return new Random(4).nextInt(); } 204 public int m5() { return new Random(5).nextInt(); } 205 public int m6() { return new Random(6).nextInt(); } 206 public int m7() { return new Random(7).nextInt(); } 207 public int m8() { return new Random(8).nextInt(); } 208 public int m9() { return new Random(9).nextInt(); } 209 public int m10() { return new Random(10).nextInt(); } 210 public int m11() { return new Random(11).nextInt(); } 211 public int m12() { return new Random(12).nextInt(); } 212 public int m13() { return new Random(13).nextInt(); } 213 public int m14() { return new Random(14).nextInt(); } 214 public int m15() { return new Random(15).nextInt(); } 215 public int m16() { return new Random(16).nextInt(); } 216 public int m17() { return new Random(17).nextInt(); } 217 public int m18() { return new Random(18).nextInt(); } 218 public int m19() { return new Random(19).nextInt(); } 219 public int m20() { return new Random(20).nextInt(); } 220 public int m21() { return new Random(21).nextInt(); } 221 public int m22() { return new Random(22).nextInt(); } 222 public int m23() { return new Random(23).nextInt(); } 223 public int m24() { return new Random(24).nextInt(); } 224 public int m25() { return new Random(25).nextInt(); } 225 public int m26() { return new Random(26).nextInt(); } 226 public int m27() { return new Random(27).nextInt(); } 227 public int m28() { return new Random(28).nextInt(); } 228 public int m29() { return new Random(29).nextInt(); } 229 public int m30() { return new Random(30).nextInt(); } 230 public int m31() { return new Random(31).nextInt(); } 231 public int m32() { return new Random(32).nextInt(); } 232 public int m33() { return new Random(33).nextInt(); } 233 public int m34() { return new Random(34).nextInt(); } 234 public int m35() { return new Random(35).nextInt(); } 235 public int m36() { return new Random(36).nextInt(); } 236 public int m37() { return new Random(37).nextInt(); } 237 public int m38() { return new Random(38).nextInt(); } 238 public int m39() { return new Random(39).nextInt(); } 239 public int m40() { return new Random(40).nextInt(); } 240 public int m41() { return new Random(41).nextInt(); } 241 public int m42() { return new Random(42).nextInt(); } 242 public int m43() { return new Random(43).nextInt(); } 243 public int m44() { return new Random(44).nextInt(); } 244 public int m45() { return new Random(45).nextInt(); } 245 public int m46() { return new Random(46).nextInt(); } 246 public int m47() { return new Random(47).nextInt(); } 247 public int m48() { return new Random(48).nextInt(); } 248 public int m49() { return new Random(49).nextInt(); } 249 public int m50() { return new Random(50).nextInt(); } 250 public int m51() { return new Random(51).nextInt(); } 251 public int m52() { return new Random(52).nextInt(); } 252 public int m53() { return new Random(53).nextInt(); } 253 public int m54() { return new Random(54).nextInt(); } 254 public int m55() { return new Random(55).nextInt(); } 255 public int m56() { return new Random(56).nextInt(); } 256 public int m57() { return new Random(57).nextInt(); } 257 public int m58() { return new Random(58).nextInt(); } 258 public int m59() { return new Random(59).nextInt(); } 259 public int m60() { return new Random(60).nextInt(); } 260 public int m61() { return new Random(61).nextInt(); } 261 public int m62() { return new Random(62).nextInt(); } 262 public int m63() { return new Random(63).nextInt(); } 263 public int m64() { return new Random(64).nextInt(); } 264 public int m65() { return new Random(65).nextInt(); } 265 public int m66() { return new Random(66).nextInt(); } 266 public int m67() { return new Random(67).nextInt(); } 267 public int m68() { return new Random(68).nextInt(); } 268 public int m69() { return new Random(69).nextInt(); } 269 public int m70() { return new Random(70).nextInt(); } 270 public int m71() { return new Random(71).nextInt(); } 271 public int m72() { return new Random(72).nextInt(); } 272 public int m73() { return new Random(73).nextInt(); } 273 public int m74() { return new Random(74).nextInt(); } 274 public int m75() { return new Random(75).nextInt(); } 275 public int m76() { return new Random(76).nextInt(); } 276 public int m77() { return new Random(77).nextInt(); } 277 public int m78() { return new Random(78).nextInt(); } 278 public int m79() { return new Random(79).nextInt(); } 279 public int m80() { return new Random(80).nextInt(); } 280 public int m81() { return new Random(81).nextInt(); } 281 public int m82() { return new Random(82).nextInt(); } 282 public int m83() { return new Random(83).nextInt(); } 283 public int m84() { return new Random(84).nextInt(); } 284 public int m85() { return new Random(85).nextInt(); } 285 public int m86() { return new Random(86).nextInt(); } 286 public int m87() { return new Random(87).nextInt(); } 287 public int m88() { return new Random(88).nextInt(); } 288 public int m89() { return new Random(89).nextInt(); } 289 public int m90() { return new Random(90).nextInt(); } 290 public int m91() { return new Random(91).nextInt(); } 291 public int m92() { return new Random(92).nextInt(); } 292 public int m93() { return new Random(93).nextInt(); } 293 public int m94() { return new Random(94).nextInt(); } 294 public int m95() { return new Random(95).nextInt(); } 295 public int m96() { return new Random(96).nextInt(); } 296 public int m97() { return new Random(97).nextInt(); } 297 public int m98() { return new Random(98).nextInt(); } 298 public int m99() { return new Random(99).nextInt(); } 299 300 } 301