From b167e2dae697c932e8c9fe1860535b9ad634a742 Mon Sep 17 00:00:00 2001 From: muendelezaji Date: Sat, 21 May 2016 14:39:56 +0100 Subject: [PATCH] More performance timings for UX actions - fix: localhost vs on-device slide name comparison - add: more activities for FPS instrumentation --- wlauto/workloads/googleslides/__init__.py | 12 ++- .../com.arm.wlauto.uiauto.googleslides.jar | Bin 14330 -> 14619 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 96 ++++++++++++++---- 3 files changed, 85 insertions(+), 23 deletions(-) diff --git a/wlauto/workloads/googleslides/__init__.py b/wlauto/workloads/googleslides/__init__.py index aa6ce12f..dde98245 100644 --- a/wlauto/workloads/googleslides/__init__.py +++ b/wlauto/workloads/googleslides/__init__.py @@ -32,7 +32,11 @@ class GoogleSlides(AndroidUiAutoBenchmark): # Views for FPS instrumentation 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.google.android.apps.docs.app.DocsPreferencesActivity', package + '/com.google.android.apps.docs.app.DocListActivity', package + '/com.google.android.apps.docs.welcome.warmwelcome.TrackingWelcomeActivity', package + '/com.google.android.apps.docs.app.NewMainProxyActivity', @@ -65,7 +69,7 @@ class GoogleSlides(AndroidUiAutoBenchmark): self.local_dir = self.dependencies_directory # Android downloads folder 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): log_method(self, 'validate') @@ -80,10 +84,12 @@ class GoogleSlides(AndroidUiAutoBenchmark): def initialize(self, context): log_method(self, 'initialize') 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: # push local PPT file 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), path.join(self.device_dir, self.wa_test_file), timeout=60) @@ -112,7 +118,7 @@ class GoogleSlides(AndroidUiAutoBenchmark): if self.local_file: # delete pushed PPT file 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)) def wa_filename(self, filename): diff --git a/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar b/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar index 6e6b6b2457da245025271a5c9a18a0ecac51b985..2ddfbde753bb8d861d7e36ec3007b2691becfa01 100644 GIT binary patch delta 14398 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 XmXOLN`2PjDB^+=u!Z2_`{7e4_nUDB~ diff --git a/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 394a93e0..fc3339a5 100644 --- a/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -52,8 +52,8 @@ public class UiAutomation extends UxPerfUiAutomation { public static final int BY_TEXT = 2; public static final int BY_DESC = 3; - public static final int ONE_SECOND_IN_MS = 1000; - public static final int DEFAULT_SWIPE_STEPS = 20; + public static final int DIALOG_WAIT_TIME_MS = 3000; + public static final int DEFAULT_SWIPE_STEPS = 10; 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"; protected Map results = new LinkedHashMap(); - protected Timer resultTimer; + protected Timer timer = new Timer(); protected Bundle parameters; protected boolean dumpsysEnabled; @@ -86,9 +86,11 @@ public class UiAutomation extends UxPerfUiAutomation { public void parseParams(Bundle parameters) throws Exception { dumpsysEnabled = Boolean.parseBoolean(parameters.getString("dumpsys_enabled")); outputDir = parameters.getString("output_dir"); - localFile = parameters.getString("local_file", ""); - slideCount = Integer.parseInt(parameters.getString("slide_count")); + localFile = parameters.getString("local_file"); useLocalFile = localFile != null; + if (useLocalFile) { + slideCount = Integer.parseInt(parameters.getString("slide_count")); + } } public void runUiAutomation() throws Exception { @@ -105,7 +107,7 @@ public class UiAutomation extends UxPerfUiAutomation { } protected void skipWelcomeScreen() throws Exception { - Timer timer = new Timer(); + timer = new Timer(); timer.start(); clickView(BY_TEXT, "Skip", true); timer.end(); @@ -114,9 +116,9 @@ public class UiAutomation extends UxPerfUiAutomation { } protected void enablePowerpointCompat() throws Exception { - Timer timer = new Timer(); + timer = new Timer(); timer.start(); - uiDeviceSwipeHorizontal(0, getDisplayWidth()/2, getDisplayHeight()/2, 10); + uiDeviceSwipeHorizontal(0, getDisplayWidth()/2, getDisplayHeight()/2); clickView(BY_TEXT, "Settings", true); clickView(BY_TEXT, "Create PowerPoint"); getUiDevice().pressBack(); @@ -130,55 +132,89 @@ public class UiAutomation extends UxPerfUiAutomation { // For robustness, it's nice to remove these placeholders // However, the test should not crash because of it, so a silent catch is used UiObject docView = new UiObject(new UiSelector().textContains(docName)); - if (docView.waitForExists(ONE_SECOND_IN_MS)) { + if (docView.waitForExists(1000)) { try { deleteDocument(docName); } catch (Exception e) { // do nothing } } + + // Open document + timer = new Timer(); + timer.start(); clickView(BY_DESC, "Open presentation"); clickView(BY_TEXT, "Device storage", true); + timer.end(); + results.put("open_picker", timer); // Allow SD card access if requested 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"); } + // Scroll through document list if necessary UiScrollable list = new UiScrollable(new UiSelector().className("android.widget.ListView")); list.scrollIntoView(new UiSelector().textContains(docName)); + timer = new Timer(); + timer.start(); clickView(BY_TEXT, docName); clickView(BY_TEXT, "Open", CLASS_BUTTON, true); + timer.end(); + results.put("open_document", timer); sleep(5); int centerY = getUiDevice().getDisplayHeight() / 2; int centerX = getUiDevice().getDisplayWidth() / 2; int slidesLeft = slideCount - 1; + // scroll forward in edit mode + timer = new Timer(); + timer.start(); while (slidesLeft-- > 0) { uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); sleep(1); } + timer.end(); + results.put("slides_forward", timer); sleep(1); + // scroll backward in edit mode + timer = new Timer(); + timer.start(); while (++slidesLeft < slideCount - 1) { uiDeviceSwipeHorizontal(centerX - centerX/2, centerX + centerX/2, centerY); sleep(1); } + timer.end(); + results.put("slides_reverse", timer); + sleep(1); + // scroll forward in slideshow mode + timer = new Timer(); + timer.start(); clickView(BY_DESC, "Start slideshow", true); - while (--slidesLeft > 0) { + while (slidesLeft-- > 0) { uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); sleep(1); } + timer.end(); + results.put("play_slideshow", timer); + sleep(1); + getUiDevice().pressBack(); getUiDevice().pressBack(); } protected void testEditNewSlidesDocument(String docName) throws Exception { // create new file + timer = new Timer(); + timer.start(); clickView(BY_DESC, "New presentation"); clickView(BY_TEXT, "New PowerPoint", true); + timer.end(); + results.put("create_document", timer); + // first slide enterTextInSlide("Title", "WORKLOAD AUTOMATION"); 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 { + sleep(1); // a bit of time to see previous slide UiObject view = getViewByDesc("Insert slide"); view.clickAndWaitForNewWindow(); view = getViewByText(slideLayout); view.clickAndWaitForNewWindow(); } - public UiObject enterTextInSlide(String viewName, String textToEnter) throws Exception { + public void enterTextInSlide(String viewName, String textToEnter) throws Exception { UiObject view = getViewByDesc(viewName); view.click(); - SystemClock.sleep(100); - view.click(); // double click 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); - return view; } public void saveDocument(String docName) throws Exception { + timer = new Timer(); + timer.start(); clickView(BY_TEXT, "SAVE"); clickView(BY_TEXT, "Device"); + timer.end(); + results.put("save_dialog1", timer); // Allow SD card access if requested 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"); } + + timer = new Timer(); + timer.start(); UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text"); filename.clearTextField(); filename.setText(docName); - clickView(BY_TEXT, "Save"); + clickView(BY_TEXT, "Save", CLASS_BUTTON); + timer.end(); + results.put("save_dialog2", timer); // Overwrite if prompted 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"); } sleep(1); } public void deleteDocument(String docName) throws Exception { + timer = new Timer(); + timer.start(); UiObject doc = getViewByText(docName); doc.longClick(); clickView(BY_TEXT, "Remove"); + timer.end(); + results.put("delete_dialog1", timer); + + timer = new Timer(); + timer.start(); UiObject deleteButton; try { deleteButton = getUiObjectByText("Remove", CLASS_BUTTON); @@ -287,6 +341,8 @@ public class UiAutomation extends UxPerfUiAutomation { deleteButton = getUiObjectByText("Ok", CLASS_BUTTON); } deleteButton.clickAndWaitForNewWindow(); + timer.end(); + results.put("delete_dialog2", timer); sleep(1); } @@ -294,7 +350,7 @@ public class UiAutomation extends UxPerfUiAutomation { if (repeat < 1 || !view.isClickable()) return; while (repeat-- > 0) { view.click(); - SystemClock.sleep(100); // in order to register as separate click + SystemClock.sleep(50); // in order to register as separate click } }