1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-21 01:59:13 +00:00

More performance timings for UX actions

- fix: localhost vs on-device slide name comparison
- add: more activities for FPS instrumentation
This commit is contained in:
muendelezaji 2016-05-21 14:39:56 +01:00 committed by muendelezaji
parent 1e0a600934
commit b167e2dae6
3 changed files with 85 additions and 23 deletions

View File

@ -32,7 +32,11 @@ class GoogleSlides(AndroidUiAutoBenchmark):
# Views for FPS instrumentation # Views for FPS instrumentation
view = [ view = [
package + '/com.google.android.apps.docs.quickoffice.filepicker.FilePickerActivity',
package + '/com.google.android.apps.docs.editors.shared.filepicker.FilePickerActivity',
package + '/com.google.android.apps.docs.quickoffice.filepicker.LocalSaveAsActivity',
package + '/com.qo.android.quickpoint.Quickpoint', package + '/com.qo.android.quickpoint.Quickpoint',
package + '/com.google.android.apps.docs.app.DocsPreferencesActivity',
package + '/com.google.android.apps.docs.app.DocListActivity', package + '/com.google.android.apps.docs.app.DocListActivity',
package + '/com.google.android.apps.docs.welcome.warmwelcome.TrackingWelcomeActivity', package + '/com.google.android.apps.docs.welcome.warmwelcome.TrackingWelcomeActivity',
package + '/com.google.android.apps.docs.app.NewMainProxyActivity', package + '/com.google.android.apps.docs.app.NewMainProxyActivity',
@ -65,7 +69,7 @@ class GoogleSlides(AndroidUiAutoBenchmark):
self.local_dir = self.dependencies_directory self.local_dir = self.dependencies_directory
# Android downloads folder # Android downloads folder
self.device_dir = path.join(self.device.working_directory, '..', 'Download') self.device_dir = path.join(self.device.working_directory, '..', 'Download')
self.wa_test_file = 'wa_test_' + self.local_file self.wa_test_file = 'wa_test_{}'.format(self.local_file) if self.local_file else None
def validate(self): def validate(self):
log_method(self, 'validate') log_method(self, 'validate')
@ -80,10 +84,12 @@ class GoogleSlides(AndroidUiAutoBenchmark):
def initialize(self, context): def initialize(self, context):
log_method(self, 'initialize') log_method(self, 'initialize')
super(GoogleSlides, self).initialize(context) super(GoogleSlides, self).initialize(context)
self.logger.info('local_dir={}, local_file={}'.format(self.local_dir, self.local_file))
self.logger.info('device_dir={}, wa_test_file={}'.format(self.device_dir, self.wa_test_file))
if self.local_file: if self.local_file:
# push local PPT file # push local PPT file
for entry in os.listdir(self.local_dir): for entry in os.listdir(self.local_dir):
if entry is self.local_file: if entry == self.local_file:
self.device.push_file(path.join(self.local_dir, self.local_file), self.device.push_file(path.join(self.local_dir, self.local_file),
path.join(self.device_dir, self.wa_test_file), path.join(self.device_dir, self.wa_test_file),
timeout=60) timeout=60)
@ -112,7 +118,7 @@ class GoogleSlides(AndroidUiAutoBenchmark):
if self.local_file: if self.local_file:
# delete pushed PPT file # delete pushed PPT file
for entry in self.device.listdir(self.device_dir): for entry in self.device.listdir(self.device_dir):
if entry is self.wa_test_file: if entry == self.wa_test_file:
self.device.delete_file(path.join(self.device_dir, entry)) self.device.delete_file(path.join(self.device_dir, entry))
def wa_filename(self, filename): def wa_filename(self, filename):

View File

@ -52,8 +52,8 @@ public class UiAutomation extends UxPerfUiAutomation {
public static final int BY_TEXT = 2; public static final int BY_TEXT = 2;
public static final int BY_DESC = 3; public static final int BY_DESC = 3;
public static final int ONE_SECOND_IN_MS = 1000; public static final int DIALOG_WAIT_TIME_MS = 3000;
public static final int DEFAULT_SWIPE_STEPS = 20; public static final int DEFAULT_SWIPE_STEPS = 10;
public static final String NEW_DOC_FILENAME = "UX Perf Slides"; public static final String NEW_DOC_FILENAME = "UX Perf Slides";
@ -74,7 +74,7 @@ public class UiAutomation extends UxPerfUiAutomation {
+ "\t- Disabling result processors and instrumentation\n\tOther Configuration (via config.py)\n"; + "\t- Disabling result processors and instrumentation\n\tOther Configuration (via config.py)\n";
protected Map<String, Timer> results = new LinkedHashMap<String, Timer>(); protected Map<String, Timer> results = new LinkedHashMap<String, Timer>();
protected Timer resultTimer; protected Timer timer = new Timer();
protected Bundle parameters; protected Bundle parameters;
protected boolean dumpsysEnabled; protected boolean dumpsysEnabled;
@ -86,9 +86,11 @@ public class UiAutomation extends UxPerfUiAutomation {
public void parseParams(Bundle parameters) throws Exception { public void parseParams(Bundle parameters) throws Exception {
dumpsysEnabled = Boolean.parseBoolean(parameters.getString("dumpsys_enabled")); dumpsysEnabled = Boolean.parseBoolean(parameters.getString("dumpsys_enabled"));
outputDir = parameters.getString("output_dir"); outputDir = parameters.getString("output_dir");
localFile = parameters.getString("local_file", ""); localFile = parameters.getString("local_file");
slideCount = Integer.parseInt(parameters.getString("slide_count"));
useLocalFile = localFile != null; useLocalFile = localFile != null;
if (useLocalFile) {
slideCount = Integer.parseInt(parameters.getString("slide_count"));
}
} }
public void runUiAutomation() throws Exception { public void runUiAutomation() throws Exception {
@ -105,7 +107,7 @@ public class UiAutomation extends UxPerfUiAutomation {
} }
protected void skipWelcomeScreen() throws Exception { protected void skipWelcomeScreen() throws Exception {
Timer timer = new Timer(); timer = new Timer();
timer.start(); timer.start();
clickView(BY_TEXT, "Skip", true); clickView(BY_TEXT, "Skip", true);
timer.end(); timer.end();
@ -114,9 +116,9 @@ public class UiAutomation extends UxPerfUiAutomation {
} }
protected void enablePowerpointCompat() throws Exception { protected void enablePowerpointCompat() throws Exception {
Timer timer = new Timer(); timer = new Timer();
timer.start(); timer.start();
uiDeviceSwipeHorizontal(0, getDisplayWidth()/2, getDisplayHeight()/2, 10); uiDeviceSwipeHorizontal(0, getDisplayWidth()/2, getDisplayHeight()/2);
clickView(BY_TEXT, "Settings", true); clickView(BY_TEXT, "Settings", true);
clickView(BY_TEXT, "Create PowerPoint"); clickView(BY_TEXT, "Create PowerPoint");
getUiDevice().pressBack(); getUiDevice().pressBack();
@ -130,55 +132,89 @@ public class UiAutomation extends UxPerfUiAutomation {
// For robustness, it's nice to remove these placeholders // For robustness, it's nice to remove these placeholders
// However, the test should not crash because of it, so a silent catch is used // However, the test should not crash because of it, so a silent catch is used
UiObject docView = new UiObject(new UiSelector().textContains(docName)); UiObject docView = new UiObject(new UiSelector().textContains(docName));
if (docView.waitForExists(ONE_SECOND_IN_MS)) { if (docView.waitForExists(1000)) {
try { try {
deleteDocument(docName); deleteDocument(docName);
} catch (Exception e) { } catch (Exception e) {
// do nothing // do nothing
} }
} }
// Open document
timer = new Timer();
timer.start();
clickView(BY_DESC, "Open presentation"); clickView(BY_DESC, "Open presentation");
clickView(BY_TEXT, "Device storage", true); clickView(BY_TEXT, "Device storage", true);
timer.end();
results.put("open_picker", timer);
// Allow SD card access if requested // Allow SD card access if requested
UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides")); UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides"));
if (permissionView.waitForExists(ONE_SECOND_IN_MS)) { if (permissionView.waitForExists(DIALOG_WAIT_TIME_MS)) {
clickView(BY_TEXT, "Allow"); clickView(BY_TEXT, "Allow");
} }
// Scroll through document list if necessary // Scroll through document list if necessary
UiScrollable list = new UiScrollable(new UiSelector().className("android.widget.ListView")); UiScrollable list = new UiScrollable(new UiSelector().className("android.widget.ListView"));
list.scrollIntoView(new UiSelector().textContains(docName)); list.scrollIntoView(new UiSelector().textContains(docName));
timer = new Timer();
timer.start();
clickView(BY_TEXT, docName); clickView(BY_TEXT, docName);
clickView(BY_TEXT, "Open", CLASS_BUTTON, true); clickView(BY_TEXT, "Open", CLASS_BUTTON, true);
timer.end();
results.put("open_document", timer);
sleep(5); sleep(5);
int centerY = getUiDevice().getDisplayHeight() / 2; int centerY = getUiDevice().getDisplayHeight() / 2;
int centerX = getUiDevice().getDisplayWidth() / 2; int centerX = getUiDevice().getDisplayWidth() / 2;
int slidesLeft = slideCount - 1; int slidesLeft = slideCount - 1;
// scroll forward in edit mode // scroll forward in edit mode
timer = new Timer();
timer.start();
while (slidesLeft-- > 0) { while (slidesLeft-- > 0) {
uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY);
sleep(1); sleep(1);
} }
timer.end();
results.put("slides_forward", timer);
sleep(1); sleep(1);
// scroll backward in edit mode // scroll backward in edit mode
timer = new Timer();
timer.start();
while (++slidesLeft < slideCount - 1) { while (++slidesLeft < slideCount - 1) {
uiDeviceSwipeHorizontal(centerX - centerX/2, centerX + centerX/2, centerY); uiDeviceSwipeHorizontal(centerX - centerX/2, centerX + centerX/2, centerY);
sleep(1); sleep(1);
} }
timer.end();
results.put("slides_reverse", timer);
sleep(1);
// scroll forward in slideshow mode // scroll forward in slideshow mode
timer = new Timer();
timer.start();
clickView(BY_DESC, "Start slideshow", true); clickView(BY_DESC, "Start slideshow", true);
while (--slidesLeft > 0) { while (slidesLeft-- > 0) {
uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY);
sleep(1); sleep(1);
} }
timer.end();
results.put("play_slideshow", timer);
sleep(1);
getUiDevice().pressBack(); getUiDevice().pressBack();
getUiDevice().pressBack(); getUiDevice().pressBack();
} }
protected void testEditNewSlidesDocument(String docName) throws Exception { protected void testEditNewSlidesDocument(String docName) throws Exception {
// create new file // create new file
timer = new Timer();
timer.start();
clickView(BY_DESC, "New presentation"); clickView(BY_DESC, "New presentation");
clickView(BY_TEXT, "New PowerPoint", true); clickView(BY_TEXT, "New PowerPoint", true);
timer.end();
results.put("create_document", timer);
// first slide // first slide
enterTextInSlide("Title", "WORKLOAD AUTOMATION"); enterTextInSlide("Title", "WORKLOAD AUTOMATION");
enterTextInSlide("Subtitle", "Measuring perfomance of different productivity apps on Android OS"); enterTextInSlide("Subtitle", "Measuring perfomance of different productivity apps on Android OS");
@ -239,47 +275,65 @@ public class UiAutomation extends UxPerfUiAutomation {
} }
public void insertSlide(String slideLayout) throws Exception { public void insertSlide(String slideLayout) throws Exception {
sleep(1); // a bit of time to see previous slide
UiObject view = getViewByDesc("Insert slide"); UiObject view = getViewByDesc("Insert slide");
view.clickAndWaitForNewWindow(); view.clickAndWaitForNewWindow();
view = getViewByText(slideLayout); view = getViewByText(slideLayout);
view.clickAndWaitForNewWindow(); view.clickAndWaitForNewWindow();
} }
public UiObject enterTextInSlide(String viewName, String textToEnter) throws Exception { public void enterTextInSlide(String viewName, String textToEnter) throws Exception {
UiObject view = getViewByDesc(viewName); UiObject view = getViewByDesc(viewName);
view.click(); view.click();
SystemClock.sleep(100);
view.click(); // double click
view.setText(textToEnter); view.setText(textToEnter);
getUiDevice().pressBack(); try {
clickView(BY_DESC, "Done");
} catch (UiObjectNotFoundException e) {
clickView(BY_ID, "android:id/action_mode_close_button");
}
SystemClock.sleep(200); SystemClock.sleep(200);
return view;
} }
public void saveDocument(String docName) throws Exception { public void saveDocument(String docName) throws Exception {
timer = new Timer();
timer.start();
clickView(BY_TEXT, "SAVE"); clickView(BY_TEXT, "SAVE");
clickView(BY_TEXT, "Device"); clickView(BY_TEXT, "Device");
timer.end();
results.put("save_dialog1", timer);
// Allow SD card access if requested // Allow SD card access if requested
UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides")); UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides"));
if (permissionView.waitForExists(ONE_SECOND_IN_MS)) { if (permissionView.waitForExists(DIALOG_WAIT_TIME_MS)) {
clickView(BY_TEXT, "Allow"); clickView(BY_TEXT, "Allow");
} }
timer = new Timer();
timer.start();
UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text"); UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text");
filename.clearTextField(); filename.clearTextField();
filename.setText(docName); filename.setText(docName);
clickView(BY_TEXT, "Save"); clickView(BY_TEXT, "Save", CLASS_BUTTON);
timer.end();
results.put("save_dialog2", timer);
// Overwrite if prompted // Overwrite if prompted
UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists")); UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists"));
if (overwriteView.waitForExists(ONE_SECOND_IN_MS)) { if (overwriteView.waitForExists(DIALOG_WAIT_TIME_MS)) {
clickView(BY_TEXT, "Overwrite"); clickView(BY_TEXT, "Overwrite");
} }
sleep(1); sleep(1);
} }
public void deleteDocument(String docName) throws Exception { public void deleteDocument(String docName) throws Exception {
timer = new Timer();
timer.start();
UiObject doc = getViewByText(docName); UiObject doc = getViewByText(docName);
doc.longClick(); doc.longClick();
clickView(BY_TEXT, "Remove"); clickView(BY_TEXT, "Remove");
timer.end();
results.put("delete_dialog1", timer);
timer = new Timer();
timer.start();
UiObject deleteButton; UiObject deleteButton;
try { try {
deleteButton = getUiObjectByText("Remove", CLASS_BUTTON); deleteButton = getUiObjectByText("Remove", CLASS_BUTTON);
@ -287,6 +341,8 @@ public class UiAutomation extends UxPerfUiAutomation {
deleteButton = getUiObjectByText("Ok", CLASS_BUTTON); deleteButton = getUiObjectByText("Ok", CLASS_BUTTON);
} }
deleteButton.clickAndWaitForNewWindow(); deleteButton.clickAndWaitForNewWindow();
timer.end();
results.put("delete_dialog2", timer);
sleep(1); sleep(1);
} }
@ -294,7 +350,7 @@ public class UiAutomation extends UxPerfUiAutomation {
if (repeat < 1 || !view.isClickable()) return; if (repeat < 1 || !view.isClickable()) return;
while (repeat-- > 0) { while (repeat-- > 0) {
view.click(); view.click();
SystemClock.sleep(100); // in order to register as separate click SystemClock.sleep(50); // in order to register as separate click
} }
} }