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