DO NOT MERGE Modify Monkey so that scripts can use raw and user events.
Fix javadoc comment in MonkeySourceRandom.java and combine raw events and user events in MonkeySourceScript.java. Also, fix bug where too few arguments in the script causes a RuntimeException.
This commit is contained in:
@@ -285,7 +285,7 @@ public class MonkeySourceRandom implements MonkeyEventSource {
|
|||||||
/**
|
/**
|
||||||
* set the factors
|
* set the factors
|
||||||
*
|
*
|
||||||
* @param factors: percentages for each type of event
|
* @param factors percentages for each type of event
|
||||||
*/
|
*/
|
||||||
public void setFactors(float factors[]) {
|
public void setFactors(float factors[]) {
|
||||||
int c = FACTORZ_COUNT;
|
int c = FACTORZ_COUNT;
|
||||||
|
|||||||
@@ -26,46 +26,50 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import android.view.KeyEvent;
|
|
||||||
/**
|
/**
|
||||||
* monkey event queue. It takes a script to produce events
|
* monkey event queue. It takes a script to produce events sample script format:
|
||||||
*
|
*
|
||||||
* sample script format:
|
* <pre>
|
||||||
* type= raw events
|
* type= raw events
|
||||||
* count= 10
|
* count= 10
|
||||||
* speed= 1.0
|
* speed= 1.0
|
||||||
* start data >>
|
* start data >>
|
||||||
* captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,
|
* captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
|
||||||
* 0.06666667,0,0.0,0.0,65539,0)
|
|
||||||
* captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
|
* captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
|
||||||
* captureDispatchFlip(true)
|
* captureDispatchFlip(true)
|
||||||
* ...
|
* ...
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
public class MonkeySourceScript implements MonkeyEventSource {
|
public class MonkeySourceScript implements MonkeyEventSource {
|
||||||
private int mEventCountInScript = 0; //total number of events in the file
|
private int mEventCountInScript = 0; // total number of events in the file
|
||||||
|
|
||||||
private int mVerbose = 0;
|
private int mVerbose = 0;
|
||||||
|
|
||||||
private double mSpeed = 1.0;
|
private double mSpeed = 1.0;
|
||||||
|
|
||||||
private String mScriptFileName;
|
private String mScriptFileName;
|
||||||
|
|
||||||
private MonkeyEventQueue mQ;
|
private MonkeyEventQueue mQ;
|
||||||
|
|
||||||
private static final String HEADER_TYPE = "type=";
|
|
||||||
private static final String HEADER_COUNT = "count=";
|
private static final String HEADER_COUNT = "count=";
|
||||||
|
|
||||||
private static final String HEADER_SPEED = "speed=";
|
private static final String HEADER_SPEED = "speed=";
|
||||||
// New script type
|
|
||||||
private static final String USER_EVENT_TYPE = "user";
|
|
||||||
|
|
||||||
private long mLastRecordedDownTimeKey = 0;
|
private long mLastRecordedDownTimeKey = 0;
|
||||||
|
|
||||||
private long mLastRecordedDownTimeMotion = 0;
|
private long mLastRecordedDownTimeMotion = 0;
|
||||||
|
|
||||||
private long mLastExportDownTimeKey = 0;
|
private long mLastExportDownTimeKey = 0;
|
||||||
|
|
||||||
private long mLastExportDownTimeMotion = 0;
|
private long mLastExportDownTimeMotion = 0;
|
||||||
|
|
||||||
private long mLastExportEventTime = -1;
|
private long mLastExportEventTime = -1;
|
||||||
|
|
||||||
private long mLastRecordedEventTime = -1;
|
private long mLastRecordedEventTime = -1;
|
||||||
private String mScriptType = USER_EVENT_TYPE;
|
|
||||||
|
|
||||||
private static final boolean THIS_DEBUG = false;
|
private static final boolean THIS_DEBUG = false;
|
||||||
|
|
||||||
// a parameter that compensates the difference of real elapsed time and
|
// a parameter that compensates the difference of real elapsed time and
|
||||||
// time in theory
|
// time in theory
|
||||||
private static final long SLEEP_COMPENSATE_DIFF = 16;
|
private static final long SLEEP_COMPENSATE_DIFF = 16;
|
||||||
@@ -75,25 +79,38 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
|
|
||||||
// number of additional events added to the script
|
// number of additional events added to the script
|
||||||
// add HOME_KEY down and up events to make start UI consistent in each round
|
// add HOME_KEY down and up events to make start UI consistent in each round
|
||||||
private static final int POLICY_ADDITIONAL_EVENT_COUNT = 2;
|
private static final int POLICY_ADDITIONAL_EVENT_COUNT = 0;
|
||||||
|
|
||||||
// event key word in the capture log
|
// event key word in the capture log
|
||||||
private static final String EVENT_KEYWORD_POINTER = "DispatchPointer";
|
private static final String EVENT_KEYWORD_POINTER = "DispatchPointer";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_TRACKBALL = "DispatchTrackball";
|
private static final String EVENT_KEYWORD_TRACKBALL = "DispatchTrackball";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_KEY = "DispatchKey";
|
private static final String EVENT_KEYWORD_KEY = "DispatchKey";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_FLIP = "DispatchFlip";
|
private static final String EVENT_KEYWORD_FLIP = "DispatchFlip";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_KEYPRESS = "DispatchPress";
|
private static final String EVENT_KEYWORD_KEYPRESS = "DispatchPress";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_ACTIVITY = "LaunchActivity";
|
private static final String EVENT_KEYWORD_ACTIVITY = "LaunchActivity";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_WAIT = "UserWait";
|
private static final String EVENT_KEYWORD_WAIT = "UserWait";
|
||||||
|
|
||||||
private static final String EVENT_KEYWORD_LONGPRESS = "LongPress";
|
private static final String EVENT_KEYWORD_LONGPRESS = "LongPress";
|
||||||
|
|
||||||
// a line at the end of the header
|
// a line at the end of the header
|
||||||
private static final String STARTING_DATA_LINE = "start data >>";
|
private static final String STARTING_DATA_LINE = "start data >>";
|
||||||
|
|
||||||
private boolean mFileOpened = false;
|
private boolean mFileOpened = false;
|
||||||
private static int LONGPRESS_WAIT_TIME = 2000; // wait time for the long press
|
|
||||||
|
private static int LONGPRESS_WAIT_TIME = 2000; // wait time for the long
|
||||||
|
|
||||||
|
// press
|
||||||
|
|
||||||
FileInputStream mFStream;
|
FileInputStream mFStream;
|
||||||
|
|
||||||
DataInputStream mInputStream;
|
DataInputStream mInputStream;
|
||||||
|
|
||||||
BufferedReader mBufferReader;
|
BufferedReader mBufferReader;
|
||||||
|
|
||||||
public MonkeySourceScript(String filename, long throttle) {
|
public MonkeySourceScript(String filename, long throttle) {
|
||||||
@@ -102,11 +119,10 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @return the number of total events that will be generated in a round
|
* @return the number of total events that will be generated in a round
|
||||||
*/
|
*/
|
||||||
public int getOneRoundEventCount() {
|
public int getOneRoundEventCount() {
|
||||||
//plus one home key down and up event
|
// plus one home key down and up event
|
||||||
return mEventCountInScript + POLICY_ADDITIONAL_EVENT_COUNT;
|
return mEventCountInScript + POLICY_ADDITIONAL_EVENT_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,14 +145,12 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
|
|
||||||
mFStream = new FileInputStream(mScriptFileName);
|
mFStream = new FileInputStream(mScriptFileName);
|
||||||
mInputStream = new DataInputStream(mFStream);
|
mInputStream = new DataInputStream(mFStream);
|
||||||
mBufferReader = new BufferedReader(
|
mBufferReader = new BufferedReader(new InputStreamReader(mInputStream));
|
||||||
new InputStreamReader(mInputStream));
|
|
||||||
String sLine;
|
String sLine;
|
||||||
while ((sLine = mBufferReader.readLine()) != null) {
|
while ((sLine = mBufferReader.readLine()) != null) {
|
||||||
sLine = sLine.trim();
|
sLine = sLine.trim();
|
||||||
if (sLine.indexOf(HEADER_TYPE) >= 0) {
|
|
||||||
mScriptType = sLine.substring(HEADER_TYPE.length() + 1).trim();
|
if (sLine.indexOf(HEADER_COUNT) >= 0) {
|
||||||
} else if (sLine.indexOf(HEADER_COUNT) >= 0) {
|
|
||||||
try {
|
try {
|
||||||
mEventCountInScript = Integer.parseInt(sLine.substring(
|
mEventCountInScript = Integer.parseInt(sLine.substring(
|
||||||
HEADER_COUNT.length() + 1).trim());
|
HEADER_COUNT.length() + 1).trim());
|
||||||
@@ -145,8 +159,8 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
} else if (sLine.indexOf(HEADER_SPEED) >= 0) {
|
} else if (sLine.indexOf(HEADER_SPEED) >= 0) {
|
||||||
try {
|
try {
|
||||||
mSpeed = Double.parseDouble(sLine.substring(
|
mSpeed = Double.parseDouble(sLine.substring(HEADER_SPEED.length() + 1)
|
||||||
HEADER_SPEED.length() + 1).trim());
|
.trim());
|
||||||
|
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
System.err.println(e);
|
System.err.println(e);
|
||||||
@@ -172,96 +186,107 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleRawEvent(String s, StringTokenizer st) {
|
private void handleEvent(String s, String[] args) {
|
||||||
if (s.indexOf(EVENT_KEYWORD_KEY) >= 0) {
|
// Handle key event
|
||||||
// key events
|
if (s.indexOf(EVENT_KEYWORD_KEY) >= 0 && args.length == 8) {
|
||||||
try {
|
try {
|
||||||
System.out.println(" old key\n");
|
System.out.println(" old key\n");
|
||||||
long downTime = Long.parseLong(st.nextToken());
|
long downTime = Long.parseLong(args[0]);
|
||||||
long eventTime = Long.parseLong(st.nextToken());
|
long eventTime = Long.parseLong(args[1]);
|
||||||
int action = Integer.parseInt(st.nextToken());
|
int action = Integer.parseInt(args[2]);
|
||||||
int code = Integer.parseInt(st.nextToken());
|
int code = Integer.parseInt(args[3]);
|
||||||
int repeat = Integer.parseInt(st.nextToken());
|
int repeat = Integer.parseInt(args[4]);
|
||||||
int metaState = Integer.parseInt(st.nextToken());
|
int metaState = Integer.parseInt(args[5]);
|
||||||
int device = Integer.parseInt(st.nextToken());
|
int device = Integer.parseInt(args[6]);
|
||||||
int scancode = Integer.parseInt(st.nextToken());
|
int scancode = Integer.parseInt(args[7]);
|
||||||
|
|
||||||
MonkeyKeyEvent e =
|
MonkeyKeyEvent e = new MonkeyKeyEvent(downTime, eventTime, action, code, repeat,
|
||||||
new MonkeyKeyEvent(downTime, eventTime, action, code, repeat, metaState,
|
metaState, device, scancode);
|
||||||
device, scancode);
|
|
||||||
System.out.println(" Key code " + code + "\n");
|
System.out.println(" Key code " + code + "\n");
|
||||||
|
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
System.out.println("Added key up \n");
|
System.out.println("Added key up \n");
|
||||||
|
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
// something wrong with this line in the script
|
|
||||||
}
|
}
|
||||||
} else if (s.indexOf(EVENT_KEYWORD_POINTER) >= 0 ||
|
return;
|
||||||
s.indexOf(EVENT_KEYWORD_TRACKBALL) >= 0) {
|
}
|
||||||
// trackball/pointer event
|
|
||||||
|
// Handle trackball or pointer events
|
||||||
|
if ((s.indexOf(EVENT_KEYWORD_POINTER) >= 0 || s.indexOf(EVENT_KEYWORD_TRACKBALL) >= 0)
|
||||||
|
&& args.length == 12) {
|
||||||
try {
|
try {
|
||||||
long downTime = Long.parseLong(st.nextToken());
|
long downTime = Long.parseLong(args[0]);
|
||||||
long eventTime = Long.parseLong(st.nextToken());
|
long eventTime = Long.parseLong(args[1]);
|
||||||
int action = Integer.parseInt(st.nextToken());
|
int action = Integer.parseInt(args[2]);
|
||||||
float x = Float.parseFloat(st.nextToken());
|
float x = Float.parseFloat(args[3]);
|
||||||
float y = Float.parseFloat(st.nextToken());
|
float y = Float.parseFloat(args[4]);
|
||||||
float pressure = Float.parseFloat(st.nextToken());
|
float pressure = Float.parseFloat(args[5]);
|
||||||
float size = Float.parseFloat(st.nextToken());
|
float size = Float.parseFloat(args[6]);
|
||||||
int metaState = Integer.parseInt(st.nextToken());
|
int metaState = Integer.parseInt(args[7]);
|
||||||
float xPrecision = Float.parseFloat(st.nextToken());
|
float xPrecision = Float.parseFloat(args[8]);
|
||||||
float yPrecision = Float.parseFloat(st.nextToken());
|
float yPrecision = Float.parseFloat(args[9]);
|
||||||
int device = Integer.parseInt(st.nextToken());
|
int device = Integer.parseInt(args[10]);
|
||||||
int edgeFlags = Integer.parseInt(st.nextToken());
|
int edgeFlags = Integer.parseInt(args[11]);
|
||||||
|
|
||||||
int type = MonkeyEvent.EVENT_TYPE_TRACKBALL;
|
int type = MonkeyEvent.EVENT_TYPE_TRACKBALL;
|
||||||
if (s.indexOf("Pointer") > 0) {
|
if (s.indexOf("Pointer") > 0) {
|
||||||
type = MonkeyEvent.EVENT_TYPE_POINTER;
|
type = MonkeyEvent.EVENT_TYPE_POINTER;
|
||||||
}
|
}
|
||||||
MonkeyMotionEvent e =
|
MonkeyMotionEvent e = new MonkeyMotionEvent(type, downTime, eventTime, action, x,
|
||||||
new MonkeyMotionEvent(type, downTime, eventTime, action, x, y, pressure,
|
y, pressure, size, metaState, xPrecision, yPrecision, device, edgeFlags);
|
||||||
size, metaState, xPrecision, yPrecision, device, edgeFlags);
|
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
// we ignore this event
|
|
||||||
}
|
}
|
||||||
} else if (s.indexOf(EVENT_KEYWORD_FLIP) >= 0) {
|
return;
|
||||||
boolean keyboardOpen = Boolean.parseBoolean(st.nextToken());
|
}
|
||||||
|
|
||||||
|
// Handle flip events
|
||||||
|
if (s.indexOf(EVENT_KEYWORD_FLIP) >= 0 && args.length == 1) {
|
||||||
|
boolean keyboardOpen = Boolean.parseBoolean(args[0]);
|
||||||
MonkeyFlipEvent e = new MonkeyFlipEvent(keyboardOpen);
|
MonkeyFlipEvent e = new MonkeyFlipEvent(keyboardOpen);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// Handle launch events
|
||||||
|
if (s.indexOf(EVENT_KEYWORD_ACTIVITY) >= 0 && args.length == 2) {
|
||||||
private void handleUserEvent(String s, StringTokenizer st) {
|
String pkg_name = args[0];
|
||||||
if (s.indexOf(EVENT_KEYWORD_ACTIVITY) >= 0) {
|
String cl_name = args[1];
|
||||||
String pkg_name = st.nextToken();
|
|
||||||
String cl_name = st.nextToken();
|
|
||||||
ComponentName mApp = new ComponentName(pkg_name, cl_name);
|
ComponentName mApp = new ComponentName(pkg_name, cl_name);
|
||||||
MonkeyActivityEvent e = new MonkeyActivityEvent(mApp);
|
MonkeyActivityEvent e = new MonkeyActivityEvent(mApp);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (s.indexOf(EVENT_KEYWORD_WAIT) >= 0) {
|
// Handle wait events
|
||||||
long sleeptime = Integer.parseInt(st.nextToken());
|
if (s.indexOf(EVENT_KEYWORD_WAIT) >= 0 && args.length == 1) {
|
||||||
|
try {
|
||||||
|
long sleeptime = Integer.parseInt(args[0]);
|
||||||
MonkeyWaitEvent e = new MonkeyWaitEvent(sleeptime);
|
MonkeyWaitEvent e = new MonkeyWaitEvent(sleeptime);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (s.indexOf(EVENT_KEYWORD_KEYPRESS) >= 0) {
|
// Handle keypress events
|
||||||
String key_name = st.nextToken();
|
if (s.indexOf(EVENT_KEYWORD_KEYPRESS) >= 0 && args.length == 1) {
|
||||||
|
String key_name = args[0];
|
||||||
int keyCode = MonkeySourceRandom.getKeyCode(key_name);
|
int keyCode = MonkeySourceRandom.getKeyCode(key_name);
|
||||||
MonkeyKeyEvent e = new MonkeyKeyEvent(KeyEvent.ACTION_DOWN, keyCode);
|
MonkeyKeyEvent e = new MonkeyKeyEvent(KeyEvent.ACTION_DOWN, keyCode);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
e = new MonkeyKeyEvent(KeyEvent.ACTION_UP, keyCode);
|
e = new MonkeyKeyEvent(KeyEvent.ACTION_UP, keyCode);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
} else if (s.indexOf(EVENT_KEYWORD_LONGPRESS) >= 0) {
|
return;
|
||||||
// handle the long press
|
}
|
||||||
MonkeyKeyEvent e = new MonkeyKeyEvent(KeyEvent.ACTION_DOWN,
|
|
||||||
KeyEvent.KEYCODE_DPAD_CENTER);
|
// Handle longpress events
|
||||||
|
if (s.indexOf(EVENT_KEYWORD_LONGPRESS) >= 0) {
|
||||||
|
MonkeyKeyEvent e;
|
||||||
|
e = new MonkeyKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER);
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
MonkeyWaitEvent we = new MonkeyWaitEvent(LONGPRESS_WAIT_TIME);
|
MonkeyWaitEvent we = new MonkeyWaitEvent(LONGPRESS_WAIT_TIME);
|
||||||
mQ.addLast(we);
|
mQ.addLast(we);
|
||||||
e = new MonkeyKeyEvent(KeyEvent.ACTION_UP,
|
e = new MonkeyKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER);
|
||||||
KeyEvent.KEYCODE_DPAD_CENTER);
|
|
||||||
mQ.addLast(e);
|
mQ.addLast(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,15 +299,9 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringTokenizer st = new StringTokenizer(
|
String[] args = s.substring(index1 + 1, index2).split(",");
|
||||||
s.substring(index1 + 1, index2), ",");
|
|
||||||
if (mScriptType.compareTo(USER_EVENT_TYPE) == 0) {
|
handleEvent(s, args);
|
||||||
// User event type
|
|
||||||
handleUserEvent(s, st);
|
|
||||||
} else {
|
|
||||||
// Raw type
|
|
||||||
handleRawEvent(s,st);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeFile() {
|
private void closeFile() {
|
||||||
@@ -299,19 +318,9 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* add home key press/release event to the queue
|
|
||||||
*/
|
|
||||||
private void addHomeKeyEvent() {
|
|
||||||
MonkeyKeyEvent e = new MonkeyKeyEvent(KeyEvent.ACTION_DOWN,
|
|
||||||
KeyEvent.KEYCODE_HOME);
|
|
||||||
mQ.addLast(e);
|
|
||||||
e = new MonkeyKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HOME);
|
|
||||||
mQ.addLast(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* read next batch of events from the provided script file
|
* read next batch of events from the provided script file
|
||||||
|
*
|
||||||
* @return true if success
|
* @return true if success
|
||||||
*/
|
*/
|
||||||
private boolean readNextBatch() {
|
private boolean readNextBatch() {
|
||||||
@@ -335,8 +344,7 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while (readCount++ < MAX_ONE_TIME_READS &&
|
while (readCount++ < MAX_ONE_TIME_READS && (sLine = mBufferReader.readLine()) != null) {
|
||||||
(sLine = mBufferReader.readLine()) != null) {
|
|
||||||
sLine = sLine.trim();
|
sLine = sLine.trim();
|
||||||
processLine(sLine);
|
processLine(sLine);
|
||||||
}
|
}
|
||||||
@@ -357,6 +365,7 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* sleep for a period of given time, introducing latency among events
|
* sleep for a period of given time, introducing latency among events
|
||||||
|
*
|
||||||
* @param time to sleep in millisecond
|
* @param time to sleep in millisecond
|
||||||
*/
|
*/
|
||||||
private void needSleep(long time) {
|
private void needSleep(long time) {
|
||||||
@@ -375,8 +384,7 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
public boolean validate() {
|
public boolean validate() {
|
||||||
boolean b = readNextBatch();
|
boolean b = readNextBatch();
|
||||||
if (mVerbose > 0) {
|
if (mVerbose > 0) {
|
||||||
System.out.println("Replaying " + mEventCountInScript +
|
System.out.println("Replaying " + mEventCountInScript + " events with speed " + mSpeed);
|
||||||
" events with speed " + mSpeed);
|
|
||||||
}
|
}
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
@@ -386,8 +394,9 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* adjust key downtime and eventtime according to both
|
* adjust key downtime and eventtime according to both recorded values and
|
||||||
* recorded values and current system time
|
* current system time
|
||||||
|
*
|
||||||
* @param e KeyEvent
|
* @param e KeyEvent
|
||||||
*/
|
*/
|
||||||
private void adjustKeyEventTime(MonkeyKeyEvent e) {
|
private void adjustKeyEventTime(MonkeyKeyEvent e) {
|
||||||
@@ -408,8 +417,7 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
} else {
|
} else {
|
||||||
thisDownTime = mLastExportDownTimeKey;
|
thisDownTime = mLastExportDownTimeKey;
|
||||||
}
|
}
|
||||||
expectedDelay = (long) ((e.getEventTime() -
|
expectedDelay = (long) ((e.getEventTime() - mLastRecordedEventTime) * mSpeed);
|
||||||
mLastRecordedEventTime) * mSpeed);
|
|
||||||
thisEventTime = mLastExportEventTime + expectedDelay;
|
thisEventTime = mLastExportEventTime + expectedDelay;
|
||||||
// add sleep to simulate everything in recording
|
// add sleep to simulate everything in recording
|
||||||
needSleep(expectedDelay - SLEEP_COMPENSATE_DIFF);
|
needSleep(expectedDelay - SLEEP_COMPENSATE_DIFF);
|
||||||
@@ -423,8 +431,9 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* adjust motion downtime and eventtime according to both
|
* adjust motion downtime and eventtime according to both recorded values
|
||||||
* recorded values and current system time
|
* and current system time
|
||||||
|
*
|
||||||
* @param e KeyEvent
|
* @param e KeyEvent
|
||||||
*/
|
*/
|
||||||
private void adjustMotionEventTime(MonkeyMotionEvent e) {
|
private void adjustMotionEventTime(MonkeyMotionEvent e) {
|
||||||
@@ -445,8 +454,7 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
} else {
|
} else {
|
||||||
thisDownTime = mLastExportDownTimeMotion;
|
thisDownTime = mLastExportDownTimeMotion;
|
||||||
}
|
}
|
||||||
expectedDelay = (long) ((e.getEventTime() -
|
expectedDelay = (long) ((e.getEventTime() - mLastRecordedEventTime) * mSpeed);
|
||||||
mLastRecordedEventTime) * mSpeed);
|
|
||||||
thisEventTime = mLastExportEventTime + expectedDelay;
|
thisEventTime = mLastExportEventTime + expectedDelay;
|
||||||
// add sleep to simulate everything in recording
|
// add sleep to simulate everything in recording
|
||||||
needSleep(expectedDelay - SLEEP_COMPENSATE_DIFF);
|
needSleep(expectedDelay - SLEEP_COMPENSATE_DIFF);
|
||||||
@@ -462,7 +470,9 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* if the queue is empty, we generate events first
|
* if the queue is empty, we generate events first
|
||||||
* @return the first event in the queue, if null, indicating the system crashes
|
*
|
||||||
|
* @return the first event in the queue, if null, indicating the system
|
||||||
|
* crashes
|
||||||
*/
|
*/
|
||||||
public MonkeyEvent getNextEvent() {
|
public MonkeyEvent getNextEvent() {
|
||||||
long recordedEventTime = -1;
|
long recordedEventTime = -1;
|
||||||
@@ -474,8 +484,8 @@ public class MonkeySourceScript implements MonkeyEventSource {
|
|||||||
mQ.removeFirst();
|
mQ.removeFirst();
|
||||||
if (e.getEventType() == MonkeyEvent.EVENT_TYPE_KEY) {
|
if (e.getEventType() == MonkeyEvent.EVENT_TYPE_KEY) {
|
||||||
adjustKeyEventTime((MonkeyKeyEvent) e);
|
adjustKeyEventTime((MonkeyKeyEvent) e);
|
||||||
} else if (e.getEventType() == MonkeyEvent.EVENT_TYPE_POINTER ||
|
} else if (e.getEventType() == MonkeyEvent.EVENT_TYPE_POINTER
|
||||||
e.getEventType() == MonkeyEvent.EVENT_TYPE_TRACKBALL) {
|
|| e.getEventType() == MonkeyEvent.EVENT_TYPE_TRACKBALL) {
|
||||||
adjustMotionEventTime((MonkeyMotionEvent) e);
|
adjustMotionEventTime((MonkeyMotionEvent) e);
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
|
|||||||
Reference in New Issue
Block a user