TestService.java revision 6b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06
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; 246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport org.xmlpull.v1.XmlPullParser; 266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport org.xmlpull.v1.XmlPullParserException; 276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.app.Service; 296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.Context; 306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.Intent; 316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.pm.PackageManager; 326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.res.TypedArray; 336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.res.XmlResourceParser; 346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.graphics.Bitmap; 356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.graphics.BitmapFactory; 366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Bundle; 376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.FileUtils; 386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Handler; 396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.IBinder; 406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Looper; 416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Message; 426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Messenger; 436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Process; 446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.RemoteException; 456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.SystemClock; 466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.AttributeSet; 476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.DisplayMetrics; 486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.Log; 496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.util.Xml; 506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.view.LayoutInflater; 516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornpublic class TestService extends Service { 536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final String TAG = "Perf"; 546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final static Op[] mOpPairs = new Op[] { 566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new NoOp(), 576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CpuOp(), 586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new SchedulerOp(), 596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new GcOp(), 606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateFileOp(), 616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateWriteFileOp(), 626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new CreateWriteSyncFileOp(), 636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new WriteFileOp(), 646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), new ReadFileOp(), 656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new SchedulerOp(), new SchedulerOp(), 666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new GcOp(), new NoOp(), 676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new NoOp(), 686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CpuOp(), 696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new SchedulerOp(), 706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new GcOp(), 716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateFileOp(), 726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateWriteFileOp(), 736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new CreateWriteSyncFileOp(), 746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new WriteFileOp(), 756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), new ReadFileOp(), 766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateFileOp(), new NoOp(), 776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteFileOp(), new NoOp(), 786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteSyncFileOp(), new NoOp(), 796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new NoOp(), 806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new NoOp(), 816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new CreateWriteFileOp(), 826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new CreateWriteFileOp(), 836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new CreateWriteSyncFileOp(), 846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new CreateWriteSyncFileOp(), 856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new WriteFileOp(), 866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), new ReadFileOp(), 876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new WriteFileOp(), 886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), new ReadFileOp(), 896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new OpenXmlResOp(), new NoOp(), 906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadXmlAttrsOp(), new NoOp(), 916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseXmlResOp(), new NoOp(), 926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseLargeXmlResOp(), new NoOp(), 936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterOp(), new NoOp(), 946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterLargeOp(), new NoOp(), 956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterViewOp(), new NoOp(), 966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterButtonOp(), new NoOp(), 976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterImageButtonOp(), new NoOp(), 986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateBitmapOp(), new NoOp(), 996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateRecycleBitmapOp(), new NoOp(), 1006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallBitmapOp(), new NoOp(), 1016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleSmallBitmapOp(), new NoOp(), 1026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeBitmapOp(), new NoOp(), 1036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleLargeBitmapOp(), new NoOp(), 1046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallScaledBitmapOp(), new NoOp(), 1056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeScaledBitmapOp(), new NoOp(), 1066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final static Op[] mAvailOps = new Op[] { 1096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn null, 1106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new NoOp(), 1116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CpuOp(), 1126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new SchedulerOp(), 1136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new MethodCallOp(), 1146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new IpcOp(), 1156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateFileOp(), 1166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteFileOp(), 1176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateWriteSyncFileOp(), 1186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new WriteFileOp(), 1196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadFileOp(), 1206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new OpenXmlResOp(), 1216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ReadXmlAttrsOp(), 1226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseXmlResOp(), 1236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new ParseLargeXmlResOp(), 1246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterOp(), 1256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterLargeOp(), 1266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterViewOp(), 1276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterButtonOp(), 1286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LayoutInflaterImageButtonOp(), 1296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateBitmapOp(), 1306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new CreateRecycleBitmapOp(), 1316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallBitmapOp(), 1326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleSmallBitmapOp(), 1336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeBitmapOp(), 1346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadRecycleLargeBitmapOp(), 1356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadSmallScaledBitmapOp(), 1366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn new LoadLargeScaledBitmapOp(), 1376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int CMD_START_TEST = 1; 1406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int CMD_TERMINATE = 2; 1416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int RES_TEST_FINISHED = 1; 1436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static final int RES_TERMINATED = 2; 1446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Handler mHandler = new Handler() { 1466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void handleMessage(Message msg) { 1476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn switch (msg.what) { 1486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn case CMD_START_TEST: { 1496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = (Bundle)msg.obj; 1506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.setClassLoader(getClassLoader()); 1516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final TestArgs args = (TestArgs)bundle.getParcelable("args"); 1526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Messenger replyTo = msg.replyTo; 1536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRunner.run(this, args, new Runnable() { 1546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 1556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (replyTo != null) { 1566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message msg = Message.obtain(null, RES_TEST_FINISHED); 1576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = new Bundle(); 1586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.putParcelable("res", new RunResult(mRunner)); 1596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn msg.obj = bundle; 1606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 1616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn replyTo.send(msg); 1626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 1636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }); 1676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } break; 1686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn case CMD_TERMINATE: { 1696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (msg.replyTo != null) { 1706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message reply = Message.obtain(null, RES_TERMINATED); 1716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 1726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn msg.replyTo.send(reply); 1736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 1746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn terminate(); 1776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final TestRunner mRunner = new TestRunner(); 1836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override 1856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public IBinder onBind(Intent intent) { 1866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return (new Messenger(mHandler)).getBinder(); 1876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void terminate() { 1906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.killProcess(Process.myPid()); 1916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn enum BackgroundMode { 1946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn NOTHING, 1956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CPU, 1966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SCHEDULER 1976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public class TestRunner { 2006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Handler mHandler; 2016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mMaxRunTime; 2026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Op mForegroundOp; 2036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Op mBackgroundOp; 2046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Runnable mDoneCallback; 2056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread mBackgroundThread; 2076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread mForegroundThread; 2086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mStartTime; 2096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean mBackgroundRunning; 2116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean mForegroundRunning; 2126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mBackgroundEndTime; 2146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mBackgroundOps; 2156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mForegroundEndTime; 2166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long mForegroundOps; 2176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public TestRunner() { 2196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getForegroundName() { 2226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOp.getName(); 2236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getBackgroundName() { 2266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOp.getName(); 2276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getName() { 2306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String fgName = mForegroundOp.getName(); 2316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String bgName = mBackgroundOp.getName(); 2326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn StringBuilder res = new StringBuilder(); 2336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (fgName != null) { 2346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append(fgName); 2356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append("Fg"); 2366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (bgName != null) { 2386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append(bgName); 2396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn res.append("Bg"); 2406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return res.toString(); 2426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getForegroundLongName() { 2456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOp.getLongName(); 2466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getBackgroundLongName() { 2496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOp.getLongName(); 2506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public void run(Handler handler, TestArgs args, Runnable doneCallback) { 2536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler = handler; 2546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mMaxRunTime = args.maxTime; 2556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (args.combOp >= 0) { 2566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp = mOpPairs[args.combOp]; 2576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp = mOpPairs[args.combOp+1]; 2586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 2596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp = mAvailOps[args.fgOp]; 2606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp = mAvailOps[args.bgOp]; 2616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mDoneCallback = doneCallback; 2636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundThread = new RunnerThread("background", new Runnable() { 2646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 2656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean running; 2666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int ops = 0; 2676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 2686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn running = mBackgroundOp.onRun(); 2696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ops++; 2706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (evalRepeat(running, true) && running); 2716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundEndTime = SystemClock.uptimeMillis(); 2726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOps = ops * mBackgroundOp.getOpsPerRun(); 2736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn threadFinished(false); 2746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }, Process.THREAD_PRIORITY_BACKGROUND); 2766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundThread = new RunnerThread("background", new Runnable() { 2776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 2786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean running; 2796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int ops = 0; 2806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 2816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn running = mForegroundOp.onRun(); 2826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ops++; 2836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (evalRepeat(true, running) && running); 2846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundEndTime = SystemClock.uptimeMillis(); 2856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOps = ops * mForegroundOp.getOpsPerRun(); 2866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn threadFinished(true); 2876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }, Process.THREAD_PRIORITY_FOREGROUND); 2896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp.onInit(TestService.this, true); 2916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp.onInit(TestService.this, false); 2926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 2946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mStartTime = SystemClock.uptimeMillis(); 2956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = true; 2966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = true; 2976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundThread.start(); 3006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundThread.start(); 3016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getForegroundTime() { 3046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundEndTime-mStartTime; 3056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getForegroundOps() { 3086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mForegroundOps; 3096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getBackgroundTime() { 3126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundEndTime-mStartTime; 3136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public long getBackgroundOps() { 3166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mBackgroundOps; 3176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private boolean evalRepeat(boolean bgRunning, boolean fgRunning) { 3206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 3216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!bgRunning) { 3226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = false; 3236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!fgRunning) { 3256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = false; 3266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!mBackgroundRunning && !mForegroundRunning) { 3286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return false; 3296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn long now = SystemClock.uptimeMillis(); 3316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (now > (mStartTime+mMaxRunTime)) { 3326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return false; 3336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 3356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private void threadFinished(boolean foreground) { 3396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn synchronized (this) { 3406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (foreground) { 3416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundRunning = false; 3426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 3436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundRunning = false; 3446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!mBackgroundRunning && !mForegroundRunning) { 3466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler.post(new Runnable() { 3476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void run() { 3486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mForegroundOp.onTerm(TestService.this); 3496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBackgroundOp.onTerm(TestService.this); 3506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mDoneCallback != null) { 3516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mDoneCallback.run(); 3526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }); 3556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn class RunnerThread extends Thread { 3616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private final Runnable mOp; 3626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn private final int mPriority; 3636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunnerThread(String name, Runnable op, int priority) { 3656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super(name); 3666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mOp = op; 3676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPriority = priority; 3686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public void run() { 3716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(mPriority); 3726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mOp.run(); 3736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static public abstract class Op { 3776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final String mName; 3786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final String mLongName; 3796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public Op(String name, String longName) { 3816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mName = name; 3826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mLongName = longName; 3836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getName() { 3866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mName; 3876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn public String getLongName() { 3906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return mLongName; 3916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 3946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn abstract boolean onRun(); 3976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 3996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 1; 4036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class NoOp extends Op { 4076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn NoOp() { 4086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super(null, "Nothing"); 4096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return false; 4136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 0; 4176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CpuOp extends Op { 4216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CpuOp() { 4226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CPU", "Consume CPU"); 4236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class SchedulerOp extends Op { 4316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SchedulerOp() { 4326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Sched", "Change scheduler group"); 4336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND); 4376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); 4386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class GcOp extends Op { 4436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn GcOp() { 4446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Gc", "Run garbage collector"); 4456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] stuff = new byte[1024*1024]; 4496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class MethodCallOp extends Op { 4546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn MethodCallOp() { 4556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("MethodCall", "Method call"); 4566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final int N = getOpsPerRun(); 4606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<N; i++) { 4616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn someFunc(i); 4626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int someFunc(int foo) { 4676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 0; 4686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 500; 4726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class IpcOp extends Op { 4766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn PackageManager mPm; 4776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String mProcessName; 4786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn IpcOp() { 4806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("Ipc", "IPC to system process"); 4816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 4846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPm = context.getPackageManager(); 4856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mProcessName = context.getApplicationInfo().processName; 4866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 4896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final int N = getOpsPerRun(); 4906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<N; i++) { 4916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mPm.queryContentProviders(mProcessName, Process.myUid(), 0); 4926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 4946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 4966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int getOpsPerRun() { 4976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return 100; 4986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 4996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class OpenXmlResOp extends Op { 5026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 5036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn OpenXmlResOp() { 5056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("OpenXmlRes", "Open (and close) an XML resource"); 5066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 5096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 5106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn XmlResourceParser parser = mContext.getResources().getLayout(R.xml.simple); 5146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn parser.close(); 5156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ReadXmlAttrsOp extends Op { 5206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 5216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn XmlResourceParser mParser; 5226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn AttributeSet mAttrs; 5236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ReadXmlAttrsOp() { 5256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ReadXmlAttrs", "Read attributes from an XML tag"); 5266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 5296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 5306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mParser = mContext.getResources().getLayout(R.xml.simple); 5316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mAttrs = Xml.asAttributeSet(mParser); 5326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int eventType; 5346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 5356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn // Find the first <item> tag. 5366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn eventType = mParser.getEventType(); 5376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn String tagName; 5386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn do { 5396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (eventType == XmlPullParser.START_TAG) { 5406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn tagName = mParser.getName(); 5416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (tagName.equals("item")) { 5426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn break; 5436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn eventType = mParser.next(); 5466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } while (eventType != XmlPullParser.END_DOCUMENT); 5476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (XmlPullParserException e) { 5486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn throw new RuntimeException("I died", e); 5496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 5506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn throw new RuntimeException("I died", e); 5516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 5556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mParser.close(); 5566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TypedArray a = mContext.obtainStyledAttributes(mAttrs, 5606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn com.android.internal.R.styleable.MenuItem); 5616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn a.recycle(); 5626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ParseXmlResOp extends Op { 5676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 5686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ParseXmlResOp() { 5706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ParseXmlRes", "Parse compiled XML resource"); 5716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 5746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 5756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SimpleInflater inf = new SimpleInflater(mContext); 5796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.xml.simple); 5806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ParseLargeXmlResOp extends Op { 5856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 5866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ParseLargeXmlResOp() { 5886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ParseLargeXmlRes", "Parse large XML resource"); 5896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 5926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 5936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 5946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 5956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 5966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn SimpleInflater inf = new SimpleInflater(mContext); 5976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.xml.simple_large); 5986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 5996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterOp extends Op { 6036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterOp() { 6066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflater", "Inflate layout resource"); 6076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 6156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 6166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 6186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 6196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.small_layout, null); 6206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterLargeOp extends Op { 6256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterLargeOp() { 6286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterLarge", "Inflate large layout resource"); 6296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 6376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 6386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 6406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 6416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.large_layout, null); 6426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterViewOp extends Op { 6476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterViewOp() { 6506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterView", "Inflate layout with 50 View objects"); 6516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 6596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 6606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 6626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 6636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.view_layout, null); 6646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterButtonOp extends Op { 6696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterButtonOp() { 6726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterButton", "Inflate layout with 50 Button objects"); 6736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 6806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 6816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 6826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 6846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 6856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.button_layout, null); 6866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 6876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LayoutInflaterImageButtonOp extends Op { 6916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 6926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflaterImageButtonOp() { 6946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LayoutInflaterImageButton", "Inflate layout with 50 ImageButton objects"); 6956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 6966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 6976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 6986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 6996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (Looper.myLooper() == null) { 7036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Looper.prepare(); 7046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LayoutInflater inf = (LayoutInflater)mContext.getSystemService( 7066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context.LAYOUT_INFLATER_SERVICE); 7076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn inf.inflate(R.layout.image_button_layout, null); 7086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateBitmapOp extends Op { 7136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateBitmapOp() { 7166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateBitmap", "Create a Bitmap"); 7176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 7256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 7266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ARGB_8888); 7276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateRecycleBitmapOp extends Op { 7326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateRecycleBitmapOp() { 7356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateRecycleBitmap", "Create and recycle a Bitmap"); 7366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 7446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 7456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ARGB_8888); 7466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 7476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadSmallBitmapOp extends Op { 7526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadSmallBitmapOp() { 7556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadSmallBitmap", "Load small raw bitmap"); 7566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 7646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 7656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 7666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample, opts); 7676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadRecycleSmallBitmapOp extends Op { 7726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadRecycleSmallBitmapOp() { 7756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadRecycleSmallBitmap", "Load and recycle small raw bitmap"); 7766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 7796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 7806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 7836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 7846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 7856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 7866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample, opts); 7876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 7886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 7896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadLargeBitmapOp extends Op { 7936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 7946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadLargeBitmapOp() { 7966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadLargeBitmap", "Load large raw bitmap"); 7976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 7986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 7996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate, opts); 8086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadRecycleLargeBitmapOp extends Op { 8136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadRecycleLargeBitmapOp() { 8166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadRecycleLargeBitmap", "Load and recycle large raw bitmap"); 8176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate, opts); 8286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bm.recycle(); 8296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadSmallScaledBitmapOp extends Op { 8346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadSmallScaledBitmapOp() { 8376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadSmallScaledBitmap", "Load small raw bitmap that is scaled for density"); 8386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.stat_sample_scale, opts); 8496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class LoadLargeScaledBitmapOp extends Op { 8546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Context mContext; 8556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn LoadLargeScaledBitmapOp() { 8576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("LoadLargeScaledBitmap", "Load large raw bitmap that is scaled for density"); 8586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mContext = context; 8626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn BitmapFactory.Options opts = new BitmapFactory.Options(); 8666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn opts.inScreenDensity = DisplayMetrics.DENSITY_DEVICE; 8676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), 8686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn R.drawable.wallpaper_goldengate_scale, opts); 8696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateFileOp extends Op { 8746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 8756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateFileOp() { 8776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateFile", "Create and delete a file"); 8786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 8816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 8826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 8836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 8866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 8876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.createNewFile(); 8886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 8896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 8906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 8926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 8936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 8956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateWriteFileOp extends Op { 8976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 8986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 8996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateWriteFileOp() { 9006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateWriteFile", "Create, write, and delete a file"); 9016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 9056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileOutputStream fos = new FileOutputStream(mFile); 9116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.write(1); 9126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.close(); 9136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 9146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 9156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class CreateWriteSyncFileOp extends Op { 9226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 9236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CreateWriteSyncFileOp() { 9256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("CreateWriteSyncFile", "Create, write, sync, and delete a file"); 9266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 9306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileOutputStream fos = new FileOutputStream(mFile); 9366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.write(1); 9376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.flush(); 9386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn FileUtils.sync(fos); 9396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn fos.close(); 9406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 9416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 9426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9436b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9446b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9456b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9466b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9476b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9486b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class WriteFileOp extends Op { 9496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 9506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RandomAccessFile mRAF; 9516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] mBuffer; 9526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn WriteFileOp() { 9546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("WriteFile", "Truncate and write a 64k file"); 9556b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9566b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9576b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 9586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer = new byte[1024*64]; 9596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<mBuffer.length; i++) { 9606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer[i] = (byte)i; 9616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 9636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF = new RandomAccessFile(mFile, "rw"); 9666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (FileNotFoundException e) { 9676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 9686b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 9726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 9746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.setLength(0); 9756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.write(mBuffer); 9766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 9776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure writing " + mFile, e); 9786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 9806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 9836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 9846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.close(); 9856b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 9866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure closing " + mFile, e); 9876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 9896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 9916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn static class ReadFileOp extends Op { 9936b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn File mFile; 9946b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RandomAccessFile mRAF; 9956b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn byte[] mBuffer; 9966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 9976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn ReadFileOp() { 9986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn super("ReadFile", "Seek and read a 64k file"); 9996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onInit(Context context, boolean foreground) { 10026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer = new byte[1024*64]; 10036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<mBuffer.length; i++) { 10046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBuffer[i] = (byte)i; 10056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile = context.getFileStreamPath(foreground ? "test-fg.file" : "test-bg.file"); 10076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF = new RandomAccessFile(mFile, "rw"); 10106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 10116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.setLength(0); 10126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.write(mBuffer); 10136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure creating " + mFile, e); 10156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn boolean onRun() { 10196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.seek(0); 10216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.read(mBuffer); 10226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure reading " + mFile, e); 10246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return true; 10266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 10286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void onTerm(Context context) { 10296b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 10306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mRAF.close(); 10316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (IOException e) { 10326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Failure closing " + mFile, e); 10336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFile.delete(); 10356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 10376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn} 1038