1d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn/* 2d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * Copyright (C) 2011 The Android Open Source Project 3d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * 4d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * you may not use this file except in compliance with the License. 6d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * You may obtain a copy of the License at 7d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * 8d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * 10d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * See the License for the specific language governing permissions and 14d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * limitations under the License. 15d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn */ 16d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 17d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornpackage com.android.frameworkperf; 18d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 19d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.app.Activity; 206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.ComponentName; 21d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.content.Intent; 226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.content.ServiceConnection; 23dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackbornimport android.os.Binder; 24d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.os.Bundle; 25d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.os.Handler; 266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.IBinder; 276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Message; 286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.Messenger; 29d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.os.PowerManager; 306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.os.RemoteException; 31d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.util.Log; 32d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.view.View; 33d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.view.WindowManager; 342c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackbornimport android.widget.AdapterView; 352c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackbornimport android.widget.ArrayAdapter; 3628695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackbornimport android.widget.Button; 376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackbornimport android.widget.CheckBox; 382c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackbornimport android.widget.Spinner; 39d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport android.widget.TextView; 40d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 41d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackbornimport java.util.ArrayList; 42d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 43d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn/** 44d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn * So you thought sync used up your battery life. 45d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn */ 462c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackbornpublic class FrameworkPerfActivity extends Activity 472c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn implements AdapterView.OnItemSelectedListener { 482e9562ad760d320b97e710c60427ff1704283c82Dianne Hackborn static final String TAG = "Perf"; 49dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn static final boolean DEBUG = false; 502e9562ad760d320b97e710c60427ff1704283c82Dianne Hackborn 512c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn Spinner mFgSpinner; 522c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn Spinner mBgSpinner; 5380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate Spinner mLimitSpinner; 5480a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate TextView mLimitLabel; 550500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn TextView mTestTime; 5628695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn Button mStartButton; 5728695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn Button mStopButton; 586b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn CheckBox mLocalCheckBox; 5928695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn TextView mLog; 60d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn PowerManager.WakeLock mPartialWakeLock; 61d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 62d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn long mMaxRunTime = 5000; 6380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate boolean mLimitIsIterations; 64d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn boolean mStarted; 65d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 662c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn final String[] mAvailOpLabels; 672c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn final String[] mAvailOpDescriptions; 6880a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate final String[] mLimitLabels = { "Time", "Iterations" }; 692c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int mFgTestIndex = -1; 716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn int mBgTestIndex = -1; 726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestService.Op mFgTest; 736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestService.Op mBgTest; 74d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn int mCurOpIndex = 0; 756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestConnection mCurConnection; 76dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn boolean mConnectionBound; 77d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final ArrayList<RunResult> mResults = new ArrayList<RunResult>(); 79d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 805eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu Object mResultNotifier = new Object(); 815eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu 82dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn class TestConnection implements ServiceConnection, IBinder.DeathRecipient { 836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Messenger mService; 84dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn boolean mLinked; 85d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void onServiceConnected(ComponentName name, IBinder service) { 87dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn try { 88dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (!(service instanceof Binder)) { 89dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // If remote, we'll be killing ye. 90dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn service.linkToDeath(this, 0); 91dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mLinked = true; 92dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 93dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mService = new Messenger(service); 94dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn dispatchCurOp(this); 95dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } catch (RemoteException e) { 96dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // Whoops, service has disappeared... try starting again. 97dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Log.w(TAG, "Test service died, starting again"); 98dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn startCurOp(); 99dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 100d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 101d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 1026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void onServiceDisconnected(ComponentName name) { 103d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 104dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn 105dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn @Override public void binderDied() { 106dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn cleanup(); 107dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn connectionDied(this); 108dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 109dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn 110dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn void cleanup() { 111dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (mLinked) { 112dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mLinked = false; 113dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mService.getBinder().unlinkToDeath(this, 0); 114dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 115dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 116d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 117d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 118dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn static final int MSG_DO_NEXT_TEST = 1000; 1196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1206b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Handler mHandler = new Handler() { 1216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn @Override public void handleMessage(Message msg) { 1226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn switch (msg.what) { 1236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn case TestService.RES_TEST_FINISHED: { 1246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = (Bundle)msg.obj; 1256b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.setClassLoader(getClassLoader()); 1266b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn RunResult res = (RunResult)bundle.getParcelable("res"); 1276b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn completeCurOp(res); 1286b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } break; 129dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn case MSG_DO_NEXT_TEST: { 1306b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn startCurOp(); 1316b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } break; 1326b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1336b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 1346b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn }; 1356b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 1366b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn final Messenger mMessenger = new Messenger(mHandler); 137d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 1382c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn public FrameworkPerfActivity() { 1396b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mAvailOpLabels = new String[TestService.mAvailOps.length]; 1406b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mAvailOpDescriptions = new String[TestService.mAvailOps.length]; 1416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn for (int i=0; i<TestService.mAvailOps.length; i++) { 1426b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestService.Op op = TestService.mAvailOps[i]; 1430500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn if (op == null) { 1442c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mAvailOpLabels[i] = "All"; 1452c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mAvailOpDescriptions[i] = "All tests"; 1462c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } else { 1472c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mAvailOpLabels[i] = op.getName(); 1480500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn if (mAvailOpLabels[i] == null) { 1490500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn mAvailOpLabels[i] = "Nothing"; 1500500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn } 1512c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mAvailOpDescriptions[i] = op.getLongName(); 1522c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1532c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1542c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1552c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 156d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn @Override 157d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn public void onCreate(Bundle savedInstanceState) { 158d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn super.onCreate(savedInstanceState); 159d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 160d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn // Set the layout for this activity. You can find it 161d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn // in res/layout/hello_activity.xml 162d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn setContentView(R.layout.main); 163d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 1642c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mFgSpinner = (Spinner) findViewById(R.id.fgspinner); 1652c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 1662c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn android.R.layout.simple_spinner_item, mAvailOpLabels); 1672c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1682c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mFgSpinner.setAdapter(adapter); 1692c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mFgSpinner.setOnItemSelectedListener(this); 1702c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mBgSpinner = (Spinner) findViewById(R.id.bgspinner); 1712c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn adapter = new ArrayAdapter<String>(this, 1722c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn android.R.layout.simple_spinner_item, mAvailOpLabels); 1732c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1742c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mBgSpinner.setAdapter(adapter); 1752c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mBgSpinner.setOnItemSelectedListener(this); 17680a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitSpinner = (Spinner) findViewById(R.id.limitspinner); 17780a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate adapter = new ArrayAdapter<String>(this, 17880a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate android.R.layout.simple_spinner_item, mLimitLabels); 17980a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 18080a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitSpinner.setAdapter(adapter); 18180a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitSpinner.setOnItemSelectedListener(this); 1822c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 18328695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mTestTime = (TextView)findViewById(R.id.testtime); 18480a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitLabel = (TextView)findViewById(R.id.limitlabel); 18528695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn 18628695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStartButton = (Button)findViewById(R.id.start); 18728695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStartButton.setOnClickListener(new View.OnClickListener() { 188d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn @Override public void onClick(View v) { 189d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn startRunning(); 190d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 191d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn }); 19228695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStopButton = (Button)findViewById(R.id.stop); 19328695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStopButton.setOnClickListener(new View.OnClickListener() { 194d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn @Override public void onClick(View v) { 195d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn stopRunning(); 196d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 197d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn }); 19828695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStopButton.setEnabled(false); 1996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mLocalCheckBox = (CheckBox)findViewById(R.id.local); 20028695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn 201d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mLog = (TextView)findViewById(R.id.log); 202d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 203d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); 204d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Scheduler"); 205d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mPartialWakeLock.setReferenceCounted(false); 206d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 207d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 208d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn @Override 2092c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 21080a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (parent == mFgSpinner || parent == mBgSpinner || parent == mLimitSpinner) { 2116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestService.Op op = TestService.mAvailOps[position]; 2122c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (parent == mFgSpinner) { 2136b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mFgTestIndex = position; 2142c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mFgTest = op; 2152c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn ((TextView)findViewById(R.id.fgtext)).setText(mAvailOpDescriptions[position]); 21680a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } else if (parent == mBgSpinner) { 2176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mBgTestIndex = position; 2182c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn mBgTest = op; 2192c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn ((TextView)findViewById(R.id.bgtext)).setText(mAvailOpDescriptions[position]); 22080a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } else if (parent == mLimitSpinner) { 22180a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitIsIterations = (position != 0); 22280a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (mLimitIsIterations) { 22380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitLabel.setText("Iterations: "); 22480a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } else { 22580a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitLabel.setText("Test time (ms): "); 22680a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } 2272c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 2282c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 2292c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 2302c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 2312c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn @Override 2322c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn public void onNothingSelected(AdapterView<?> parent) { 2332c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 2342c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 2352c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn @Override 236d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn public void onResume() { 237d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn super.onResume(); 238d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 239d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 240d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn @Override 241d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn public void onDestroy() { 242d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn super.onDestroy(); 243d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn stopRunning(); 244d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (mPartialWakeLock.isHeld()) { 245d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mPartialWakeLock.release(); 246d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 247d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 248d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 2496b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void dispatchCurOp(TestConnection conn) { 2506b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mCurConnection != conn) { 2516b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Log.w(TAG, "Dispatching on invalid connection: " + conn); 2526b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return; 2536b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2546b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn TestArgs args = new TestArgs(); 25580a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate if (mLimitIsIterations) { 25680a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate args.maxOps = mMaxRunTime; 25780a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } else { 25880a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate args.maxTime = mMaxRunTime; 25980a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate } 2606b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mFgTestIndex == 0 && mBgTestIndex == 0) { 2616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.combOp = mCurOpIndex; 2626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else if (mFgTestIndex != 0 && mBgTestIndex != 0) { 2636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.fgOp = mFgTestIndex; 2646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.bgOp = mBgTestIndex; 2656b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 26628695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn // Skip null test. 26728695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn if (mCurOpIndex == 0) { 26828695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mCurOpIndex = 1; 26928695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn } 2706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mFgTestIndex != 0) { 2716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.fgOp = mFgTestIndex; 2726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.bgOp = mCurOpIndex; 2736b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 2746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.fgOp = mCurOpIndex; 2756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn args.bgOp = mFgTestIndex; 2766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Bundle bundle = new Bundle(); 2796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bundle.putParcelable("args", args); 2806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message msg = Message.obtain(null, TestService.CMD_START_TEST, bundle); 2816b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn msg.replyTo = mMessenger; 2826b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 2836b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn conn.mService.send(msg); 2846b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 285dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Log.w(TAG, "Failure communicating with service", e); 2866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2876b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 2886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 2896b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void completeCurOp(RunResult result) { 2906b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn log(String.format("%s: fg=%d*%gms/op (%dms) / bg=%d*%gms/op (%dms)", 2916b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn result.name, result.fgOps, result.getFgMsPerOp(), result.fgTime, 2926b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn result.bgOps, result.getBgMsPerOp(), result.bgTime)); 2935eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu synchronized (mResults) { 2945eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu mResults.add(result); 2955eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu } 2966b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (!mStarted) { 2976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn log("Stop"); 2986b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn stopRunning(); 2996b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return; 3006b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3016b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mFgTest != null && mBgTest != null) { 3026b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn log("Finished"); 3036b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn stopRunning(); 3046b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return; 3056b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3066b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mFgTest == null && mBgTest == null) { 3076b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mCurOpIndex+=2; 3086b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mCurOpIndex >= TestService.mOpPairs.length) { 3096b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn log("Finished"); 3106b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn stopRunning(); 3116b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return; 3126b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3132c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } else { 3146b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mCurOpIndex++; 3156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mCurOpIndex >= TestService.mAvailOps.length) { 3166b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn log("Finished"); 3176b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn stopRunning(); 3186b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn return; 31928695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn } 3202c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 3216b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn startCurOp(); 3226b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3236b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3246b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void disconnect() { 325dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn final TestConnection conn = mCurConnection; 326dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (conn != null) { 327dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (DEBUG) { 328dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn RuntimeException here = new RuntimeException("here"); 329dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn here.fillInStackTrace(); 330dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Log.i(TAG, "Unbinding " + conn, here); 331dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 332dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (mConnectionBound) { 333dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn unbindService(conn); 334dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mConnectionBound = false; 335dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 336dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (conn.mLinked) { 3376b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Message msg = Message.obtain(null, TestService.CMD_TERMINATE); 3386b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn try { 339dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn conn.mService.send(msg); 340dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn return; 3416b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } catch (RemoteException e) { 342dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Log.w(TAG, "Test service aleady died when terminating"); 343d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 344d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 345dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn conn.cleanup(); 346dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 347dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn connectionDied(conn); 348dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 349dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn 350dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn void connectionDied(TestConnection conn) { 351dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (mCurConnection == conn) { 352dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // Now that we know the test process has died, we can commence 353dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // the next test. Just give a little delay to allow the activity 354dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // manager to know it has died as well (not a disaster if it hasn't 355dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn // yet, though). 356dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (mConnectionBound) { 357dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn unbindService(conn); 358dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 3596b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mCurConnection = null; 360dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mHandler.sendMessageDelayed(Message.obtain(null, MSG_DO_NEXT_TEST), 100); 3616b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3626b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3636b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn 3646b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn void startCurOp() { 365dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (DEBUG) Log.i(TAG, "startCurOp: mCurConnection=" + mCurConnection); 3666b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mCurConnection != null) { 3676b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn disconnect(); 368dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn return; 3696b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 3706b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mStarted) { 3716b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler.removeMessages(TestService.RES_TEST_FINISHED); 3726b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mHandler.removeMessages(TestService.RES_TERMINATED); 373dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mHandler.removeMessages(MSG_DO_NEXT_TEST); 3746b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mCurConnection = new TestConnection(); 3756b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn Intent intent; 3766b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn if (mLocalCheckBox.isChecked()) { 3776b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn intent = new Intent(this, LocalTestService.class); 3786b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } else { 3796b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn intent = new Intent(this, TestService.class); 3806b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 381dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn if (DEBUG) { 382dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn RuntimeException here = new RuntimeException("here"); 383dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn here.fillInStackTrace(); 384dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn Log.i(TAG, "Binding " + mCurConnection, here); 385dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn } 3866b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn bindService(intent, mCurConnection, BIND_AUTO_CREATE|BIND_IMPORTANT); 387dd13793a257f4d7265bba33937bb442722d5d36bDianne Hackborn mConnectionBound = true; 3886b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn } 389d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 390d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 391d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn void startRunning() { 392d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (!mStarted) { 393d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn log("Start"); 394d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mStarted = true; 39528695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStartButton.setEnabled(false); 39628695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStopButton.setEnabled(true); 3976b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mLocalCheckBox.setEnabled(false); 39828695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mTestTime.setEnabled(false); 39928695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mFgSpinner.setEnabled(false); 40028695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mBgSpinner.setEnabled(false); 40180a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitSpinner.setEnabled(false); 402d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn updateWakeLock(); 403d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn startService(new Intent(this, SchedulerService.class)); 404d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mCurOpIndex = 0; 4050500b3cfda5192efc09d6d4344b0c6c785c0a815Dianne Hackborn mMaxRunTime = Integer.parseInt(mTestTime.getText().toString()); 4065eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu synchronized (mResults) { 4075eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu mResults.clear(); 4085eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu } 409d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn startCurOp(); 410d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 411d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 412d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 413d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn void stopRunning() { 414d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (mStarted) { 4156b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn disconnect(); 416d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mStarted = false; 41728695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStartButton.setEnabled(true); 41828695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mStopButton.setEnabled(false); 4196b57b7e4d568bfa6273f87ef4c9af2fdc0ca1a06Dianne Hackborn mLocalCheckBox.setEnabled(true); 42028695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mTestTime.setEnabled(true); 42128695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mFgSpinner.setEnabled(true); 42228695e0c70db82e7ba0ce1c25ab10cc7fb04d40bDianne Hackborn mBgSpinner.setEnabled(true); 42380a682bc3d1bdf1e756b799bbcd919678b319ee3Christopher Tate mLimitSpinner.setEnabled(true); 424d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn updateWakeLock(); 425d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn stopService(new Intent(this, SchedulerService.class)); 4265eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu synchronized (mResults) { 4275eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu for (int i=0; i<mResults.size(); i++) { 4285eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu RunResult result = mResults.get(i); 4295eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu float fgMsPerOp = result.getFgMsPerOp(); 4305eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu float bgMsPerOp = result.getBgMsPerOp(); 4315eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu String fgMsPerOpStr = fgMsPerOp != 0 ? Float.toString(fgMsPerOp) : ""; 4325eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu String bgMsPerOpStr = bgMsPerOp != 0 ? Float.toString(bgMsPerOp) : ""; 4335eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu Log.i("PerfRes", "\t" + result.name + "\t" + result.fgOps 4345eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu + "\t" + result.getFgMsPerOp() + "\t" + result.fgTime 4355eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu + "\t" + result.fgLongName + "\t" + result.bgOps 4365eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu + "\t" + result.getBgMsPerOp() + "\t" + result.bgTime 4375eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu + "\t" + result.bgLongName); 4385eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu } 4395eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu } 4405eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu synchronized (mResultNotifier) { 4415eefd7711f63bc1b67ec927a8c43363f426121ccGuang Zhu mResultNotifier.notifyAll(); 442d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 443d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 444d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 445d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 446d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn void updateWakeLock() { 447d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (mStarted) { 448d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 449d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (!mPartialWakeLock.isHeld()) { 450d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mPartialWakeLock.acquire(); 451d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 452d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } else { 453d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 454d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn if (mPartialWakeLock.isHeld()) { 455d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mPartialWakeLock.release(); 456d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 457d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 458d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 459d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn 460d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn void log(String s) { 461d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn mLog.setText(mLog.getText() + "\n" + s); 4622e9562ad760d320b97e710c60427ff1704283c82Dianne Hackborn Log.i(TAG, s); 463d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn } 464d4c4b76889f2bd2e2e34ba9fc835370020524dedDianne Hackborn} 465