/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.commands.monkey; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import android.app.IActivityManager; import android.content.ContentValues; import android.util.Log; import android.view.IWindowManager; import android.os.Build; /** * Special events for power measurement. */ public class MonkeyPowerEvent extends MonkeyEvent { //Parameter for the power test runner private static final String TAG = "PowerTester"; private static final String LOG_FILE = "/sdcard/autotester.log"; private static ArrayList<ContentValues> mLogEvents = new ArrayList<ContentValues>(); private static final String TEST_SEQ_BEGIN = "AUTOTEST_SEQUENCE_BEGIN"; private static final String TEST_STARTED = "AUTOTEST_TEST_BEGIN"; private static final String TEST_DELAY_STARTED = "AUTOTEST_TEST_BEGIN_DELAY"; private static final String TEST_ENDED = "AUTOTEST_TEST_SUCCESS"; private static final String TEST_IDLE_ENDED = "AUTOTEST_IDLE_SUCCESS"; private static long mTestStartTime; private String mPowerLogTag; private String mTestResult; //10 secs for the screen to trun off after the usb notification private static final long USB_DELAY_TIME = 10000; public MonkeyPowerEvent(String powerLogTag, String powerTestResult) { super(EVENT_TYPE_ACTIVITY); mPowerLogTag = powerLogTag; mTestResult = powerTestResult; } public MonkeyPowerEvent(String powerLogTag) { super(EVENT_TYPE_ACTIVITY); mPowerLogTag = powerLogTag; mTestResult = null; } public MonkeyPowerEvent() { super(EVENT_TYPE_ACTIVITY); mPowerLogTag = null; mTestResult = null; } /** * Buffer an event to be logged later. */ private void bufferLogEvent(String tag, String value) { long tagTime = System.currentTimeMillis(); // Record the test start time if (tag.compareTo(TEST_STARTED) == 0) { mTestStartTime = tagTime; } else if (tag.compareTo(TEST_IDLE_ENDED) == 0) { long lagTime = Long.parseLong(value); tagTime = mTestStartTime + lagTime; tag = TEST_ENDED; } else if (tag.compareTo(TEST_DELAY_STARTED) == 0) { mTestStartTime = tagTime + USB_DELAY_TIME; tagTime = mTestStartTime; tag = TEST_STARTED; } ContentValues event = new ContentValues(); event.put("date", tagTime); event.put("tag", tag); if (value != null) { event.put("value", value); } mLogEvents.add(event); } /** * Write the accumulated log events to a file on the SD card. */ private void writeLogEvents() { ContentValues[] events; events = mLogEvents.toArray(new ContentValues[0]); mLogEvents.clear(); FileWriter writer = null; try { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < events.length; ++i) { ContentValues event = events[i]; buffer.append(MonkeyUtils.toCalendarTime(event.getAsLong("date"))); buffer.append(event.getAsString("tag")); if (event.containsKey("value")) { String value = event.getAsString("value"); buffer.append(" "); buffer.append(value.replace('\n', '/')); } buffer.append("\n"); } writer = new FileWriter(LOG_FILE, true); // true = append writer.write(buffer.toString()); } catch (IOException e) { Log.w(TAG, "Can't write sdcard log file", e); } finally { try { if (writer != null) writer.close(); } catch (IOException e) { } } } @Override public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose) { if (mPowerLogTag != null) { if (mPowerLogTag.compareTo(TEST_SEQ_BEGIN) == 0) { bufferLogEvent(mPowerLogTag, Build.FINGERPRINT); } else if (mTestResult != null) { bufferLogEvent(mPowerLogTag, mTestResult); } } else { writeLogEvents(); } return MonkeyEvent.INJECT_SUCCESS; } }