16b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn/* 26b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project 36b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * 46b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 56b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * you may not use this file except in compliance with the License. 66b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * You may obtain a copy of the License at 76b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * 86b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 96b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * 106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * See the License for the specific language governing permissions and 146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn * limitations under the License. 156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn */ 166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornpackage com.android.frameworkperf; 186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport java.io.File; 206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport java.io.FileNotFoundException; 216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport java.io.FileOutputStream; 226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport java.io.IOException; 236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport java.io.RandomAccessFile; 24f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.lang.String; 25f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.HashMap; 26f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.Random; 276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 28f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport android.util.ArrayMap; 296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport org.xmlpull.v1.XmlPullParser; 306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport org.xmlpull.v1.XmlPullParserException; 316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.app.Service; 336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.Context; 346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.Intent; 356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.pm.PackageManager; 366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.res.TypedArray; 376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.res.XmlResourceParser; 386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.graphics.Bitmap; 396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.graphics.BitmapFactory; 404c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tateimport android.graphics.Paint; 416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Bundle; 426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.FileUtils; 436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Handler; 446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.IBinder; 456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Looper; 466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Message; 476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Messenger; 486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Process; 496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.RemoteException; 506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.SystemClock; 516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.AttributeSet; 526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.DisplayMetrics; 536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.Log; 546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.Xml; 556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.view.LayoutInflater; 566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornpublic class TestService extends Service { 586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final String TAG = "Perf"; 596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final static Op[] mOpPairs = new Op[] { 616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new NoOp(), 626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CpuOp(), 636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new SchedulerOp(), 646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new GcOp(), 656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateFileOp(), 666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateWriteFileOp(), 676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateWriteSyncFileOp(), 686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new WriteFileOp(), 696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new ReadFileOp(), 706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new SchedulerOp(), new SchedulerOp(), 716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new GcOp(), new NoOp(), 724c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new ObjectGcOp(), new NoOp(), 734c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new FinalizingGcOp(), new NoOp(), 744c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new PaintGcOp(), new NoOp(), 756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new NoOp(), 766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CpuOp(), 776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new SchedulerOp(), 786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new GcOp(), 796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateFileOp(), 806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateWriteFileOp(), 816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateWriteSyncFileOp(), 826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new WriteFileOp(), 836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new ReadFileOp(), 846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateFileOp(), new NoOp(), 856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteFileOp(), new NoOp(), 866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteSyncFileOp(), new NoOp(), 876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new NoOp(), 886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new NoOp(), 896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new CreateWriteFileOp(), 906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new CreateWriteFileOp(), 916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new CreateWriteSyncFileOp(), 926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new CreateWriteSyncFileOp(), 936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new WriteFileOp(), 946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new ReadFileOp(), 956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new WriteFileOp(), 966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new ReadFileOp(), 976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new OpenXmlResOp(), new NoOp(), 986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadXmlAttrsOp(), new NoOp(), 996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseXmlResOp(), new NoOp(), 1006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseLargeXmlResOp(), new NoOp(), 1016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterOp(), new NoOp(), 1026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterLargeOp(), new NoOp(), 1036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterViewOp(), new NoOp(), 1046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterButtonOp(), new NoOp(), 1056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterImageButtonOp(), new NoOp(), 1066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateBitmapOp(), new NoOp(), 1076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateRecycleBitmapOp(), new NoOp(), 1086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallBitmapOp(), new NoOp(), 1096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleSmallBitmapOp(), new NoOp(), 1106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeBitmapOp(), new NoOp(), 1116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleLargeBitmapOp(), new NoOp(), 1126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallScaledBitmapOp(), new NoOp(), 1136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeScaledBitmapOp(), new NoOp(), 1146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final static Op[] mAvailOps = new Op[] { 1176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn null, 1186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new NoOp(), 1196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CpuOp(), 1206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new SchedulerOp(), 1216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), 1224c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new GcOp(), 1234c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new ObjectGcOp(), 1244c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new FinalizingGcOp(), 1254c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate new PaintGcOp(), 1266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), 1276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateFileOp(), 1286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteFileOp(), 1296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteSyncFileOp(), 1306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), 1316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), 1326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new OpenXmlResOp(), 1336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadXmlAttrsOp(), 1346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseXmlResOp(), 1356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseLargeXmlResOp(), 1366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterOp(), 1376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterLargeOp(), 1386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterViewOp(), 1396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterButtonOp(), 1406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterImageButtonOp(), 1416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateBitmapOp(), 1426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateRecycleBitmapOp(), 1436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallBitmapOp(), 1446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleSmallBitmapOp(), 1456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeBitmapOp(), 1466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleLargeBitmapOp(), 1476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallScaledBitmapOp(), 1486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeScaledBitmapOp(), 149f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowTinyHashMapOp(), 150f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowTinyArrayMapOp(), 151f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowSmallHashMapOp(), 152f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowSmallArrayMapOp(), 153f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowLargeHashMapOp(), 154f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new GrowLargeArrayMapOp(), 155f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupTinyHashMapOp(), 156f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupTinyArrayMapOp(), 157f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupSmallHashMapOp(), 158f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupSmallArrayMapOp(), 159f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupLargeHashMapOp(), 160f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn new LookupLargeArrayMapOp(), 1616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int CMD_START_TEST = 1; 1646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int CMD_TERMINATE = 2; 165dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn 166dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn static final int MSG_REALLY_START = 1000; 167dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn static final int MSG_REALLY_TERMINATE = 1001; 168dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn 1696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int RES_TEST_FINISHED = 1; 1706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int RES_TERMINATED = 2; 1716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Handler mHandler = new Handler() { 1736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void handleMessage(Message msg) { 1746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn switch (msg.what) { 1756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn case CMD_START_TEST: { 176dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // Give a little time for things to settle down. 177dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Message newMsg = Message.obtain(null, MSG_REALLY_START); 178dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn newMsg.obj = msg.obj; 179dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn newMsg.replyTo = msg.replyTo; 180dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn sendMessageDelayed(newMsg, 500); 181dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } break; 182dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn case MSG_REALLY_START: { 1836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = (Bundle)msg.obj; 1846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.setClassLoader(getClassLoader()); 1856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final TestArgs args = (TestArgs)bundle.getParcelable("args"); 1866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Messenger replyTo = msg.replyTo; 1876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRunner.run(this, args, new Runnable() { 1886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 1896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (replyTo != null) { 1906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message msg = Message.obtain(null, RES_TEST_FINISHED); 1916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = new Bundle(); 1926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.putParcelable("res", new RunResult(mRunner)); 1936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn msg.obj = bundle; 1946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 1956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn replyTo.send(msg); 1966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 1976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }); 2016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } break; 2026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn case CMD_TERMINATE: { 203dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // Give a little time for things to settle down. 204dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Message newMsg = Message.obtain(null, MSG_REALLY_TERMINATE); 205dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn newMsg.obj = msg.obj; 206dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn newMsg.replyTo = msg.replyTo; 207dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn sendMessageDelayed(newMsg, 50); 208dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } break; 209dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn case MSG_REALLY_TERMINATE: { 2106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (msg.replyTo != null) { 2116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message reply = Message.obtain(null, RES_TERMINATED); 2126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 2136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn msg.replyTo.send(reply); 2146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 2156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn terminate(); 218dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } break; 2196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 2226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final TestRunner mRunner = new TestRunner(); 2246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override 2266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public IBinder onBind(Intent intent) { 2276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return (new Messenger(mHandler)).getBinder(); 2286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void terminate() { 231dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Runtime.getRuntime().exit(0); 2326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn enum BackgroundMode { 2356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn NOTHING, 2366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CPU, 2376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SCHEDULER 2386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 2396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public class TestRunner { 2416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Handler mHandler; 2426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mMaxRunTime; 24380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate long mMaxOps; 2446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Op mForegroundOp; 2456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Op mBackgroundOp; 2466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Runnable mDoneCallback; 2476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread mBackgroundThread; 2496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread mForegroundThread; 2506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mStartTime; 2516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean mBackgroundRunning; 2536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean mForegroundRunning; 2546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mBackgroundEndTime; 2566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mBackgroundOps; 2576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mForegroundEndTime; 2586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mForegroundOps; 2596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public TestRunner() { 2616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getForegroundName() { 2646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOp.getName(); 2656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getBackgroundName() { 2686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOp.getName(); 2696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getName() { 2726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String fgName = mForegroundOp.getName(); 2736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String bgName = mBackgroundOp.getName(); 2746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn StringBuilder res = new StringBuilder(); 2756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (fgName != null) { 2766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append(fgName); 2776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append("Fg"); 2786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (bgName != null) { 2806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append(bgName); 2816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append("Bg"); 2826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return res.toString(); 2846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getForegroundLongName() { 2876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOp.getLongName(); 2886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getBackgroundLongName() { 2916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOp.getLongName(); 2926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public void run(Handler handler, TestArgs args, Runnable doneCallback) { 2956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler = handler; 2966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mMaxRunTime = args.maxTime; 29780a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mMaxOps = args.maxOps; 2986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (args.combOp >= 0) { 2996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp = mOpPairs[args.combOp]; 3006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp = mOpPairs[args.combOp+1]; 3016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 3026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp = mAvailOps[args.fgOp]; 3036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp = mAvailOps[args.bgOp]; 3046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mDoneCallback = doneCallback; 3066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundThread = new RunnerThread("background", new Runnable() { 3076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 3086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean running; 3096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int ops = 0; 3106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 3116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn running = mBackgroundOp.onRun(); 3126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ops++; 3136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (evalRepeat(running, true) && running); 3146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundEndTime = SystemClock.uptimeMillis(); 3156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOps = ops * mBackgroundOp.getOpsPerRun(); 3166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn threadFinished(false); 3176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }, Process.THREAD_PRIORITY_BACKGROUND); 319df7221ced3b7cd807f14e84c302fc09fd659fd68Dianne Hackborn mForegroundThread = new RunnerThread("foreground", new Runnable() { 3206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 3216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean running; 3226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int ops = 0; 3236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 3246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn running = mForegroundOp.onRun(); 3256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ops++; 3266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (evalRepeat(true, running) && running); 3276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundEndTime = SystemClock.uptimeMillis(); 3286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOps = ops * mForegroundOp.getOpsPerRun(); 3296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn threadFinished(true); 3306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }, Process.THREAD_PRIORITY_FOREGROUND); 3326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp.onInit(TestService.this, true); 3346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp.onInit(TestService.this, false); 3356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 3376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mStartTime = SystemClock.uptimeMillis(); 3386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = true; 3396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = true; 3406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundThread.start(); 3436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundThread.start(); 3446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getForegroundTime() { 3476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundEndTime-mStartTime; 3486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getForegroundOps() { 3516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOps; 3526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getBackgroundTime() { 3556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundEndTime-mStartTime; 3566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getBackgroundOps() { 3596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOps; 3606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private boolean evalRepeat(boolean bgRunning, boolean fgRunning) { 3636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 3646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!bgRunning) { 3656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = false; 3666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!fgRunning) { 3686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = false; 3696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!mBackgroundRunning && !mForegroundRunning) { 3716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return false; 3726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 37380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (mMaxOps > 0) { 37480a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate // iteration-limited case 37580a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (mForegroundOps >= mMaxOps) { 37680a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate return false; 37780a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } 37880a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mForegroundOps++; 37980a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } else { 38080a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate // time-limited case 38180a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate long now = SystemClock.uptimeMillis(); 38280a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (now > (mStartTime+mMaxRunTime)) { 38380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate return false; 38480a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } 3856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 3876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private void threadFinished(boolean foreground) { 3916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 3926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (foreground) { 3936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = false; 3946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 3956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = false; 3966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!mBackgroundRunning && !mForegroundRunning) { 3986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler.post(new Runnable() { 3996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 4006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp.onTerm(TestService.this); 4016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp.onTerm(TestService.this); 4026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mDoneCallback != null) { 4036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mDoneCallback.run(); 4046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }); 4076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn class RunnerThread extends Thread { 4136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private final Runnable mOp; 4146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private final int mPriority; 4156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread(String name, Runnable op, int priority) { 4176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super(name); 4186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mOp = op; 4196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPriority = priority; 4206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public void run() { 4236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(mPriority); 4246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mOp.run(); 4256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static public abstract class Op { 4296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final String mName; 4306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final String mLongName; 4316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public Op(String name, String longName) { 4336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mName = name; 4346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mLongName = longName; 4356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getName() { 4386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mName; 4396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getLongName() { 4426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mLongName; 4436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 4466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn abstract boolean onRun(); 4496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 4516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 1; 4556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class NoOp extends Op { 4596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn NoOp() { 4606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super(null, "Nothing"); 4616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return false; 4656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 0; 4696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CpuOp extends Op { 4736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CpuOp() { 4746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CPU", "Consume CPU"); 4756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class SchedulerOp extends Op { 4836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SchedulerOp() { 4846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Sched", "Change scheduler group"); 4856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND); 4896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); 4906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class GcOp extends Op { 4956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn GcOp() { 4966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Gc", "Run garbage collector"); 4976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] stuff = new byte[1024*1024]; 5016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5054c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate static class ObjectGcOp extends Op { 5064c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate ObjectGcOp() { 5074c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate super("ObjectGc", "Run garbage collector with simple objects"); 5084c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5094c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5104c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate boolean onRun() { 5114c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate Object obj = new Object(); 5124c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate return true; 5134c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5144c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5154c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5164c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate static class FinalizingGcOp extends Op { 5174c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate class Finalizable { 5184c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate Finalizable() {} 5194c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate @Override 5204c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate protected void finalize() throws Throwable { 5214c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate super.finalize(); 5224c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5234c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5244c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5254c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate FinalizingGcOp() { 5264c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate super("FinalizingGc", "Run garbage collector with finalizable objects"); 5274c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5284c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5294c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate boolean onRun() { 5304c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate Finalizable obj = new Finalizable(); 5314c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate return true; 5324c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5334c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5344c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5354c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate static class PaintGcOp extends Op { 5364c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate PaintGcOp() { 5374c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate super("PaintGc", "Run garbage collector with Paint objects"); 5384c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5394c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5404c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate boolean onRun() { 5414c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate Paint p = new Paint(); 5424c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate return true; 5434c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5444c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate } 5454c18ad56f7e9b84bb075fd39c8e712c7871430a0Christopher Tate 5466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class MethodCallOp extends Op { 5476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn MethodCallOp() { 5486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("MethodCall", "Method call"); 5496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final int N = getOpsPerRun(); 5536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<N; i++) { 5546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn someFunc(i); 5556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int someFunc(int foo) { 5606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 0; 5616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 5646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 500; 5656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class IpcOp extends Op { 5696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn PackageManager mPm; 5706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String mProcessName; 5716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn IpcOp() { 5736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Ipc", "IPC to system process"); 5746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 5776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPm = context.getPackageManager(); 5786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mProcessName = context.getApplicationInfo().processName; 5796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final int N = getOpsPerRun(); 5836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<N; i++) { 5846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPm.queryContentProviders(mProcessName, Process.myUid(), 0); 5856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 5906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 100; 5916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class OpenXmlResOp extends Op { 5956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 5966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn OpenXmlResOp() { 5986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("OpenXmlRes", "Open (and close) an XML resource"); 5996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn XmlResourceParser parser = mContext.getResources().getLayout(R.xml.simple); 6076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn parser.close(); 6086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ReadXmlAttrsOp extends Op { 6136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn XmlResourceParser mParser; 6156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn AttributeSet mAttrs; 6166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ReadXmlAttrsOp() { 6186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ReadXmlAttrs", "Read attributes from an XML tag"); 6196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mParser = mContext.getResources().getLayout(R.xml.simple); 6246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mAttrs = Xml.asAttributeSet(mParser); 6256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int eventType; 6276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 6286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn // Find the first <item> tag. 6296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn eventType = mParser.getEventType(); 6306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String tagName; 6316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 6326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (eventType == XmlPullParser.START_TAG) { 6336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn tagName = mParser.getName(); 6346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (tagName.equals("item")) { 6356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn break; 6366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn eventType = mParser.next(); 6396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (eventType != XmlPullParser.END_DOCUMENT); 6406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (XmlPullParserException e) { 6416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn throw new RuntimeException("I died", e); 6426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 6436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn throw new RuntimeException("I died", e); 6446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 6486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mParser.close(); 6496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TypedArray a = mContext.obtainStyledAttributes(mAttrs, 6536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn com.android.internal.R.styleable.MenuItem); 6546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn a.recycle(); 6556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ParseXmlResOp extends Op { 6606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ParseXmlResOp() { 6636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ParseXmlRes", "Parse compiled XML resource"); 6646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SimpleInflater inf = new SimpleInflater(mContext); 6726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.xml.simple); 6736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ParseLargeXmlResOp extends Op { 6786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ParseLargeXmlResOp() { 6816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ParseLargeXmlRes", "Parse large XML resource"); 6826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SimpleInflater inf = new SimpleInflater(mContext); 6906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.xml.simple_large); 6916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterOp extends Op { 6966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterOp() { 6996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflater", "Inflate layout resource"); 7006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 7126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.small_layout, null); 7136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterLargeOp extends Op { 7186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterLargeOp() { 7216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterLarge", "Inflate large layout resource"); 7226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 7346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.large_layout, null); 7356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterViewOp extends Op { 7406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterViewOp() { 7436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterView", "Inflate layout with 50 View objects"); 7446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 7566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.view_layout, null); 7576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterButtonOp extends Op { 7626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterButtonOp() { 7656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterButton", "Inflate layout with 50 Button objects"); 7666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 7786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.button_layout, null); 7796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterImageButtonOp extends Op { 7846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterImageButtonOp() { 7876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterImageButton", "Inflate layout with 50 ImageButton objects"); 7886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 8006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.image_button_layout, null); 8016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateBitmapOp extends Op { 8066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateBitmapOp() { 8096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateBitmap", "Create a Bitmap"); 8106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ARGB_8888); 8206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateRecycleBitmapOp extends Op { 8256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateRecycleBitmapOp() { 8286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateRecycleBitmap", "Create and recycle a Bitmap"); 8296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ARGB_8888); 8396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 8406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadSmallBitmapOp extends Op { 8456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadSmallBitmapOp() { 8486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadSmallBitmap", "Load small raw bitmap"); 8496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample, opts); 8606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadRecycleSmallBitmapOp extends Op { 8656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadRecycleSmallBitmapOp() { 8686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadRecycleSmallBitmap", "Load and recycle small raw bitmap"); 8696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample, opts); 8806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 8816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadLargeBitmapOp extends Op { 8866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadLargeBitmapOp() { 8896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadLargeBitmap", "Load large raw bitmap"); 8906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 9006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate, opts); 9016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadRecycleLargeBitmapOp extends Op { 9066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 9076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadRecycleLargeBitmapOp() { 9096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadRecycleLargeBitmap", "Load and recycle large raw bitmap"); 9106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 9146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 9186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 9196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 9206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate, opts); 9216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 9226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadSmallScaledBitmapOp extends Op { 9276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 9286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadSmallScaledBitmapOp() { 9306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadSmallScaledBitmap", "Load small raw bitmap that is scaled for density"); 9316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 9356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 9396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 9406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 9416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample_scale, opts); 9426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadLargeScaledBitmapOp extends Op { 9476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 9486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadLargeScaledBitmapOp() { 9506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadLargeScaledBitmap", "Load large raw bitmap that is scaled for density"); 9516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 9556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 9596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 9606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 9616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate_scale, opts); 9626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateFileOp extends Op { 9676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 9686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateFileOp() { 9706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateFile", "Create and delete a file"); 9716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 9756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.createNewFile(); 9816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 9826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 9836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateWriteFileOp extends Op { 9906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 9916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateWriteFileOp() { 9936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateWriteFile", "Create, write, and delete a file"); 9946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 9986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 10026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileOutputStream fos = new FileOutputStream(mFile); 10046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.write(1); 10056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.close(); 10066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 10086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 10116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateWriteSyncFileOp extends Op { 10156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 10166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateWriteSyncFileOp() { 10186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateWriteSyncFile", "Create, write, sync, and delete a file"); 10196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 10226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 10236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 10276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileOutputStream fos = new FileOutputStream(mFile); 10296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.write(1); 10306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.flush(); 10316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileUtils.sync(fos); 10326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.close(); 10336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 10356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 10386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class WriteFileOp extends Op { 10426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 10436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RandomAccessFile mRAF; 10446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] mBuffer; 10456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn WriteFileOp() { 10476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("WriteFile", "Truncate and write a 64k file"); 10486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 10516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer = new byte[1024*64]; 10526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<mBuffer.length; i++) { 10536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer[i] = (byte)i; 10546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 10566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF = new RandomAccessFile(mFile, "rw"); 10596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (FileNotFoundException e) { 10606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 10616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 10656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 10676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.setLength(0); 10686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.write(mBuffer); 10696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure writing " + mFile, e); 10716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 10736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 10766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.close(); 10786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure closing " + mFile, e); 10806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ReadFileOp extends Op { 10866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 10876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RandomAccessFile mRAF; 10886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] mBuffer; 10896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ReadFileOp() { 10916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ReadFile", "Seek and read a 64k file"); 10926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 10956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer = new byte[1024*64]; 10966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<mBuffer.length; i++) { 10976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer[i] = (byte)i; 10986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 11006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 11016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 11026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF = new RandomAccessFile(mFile, "rw"); 11036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 11046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.setLength(0); 11056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.write(mBuffer); 11066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 11076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 11086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 11116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 11126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 11136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 11146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.read(mBuffer); 11156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 11166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure reading " + mFile, e); 11176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 11196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 11216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 11226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 11236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.close(); 11246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 11256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure closing " + mFile, e); 11266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 11286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 11296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1130f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1131f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static abstract class GenericMapOp extends Op { 1132f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn final int mSize; 1133f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn String[] mKeys; 1134f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn String[] mValues; 1135f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1136f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GenericMapOp(String name, String longName, int size) { 1137f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super(name, longName); 1138f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mSize = size; 1139f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1140f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1141f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn void onInit(Context context, boolean foreground) { 1142f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mKeys = new String[mSize]; 1143f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mValues = new String[mSize]; 1144f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Random random = new Random(0); 1145f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1146f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn int chars = random.nextInt(10); 1147f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn StringBuilder builder = new StringBuilder(chars); 1148f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int j=0; j<chars; j++) { 1149f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn builder.append('a' + random.nextInt(100)); 1150f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1151f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mKeys[i] = builder.toString(); 1152f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mValues[i] = Integer.toString(i); 1153f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1154f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1155f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1156f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn int getOpsPerRun() { 1157f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return mSize; 1158f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1159f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1160f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1161f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowTinyHashMapOp extends GenericMapOp { 1162f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowTinyHashMapOp() { 1163f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowTinyHashMap", "Add 5 items to a HashMap", 5); 1164f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1165f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1166f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1167f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn HashMap<String, String> map = new HashMap<String, String>(); 1168f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1169f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1170f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1171f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1172f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1173f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1174f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1175f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowTinyArrayMapOp extends GenericMapOp { 1176f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowTinyArrayMapOp() { 1177f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowTinyArrayMap", "Add 5 items to a ArrayMap", 5); 1178f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1179f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1180f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1181f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMap<String, String> map = new ArrayMap<String, String>(); 1182f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1183f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1184f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1185f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1186f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1187f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1188f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1189f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowSmallHashMapOp extends GenericMapOp { 1190f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowSmallHashMapOp() { 1191f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowSmallHashMap", "Add 100 items to a HashMap", 100); 1192f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1193f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1194f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1195f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn HashMap<String, String> map = new HashMap<String, String>(); 1196f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1197f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1198f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1199f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1200f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1201f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1202f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1203f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowSmallArrayMapOp extends GenericMapOp { 1204f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowSmallArrayMapOp() { 1205f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowSmallArrayMap", "Add 100 items to a ArrayMap", 100); 1206f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1207f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1208f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1209f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMap<String, String> map = new ArrayMap<String, String>(); 1210f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1211f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1212f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1213f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1214f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1215f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1216f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1217f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowLargeHashMapOp extends GenericMapOp { 1218f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowLargeHashMapOp() { 1219f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowLargeHashMap", "Add 10000 items to a HashMap", 10000); 1220f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1221f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1222f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1223f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn HashMap<String, String> map = new HashMap<String, String>(); 1224f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1225f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1226f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1227f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1228f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1229f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1230f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1231f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class GrowLargeArrayMapOp extends GenericMapOp { 1232f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn GrowLargeArrayMapOp() { 1233f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("GrowLargeArrayMap", "Add 10000 items to a ArrayMap", 10000); 1234f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1235f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1236f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1237f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMap<String, String> map = new ArrayMap<String, String>(); 1238f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1239f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn map.put(mKeys[i], mValues[i]); 1240f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1241f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1242f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1243f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1244f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1245f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupTinyHashMapOp extends LookupSmallHashMapOp { 1246f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupTinyHashMapOp() { 1247f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupTinyHashMap", "Lookup items in 5 entry HashMap", 5); 1248f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1249f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1250f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1251f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupTinyArrayMapOp extends LookupSmallArrayMapOp { 1252f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupTinyArrayMapOp() { 1253f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupTinyArrayMap", "Lookup items in 5 entry ArrayMap", 5); 1254f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1255f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1256f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1257f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupSmallHashMapOp extends GenericMapOp { 1258f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn HashMap<String, String> mHashMap; 1259f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1260f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupSmallHashMapOp() { 1261f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupSmallHashMap", "Lookup items in 100 entry HashMap", 100); 1262f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1263f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1264f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupSmallHashMapOp(String name, String longname, int size) { 1265f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super(name, longname, size); 1266f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1267f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1268f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn void onInit(Context context, boolean foreground) { 1269f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super.onInit(context, foreground); 1270f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mHashMap = new HashMap<String, String>(); 1271f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1272f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mHashMap.put(mKeys[i], mValues[i]); 1273f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1274f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1275f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1276f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1277f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1278f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mHashMap.get(mKeys[i]); 1279f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1280f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1281f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1282f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1283f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1284f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupSmallArrayMapOp extends GenericMapOp { 1285f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMap<String, String> mArrayMap; 1286f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1287f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupSmallArrayMapOp() { 1288f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupSmallArrayMap", "Lookup items in 100 entry ArrayMap", 100); 1289f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1290f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1291f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupSmallArrayMapOp(String name, String longname, int size) { 1292f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super(name, longname, size); 1293f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1294f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1295f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn void onInit(Context context, boolean foreground) { 1296f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super.onInit(context, foreground); 1297f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mArrayMap = new ArrayMap<String, String>(); 1298f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1299f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mArrayMap.put(mKeys[i], mValues[i]); 1300f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1301f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1302f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1303f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn boolean onRun() { 1304f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<mSize; i++) { 1305f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mArrayMap.get(mKeys[i]); 1306f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1307f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 1308f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1309f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1310f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1311f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupLargeHashMapOp extends LookupSmallHashMapOp { 1312f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupLargeHashMapOp() { 1313f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupLargeHashMap", "Lookup items in 10000 entry HashMap", 10000); 1314f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1315f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1316f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1317f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class LookupLargeArrayMapOp extends LookupSmallArrayMapOp { 1318f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn LookupLargeArrayMapOp() { 1319f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn super("LookupLargeArrayMap", "Lookup items in 10000 entry ArrayMap", 10000); 1320f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 1321f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 13226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn} 1323