From 8e666161594841dccc1abbc89b2b3e3a12b9174a Mon Sep 17 00:00:00 2001 From: James Hartley <james.hartley@arm.com> Date: Tue, 3 May 2016 18:13:03 +0100 Subject: [PATCH 1/6] Add clickUiObject to BaseUiAutomation Convenience method to click on o UiObject and throw an exception if the view does not change within a specified timeout. --- wlauto/common/android/BaseUiAutomation.class | Bin 6482 -> 6748 bytes .../arm/wlauto/uiauto/BaseUiAutomation.java | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/wlauto/common/android/BaseUiAutomation.class b/wlauto/common/android/BaseUiAutomation.class index 3f507bb68625f4978761febd44e3f753b4bdc569..e7aca274e6ee0c144314a6d14b041cf3826f4f98 100644 GIT binary patch delta 3022 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 XM)p-wzDCL&q}+KJ$_31d3-|m7C$`$Q delta 2801 zcma)82~<^86y5hTy#F5$z98c8S;9h%1jQt@T8bzbCSqn~TA4VIh>|#FS^6!rP#b+= zsimc*<!tCr&AFVj!REAivNAKZvNCO-_XnQ#&0ulvc=q1++;h+4V9x$*@1E1^Hvwp^ z5_EJywF@)xL=-3FCsOC=Nf!z+OBQGA?9FlFDIHH^t_<dBct*psI$}{RX1)^(q<v0@ zf#-EB#3BtZ$j%ovEY^{PY7I-IUFyU#X}!yJG{6ekvQm1hG`!?QjdWMbI+0SaMut8e zFJr9}>!e+;;}vXhVxxvl8aC_Lf~`6-u}wz?UKO<0q_<ti4(ycGT^e>fu}8yRnR;Ev zrGlD-!hKG>A)PnHyd{#~7PDW>I|5`G4h!+FnD@lIFRLGj`B1}08a}QmR!bb}K+VaB zNvdXRlvA}WLN^Tu4Sa%64Sa^r4P1q;272NP17G4R1#MjAs9~k$qcnVN;2V5v;5!^L z&qQaYe2*U#BC|#eFEj8X4jU-KPa2LG=!KsZJZ2+@$7!G+1}dbR@ewKJbS*ogKaQGP zwB!UYj*7!C2Ffthz%d**k7&KJPT*IWE-~;Mj%)bcz)Ad};Hs!B8#G`{YRf?e{={Dz zP8s+cr_GVhyiA-i6qKTya)^l#_179I5{ESvWvFPS8On)n3eC(Cy`g!+S=7s=bORG{ zRG~pZ<=BeS)Zvw5QU{k0FHKErHag8RhKiv?!qUXzkb(O!#lZby9uQL{W*Vj&Do(i# zRY%3wtaBZRG*`rBdkUF_098pa*{jbU15I0Oo{DRd*`0Gb9JEakiDtN(J%g)20(#&Y zwo1-m?JsgCx2fHKG5wlb`;#pHn81D@2G`+wdMJkf2Fr7fyVxt9Nsx!qg0>}DE<r1_ z=5MxzlEc~7MCy$`R05`(pI>@6;wIumAqzL7FZUQo$1R+T;A}sXaHg0Zoj8`0xH2;1 z9esSLw~7M?{F1MbmCNA7<u=W(5Qhu>Esg=)6-m?-3wfX*oAc`Al-H_nM~wEUi(Gin z0cpq!sh1cAH8%<1$(%&PK`##mp_Cdu?B9yP<gv4rVTi@nKE6?2ZItu5x8OXA%ZZ`R z!5C^`RL6I;;+<ecvXJ$q3mP*6vUvA$!>LpOMn9;w75rE-=T~c2HVhTykqCFCpLoV( zCdWq{8ZyO)rb{{W$2gjsz-apknp^uq3^5@Fe|9*y`8MXE#CJl1$Cg(;;bOkk=Aj<I z2r3#*&q|E2JohEcQr*q6x;?zIzb`!tcq1culTMDSLhMx-W!<jKjpivF%%#Z~!(JrZ zxD#V>JEGB)w=)iRKx1B)aJDP)S`c+S?qW{c`R~RA;U`BmcQaefHi@07WPGBhK$K)y zanB9$=kkS127_7SWzWHPco8P?{vyu8y~mGhW+pZ=k0s`m)Mnj8)S+j6`lR6=v||Yf z&vWnp;+bsYnO85z_BN}?GnG8k$TOWh51)s}|5`3|9u_K|TH@4}t(@P;@FAx6TD12e zH<UVF245Cu*sk3O1W!q!J3mN=5J&)HW>^f?$pD6w7~#?=BrmGMa`##_!mnYr&0h;? zV2KUm-!b5CbDta5eX76WlC~XhT<Bvn$lr;7`92hQ?S)F})O=RB1vaGEkPw#nfRLVn zx9AQ=)RXK(=icW+Ekqm^Sy28*?+zuU8xLA#8t}UDkX54;@7t>N)G(TvEn3op_(8!@ z6~P|c{HTil9v`l>@iwL-u$Yf$2@B6smda&JsO3zk#Z3B@mKOgfBR!zSOBOs5_+~t6 zQxF|qL4Y?XBdQ{-f*LAVO$BS@Um+y(f1otfP{F!?DImXH!DAOx(21uO5u(5fM}AlZ z8>nC-60wO2HnRY4p@I!mu<aZLUir@270mc=1%ArF@q=2zD%eg1J6Pg&@)mYc!EP$p VP6d0<QqVB?9jLtplX@I@{2x}js+0f# diff --git a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java index 6a490ef9..c31a835c 100644 --- a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java +++ b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java @@ -142,6 +142,12 @@ public class BaseUiAutomation extends UiAutomatorTestCase { return object; } + public void clickUiObject(UiObject uiobject, long timeout) throws Exception { + if (!uiobject.clickAndWaitForNewWindow(timeout)) { + throw new UiObjectNotFoundException(String.format("Timeout waiting for New Window")); + } + } + public int getDisplayHeight () { return getUiDevice().getInstance().getDisplayHeight(); } From 091e1054abc3fe5bb074ef8245291bb4775ac073 Mon Sep 17 00:00:00 2001 From: James Hartley <james.hartley@arm.com> Date: Tue, 3 May 2016 18:14:59 +0100 Subject: [PATCH 2/6] Fix Gmail workload to run across more devices Changes to deal with subtle differences in layouts between tablets and handsets. Stop pushing files to he Camera directory for test purposes. --- wlauto/workloads/gmail/__init__.py | 12 ++- .../gmail/com.arm.wlauto.uiauto.gmail.jar | Bin 9184 -> 9695 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 94 ++++++++++++------ 3 files changed, 71 insertions(+), 35 deletions(-) diff --git a/wlauto/workloads/gmail/__init__.py b/wlauto/workloads/gmail/__init__.py index 748619b9..78a05abe 100755 --- a/wlauto/workloads/gmail/__init__.py +++ b/wlauto/workloads/gmail/__init__.py @@ -16,7 +16,7 @@ class Gmail(AndroidUiAutoBenchmark): description = """ A workload to perform standard productivity tasks within Gmail. - The workload carries out various tasks, such as creatign new emails and + The workload carries out various tasks, such as creating new emails and sending them, whilst also producing metrics for action completion times. """ @@ -45,13 +45,12 @@ class Gmail(AndroidUiAutoBenchmark): def setup(self, context): super(Gmail, self).setup(context) - self.camera_dir = self.device.path.join(self.device.external_storage_directory, - 'DCIM/Camera/') + self.storage_dir = self.device.path.join(self.device.working_directory) for file in os.listdir(self.dependencies_directory): if file.endswith(".jpg"): self.device.push_file(os.path.join(self.dependencies_directory, file), - os.path.join(self.camera_dir, file), timeout=300) + os.path.join(self.storage_dir, file), timeout=300) # Force a re-index of the mediaserver cache to pick up new files self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') @@ -90,3 +89,8 @@ class Gmail(AndroidUiAutoBenchmark): if file.startswith (self.name) and file.endswith(".log"): self.device.pull_file(os.path.join(self.device.working_directory, file), context.output_directory) self.device.delete_file(os.path.join(self.device.working_directory, file)) + if file.startswith (self.name) and file.endswith(".jpg"): + self.device.delete_file(os.path.join(self.device.working_directory, file)) + + # Force a re-index of the mediaserver cache to pick up new files + self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') diff --git a/wlauto/workloads/gmail/com.arm.wlauto.uiauto.gmail.jar b/wlauto/workloads/gmail/com.arm.wlauto.uiauto.gmail.jar index 783a520536e81baba0c3ee4a12cd986452168590..48aabdb73701ffe66b83220b41de60b08f3524b0 100644 GIT binary patch delta 9436 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 delta 8921 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 diff --git a/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index e3455c33..b2ab4dfe 100644 --- a/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -31,21 +31,15 @@ public class UiAutomation extends UxPerfUiAutomation { public void runUiAutomation() throws Exception { parameters = getParams(); - Timer result = new Timer(); - result.start(); - clearFirstRunDialogues(); clickNewMail(); + attachFiles(); setToField(); setSubjectField(); setComposeField(); - attachFiles(); clickSendButton(); - result.end(); - timingResults.put("Total", result); - writeResultsToFile(timingResults, parameters.getString("output_file")); } @@ -53,9 +47,9 @@ public class UiAutomation extends UxPerfUiAutomation { // Enter search text into the file searchBox. This will automatically filter the list. UiObject gotItBox = getUiObjectByResourceId("com.google.android.gm:id/welcome_tour_got_it", "android.widget.TextView"); - gotItBox.clickAndWaitForNewWindow(); + clickUiObject(gotItBox, timeout); UiObject takeMeToBox = getUiObjectByText("Take me to Gmail", "android.widget.TextView"); - takeMeToBox.clickAndWaitForNewWindow(); + clickUiObject(takeMeToBox, timeout); UiObject converationView = new UiObject(new UiSelector() .resourceId("com.google.android.gm:id/conversation_list_view") .className("android.widget.ListView")); @@ -68,7 +62,7 @@ public class UiAutomation extends UxPerfUiAutomation { Timer result = new Timer(); UiObject newMailButton = getUiObjectByDescription("Compose", "android.widget.ImageButton"); result.start(); - newMailButton.clickAndWaitForNewWindow(timeout); + clickUiObject(newMailButton, timeout); result.end(); timingResults.put("newMail", result); } @@ -108,7 +102,7 @@ public class UiAutomation extends UxPerfUiAutomation { Timer result = new Timer(); UiObject sendButton = getUiObjectByDescription("Send", "android.widget.TextView"); result.start(); - sendButton.clickAndWaitForNewWindow(timeout); + clickUiObject(sendButton, timeout); result.end(); timingResults.put("Send", result); } @@ -120,28 +114,66 @@ public class UiAutomation extends UxPerfUiAutomation { String [] imageFiles = {"1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"}; - result.start(); - for ( int i=0; i < imageFiles.length; i++) { - attachIcon.clickAndWaitForNewWindow(timeout); - UiObject attachFile = getUiObjectByText("Attach file", "android.widget.TextView"); - attachFile.clickAndWaitForNewWindow(timeout); - UiObject imagesEntry = getUiObjectByText("Images", "android.widget.TextView"); - imagesEntry.clickAndWaitForNewWindow(timeout); - UiObject listView = new UiObject(new UiSelector().textContains("List view") - .className("android.webkit.WebView")); - if (listView.exists()) { - listView.clickAndWaitForNewWindow(timeout); - } - UiObject cameraEntry = getUiObjectByText("Camera", "android.widget.TextView"); - cameraEntry.clickAndWaitForNewWindow(timeout); - UiObject oneJpg = getUiObjectByText(imageFiles[i], "android.widget.TextView"); - oneJpg.clickAndWaitForNewWindow(timeout); - } - result.end(); - timingResults.put("AttachFiles", result); - } + result.start(); + clickUiObject(attachIcon, timeout); + UiObject attachFile = getUiObjectByText("Attach file", "android.widget.TextView"); + clickUiObject(attachFile, timeout); + + UiObject titleIsWaWorking = new UiObject(new UiSelector() + .className("android.widget.TextView") + .textContains("wa-working")); + UiObject titleIsImages = new UiObject(new UiSelector() + .className("android.widget.TextView") + .textContains("Images")); + UiObject frameLayout = new UiObject(new UiSelector() + .className("android.widget.FrameLayout") + .resourceId("android:id/action_bar_container")); + UiObject rootMenu = new UiObject(new UiSelector() + .className("android.widget.ImageButton") + .descriptionContains("Show roots")); + UiObject imagesEntry = new UiObject(new UiSelector() + .className("android.widget.TextView") + .textContains("Images")); + UiObject waFolder = new UiObject(new UiSelector() + .className("android.widget.TextView") + .textContains("wa-working")); + + // Some devices use a FrameLayout as oppoised to a view Group so treat them differently + if (frameLayout.exists()) { + imagesEntry.click(); + waitObject(titleIsImages, 4); + waFolder.click(); + waitObject(titleIsWaWorking, 4); + } else { + // Portrait devices will roll the menu up so click the root menu icon + if (!titleIsWaWorking.exists()) { + if (rootMenu.exists()) { + rootMenu.click(); + } + imagesEntry.click(); + waitObject(titleIsImages, 4); + waFolder.click(); + waitObject(titleIsWaWorking, 4); + } + } + + UiObject imageFileButton = new UiObject(new UiSelector() + .resourceId("com.android.documentsui:id/grid") + .className("android.widget.GridView") + .childSelector(new UiSelector() + .index(i).className("android.widget.FrameLayout"))); + + clickUiObject(imageFileButton, timeout); + + result.end(); + + // Replace whitespace and full stops within the filename + String file = imageFiles[i].replaceAll("\\.", "_").replaceAll("\\s+", "_"); + timingResults.put(String.format("AttachFiles" + "_" + file), result); + } + } private void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { // Write out the key/value pairs to the instrumentation log file From e1827ffde2ad51adf7c496698856b45e90c519ca Mon Sep 17 00:00:00 2001 From: James Hartley <james.hartley@arm.com> Date: Tue, 3 May 2016 18:16:17 +0100 Subject: [PATCH 3/6] Tidy up Reader timing instrumentation and fix build error --- .../reader/com.arm.wlauto.uiauto.reader.jar | Bin 11683 -> 11674 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 15 +++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/wlauto/workloads/reader/com.arm.wlauto.uiauto.reader.jar b/wlauto/workloads/reader/com.arm.wlauto.uiauto.reader.jar index 5be714c62c575d14bc71c50dc9969f60c1694692..aae224998bcb2b6c6b6ed4c10c9a604c8a0542e9 100644 GIT binary patch delta 11457 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 bmVTp1sHMgD?kfNQq?2teFb2*n00000MmMQx delta 11457 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 bQE8k=Pou|`_bUJZP?KaWFb3Bw00000a6F9| diff --git a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index c51f38da..41a3ceac 100755 --- a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -18,8 +18,8 @@ import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.util.concurrent.TimeUnit; -import java.util.LinkedHashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; @@ -72,7 +72,7 @@ public class UiAutomation extends UxPerfUiAutomation { int i = 0; do { i += 10; - tapDisplay(webViewCoords.centerX(), webViewCoords.bottom - i); + tapDisplay(webViewCoords.centerX(), webViewCoords.centerY() + i); } while ( welcomeView.exists() || i < webViewCoords.top ); } @@ -143,13 +143,16 @@ public class UiAutomation extends UxPerfUiAutomation { } private void openFile(String filename) throws Exception { + + String TestTag = "openfile"; + // Replace whitespace and full stops within the filename String file = filename.replaceAll("\\.", "_").replaceAll("\\s+", "_"); - timingResults.put(String.format("selectLocalFilesList" + "_" + file), selectLocalFilesList()); - timingResults.put(String.format("selectSearchDuration" + "_" + file), selectSearchFileButton()); - timingResults.put(String.format("searchFileList" + "_" + file), searchFileList(filename)); - timingResults.put(String.format("openFileFromList" + "_" + file), openFileFromList(filename)); + timingResults.put(String.format(TestTag + "_" + "selectLocalFilesList" + "_" + file), selectLocalFilesList()); + timingResults.put(String.format(TestTag + "_" + "selectSearchDuration" + "_" + file), selectSearchFileButton()); + timingResults.put(String.format(TestTag + "_" + "searchFileList" + "_" + file), searchFileList(filename)); + timingResults.put(String.format(TestTag + "_" + "openFileFromList" + "_" + file), openFileFromList(filename)); // Cludge to get rid of the first time run help dialogue boxes tapDisplayCentre(); From c2a68074be6d953339d6567e14c93becce0853ff Mon Sep 17 00:00:00 2001 From: John Richardson <john.richardson@arm.com> Date: Tue, 3 May 2016 11:49:05 +0100 Subject: [PATCH 4/6] Googlephotos productivity workload A new workload to perform standard productivity tasks within Googlephotos. Each user event/step is timed and reported back as a metric. Dumpsys also captures SurfaceFlinger logs for each event for post analysis. --- wlauto/workloads/googlephotos/__init__.py | 99 ++++++ .../com.arm.wlauto.uiauto.googlephotos.jar | Bin 0 -> 11019 bytes wlauto/workloads/googlephotos/uiauto/build.sh | 12 + .../workloads/googlephotos/uiauto/build.xml | 92 ++++++ .../googlephotos/uiauto/project.properties | 14 + .../com/arm/wlauto/uiauto/UiAutomation.java | 291 ++++++++++++++++++ 6 files changed, 508 insertions(+) create mode 100644 wlauto/workloads/googlephotos/__init__.py create mode 100644 wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar create mode 100755 wlauto/workloads/googlephotos/uiauto/build.sh create mode 100644 wlauto/workloads/googlephotos/uiauto/build.xml create mode 100644 wlauto/workloads/googlephotos/uiauto/project.properties create mode 100644 wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java diff --git a/wlauto/workloads/googlephotos/__init__.py b/wlauto/workloads/googlephotos/__init__.py new file mode 100644 index 00000000..db0107b3 --- /dev/null +++ b/wlauto/workloads/googlephotos/__init__.py @@ -0,0 +1,99 @@ +import os +import re + +from wlauto import AndroidUiAutoBenchmark, Parameter + + +class Googlephotos(AndroidUiAutoBenchmark): + + name = 'googlephotos' + package = 'com.google.android.apps.photos' + activity = 'com.google.android.apps.photos.home.HomeActivity' + + description = """ + A workload to perform standard productivity tasks with googlephotos. + + The workload carries out various tasks, such as browsing images, performing zooms, + postprocessing and saving a selected image to file. + + NOTE: This workload requires four jpeg files to be placed in the + dependencies directory to run. + + Although this workload attempts to be network independent it requires a + network connection (ideally, wifi) to run. This is because the welcome + screen UI is dependent on an existing connection. + """ + + parameters = [ + Parameter('dumpsys_enabled', kind=bool, default=True, + description=""" + If ``True``, dumpsys captures will be carried out during the + test run. The output is piped to log files which are then + pulled from the phone. + """), + ] + + instrumentation_log = ''.join([name, '_instrumentation.log']) + file_prefix = 'wa_test_' + + def __init__(self, device, **kwargs): + super(Googlephotos, self).__init__(device, **kwargs) + self.output_file = os.path.join(self.device.working_directory, self.instrumentation_log) + self.camera_dir = self.device.path.join(self.device.external_storage_directory, + 'DCIM/Camera/') + + def validate(self): + super(Googlephotos, self).validate() + self.uiauto_params['package'] = self.package + self.uiauto_params['output_dir'] = self.device.working_directory + self.uiauto_params['output_file'] = self.output_file + self.uiauto_params['dumpsys_enabled'] = self.dumpsys_enabled + + def setup(self, context): + super(Googlephotos, self).setup(context) + + for entry in os.listdir(self.dependencies_directory): + wa_file = ''.join([self.file_prefix, entry]) + if entry.endswith(".jpg"): + self.device.push_file(os.path.join(self.dependencies_directory, entry), + os.path.join(self.camera_dir, wa_file), + timeout=300) + + # Force a re-index of the mediaserver cache to pick up new files + self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') + + def update_result(self, context): + super(Googlephotos, self).update_result(context) + + if self.dumpsys_enabled: + self.device.pull_file(self.output_file, context.output_directory) + result_file = os.path.join(context.output_directory, self.instrumentation_log) + + with open(result_file, 'r') as wfh: + pattern = r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)' + regex = re.compile(pattern) + for line in wfh: + match = regex.search(line) + if match: + context.result.add_metric((match.group('key') + "_start"), + match.group('value1')) + context.result.add_metric((match.group('key') + "_finish"), + match.group('value2')) + context.result.add_metric((match.group('key') + "_duration"), + match.group('value3')) + + def teardown(self, context): + super(Googlephotos, self).teardown(context) + + for entry in self.device.listdir(self.device.working_directory): + if entry.startswith(self.name) and entry.endswith(".log"): + self.device.pull_file(os.path.join(self.device.working_directory, entry), + context.output_directory) + self.device.delete_file(os.path.join(self.device.working_directory, entry)) + + for entry in self.device.listdir(self.camera_dir): + if entry.startswith(self.file_prefix) and entry.endswith(".jpg"): + self.device.delete_file(os.path.join(self.camera_dir, entry)) + + # Force a re-index of the mediaserver cache to removed cached files + self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') diff --git a/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar b/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar new file mode 100644 index 0000000000000000000000000000000000000000..2a4fdd3dfe20bdec746f079613637275d236be80 GIT binary patch literal 11019 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 F{udO>SMmS= literal 0 HcmV?d00001 diff --git a/wlauto/workloads/googlephotos/uiauto/build.sh b/wlauto/workloads/googlephotos/uiauto/build.sh new file mode 100755 index 00000000..f60c0b43 --- /dev/null +++ b/wlauto/workloads/googlephotos/uiauto/build.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +class_dir=bin/classes/com/arm/wlauto/uiauto +base_class=`python -c "import os, wlauto; print os.path.join(os.path.dirname(wlauto.__file__), 'common', 'android', '*.class')"` +mkdir -p $class_dir +cp $base_class $class_dir + +ant build + +if [[ -f bin/com.arm.wlauto.uiauto.googlephotos.jar ]]; then + cp bin/com.arm.wlauto.uiauto.googlephotos.jar .. +fi diff --git a/wlauto/workloads/googlephotos/uiauto/build.xml b/wlauto/workloads/googlephotos/uiauto/build.xml new file mode 100644 index 00000000..648161d0 --- /dev/null +++ b/wlauto/workloads/googlephotos/uiauto/build.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="com.arm.wlauto.uiauto.googlephotos" default="help"> + + <!-- The local.properties file is created and updated by the 'android' tool. + It contains the path to the SDK. It should *NOT* be checked into + Version Control Systems. --> + <property file="local.properties" /> + + <!-- The ant.properties file can be created by you. It is only edited by the + 'android' tool to add properties to it. + This is the place to change some Ant specific build properties. + Here are some properties you may want to change/update: + + source.dir + The name of the source directory. Default is 'src'. + out.dir + The name of the output directory. Default is 'bin'. + + For other overridable properties, look at the beginning of the rules + files in the SDK, at tools/ant/build.xml + + Properties related to the SDK location or the project target should + be updated using the 'android' tool with the 'update' action. + + This file is an integral part of the build system for your + application and should be checked into Version Control Systems. + + --> + <property file="ant.properties" /> + + <!-- if sdk.dir was not set from one of the property file, then + get it from the ANDROID_HOME env var. + This must be done before we load project.properties since + the proguard config can use sdk.dir --> + <property environment="env" /> + <condition property="sdk.dir" value="${env.ANDROID_HOME}"> + <isset property="env.ANDROID_HOME" /> + </condition> + + <!-- The project.properties file is created and updated by the 'android' + tool, as well as ADT. + + This contains project specific properties such as project target, and library + dependencies. Lower level build properties are stored in ant.properties + (or in .classpath for Eclipse projects). + + This file is an integral part of the build system for your + application and should be checked into Version Control Systems. --> + <loadproperties srcFile="project.properties" /> + + <!-- quick check on sdk.dir --> + <fail + message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." + unless="sdk.dir" + /> + + <!-- + Import per project custom build rules if present at the root of the project. + This is the place to put custom intermediary targets such as: + -pre-build + -pre-compile + -post-compile (This is typically used for code obfuscation. + Compiled code location: ${out.classes.absolute.dir} + If this is not done in place, override ${out.dex.input.absolute.dir}) + -post-package + -post-build + -pre-clean + --> + <import file="custom_rules.xml" optional="true" /> + + <!-- Import the actual build file. + + To customize existing targets, there are two options: + - Customize only one target: + - copy/paste the target into this file, *before* the + <import> task. + - customize it to your needs. + - Customize the whole content of build.xml + - copy/paste the content of the rules files (minus the top node) + into this file, replacing the <import> task. + - customize to your needs. + + *********************** + ****** IMPORTANT ****** + *********************** + In all cases you must update the value of version-tag below to read 'custom' instead of an integer, + in order to avoid having your file be overridden by tools such as "android update project" + --> + <!-- version-tag: VERSION_TAG --> + <import file="${sdk.dir}/tools/ant/uibuild.xml" /> + +</project> diff --git a/wlauto/workloads/googlephotos/uiauto/project.properties b/wlauto/workloads/googlephotos/uiauto/project.properties new file mode 100644 index 00000000..916037e3 --- /dev/null +++ b/wlauto/workloads/googlephotos/uiauto/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-23 diff --git a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java new file mode 100644 index 00000000..1c7a8c22 --- /dev/null +++ b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -0,0 +1,291 @@ +package com.arm.wlauto.uiauto.googlephotos; + +import android.os.Bundle; +import android.graphics.Point; +import android.graphics.Rect; + +// Import the uiautomator libraries +import com.android.uiautomator.core.UiObject; +import com.android.uiautomator.core.UiObjectNotFoundException; +import com.android.uiautomator.core.UiSelector; + +import com.arm.wlauto.uiauto.UxPerfUiAutomation; + +import java.io.File; +import java.io.FileWriter; +import java.io.BufferedWriter; +import java.util.concurrent.TimeUnit; +import java.util.LinkedHashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class UiAutomation extends UxPerfUiAutomation { + + public static String TAG = "uxperf_googlephotos"; + + public Bundle parameters; + private long viewTimeout = TimeUnit.SECONDS.toMillis(20); + private LinkedHashMap<String, Timer> timingResults = new LinkedHashMap<String, Timer>(); + + public void runUiAutomation() throws Exception { + Timer result = new Timer(); + result.start(); + parameters = getParams(); + + dismissWelcomeView(); + gesturesTest(); + editPhotoTest(); + + result.end(); + timingResults.put("total", result); + + writeResultsToFile(timingResults, parameters.getString("output_file")); + } + + private void dismissWelcomeView() throws Exception { + // Click through the first two pages and make sure that we don't sign + // in to our google account. This ensures the same set of photographs + // are placed in the camera directory for each run. + + sleep(3); // Pause while splash screen loads + + UiObject getStarteddButton = + getUiObjectByResourceId("com.google.android.apps.photos:id/get_started", + "android.widget.Button"); + getStarteddButton.clickAndWaitForNewWindow(); + + UiObject welcomeButton = + getUiObjectByResourceId("com.google.android.apps.photos:id/name", + "android.widget.TextView"); + welcomeButton.clickAndWaitForNewWindow(); + + UiObject useWithoutAccount = + getUiObjectByText("Use without an account", "android.widget.TextView"); + useWithoutAccount.clickAndWaitForNewWindow(); + + // Dismiss welcome views promoting app features + sleep(1); + uiDeviceSwipeLeft(10); + sleep(1); + uiDeviceSwipeLeft(10); + sleep(1); + uiDeviceSwipeLeft(10); + sleep(1); + + UiObject nextButton = + getUiObjectByResourceId("com.google.android.apps.photos:id/next_button", + "android.widget.ImageView"); + nextButton.clickAndWaitForNewWindow(); + } + + private void gesturesTest () throws Exception { + String testTag = "gestures"; + + // Perform a range of swipe tests while browsing photo gallery + LinkedHashMap<String, GestureTestParams> testParams = new LinkedHashMap<String, GestureTestParams>(); + testParams.put("swipe_left", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.LEFT, 10)); + testParams.put("pinch_out", new GestureTestParams(GestureType.PINCH, PinchType.OUT, 100, 50)); + testParams.put("pinch_in", new GestureTestParams(GestureType.PINCH, PinchType.IN, 100, 50)); + testParams.put("swipe_right", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.RIGHT, 10)); + testParams.put("swipe_up", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.UP, 10)); + + Iterator<Entry<String, GestureTestParams>> it = testParams.entrySet().iterator(); + + // Select third photograph + selectPhoto(2); + + while (it.hasNext()) { + Map.Entry<String, GestureTestParams> pair = it.next(); + GestureType type = pair.getValue().gestureType; + Direction dir = pair.getValue().gestureDirection; + PinchType pinch = pair.getValue().pinchType; + int steps = pair.getValue().steps; + int percent = pair.getValue().percent; + + String runName = String.format(testTag + "_" + pair.getKey()); + String gfxInfologName = String.format(TAG + "_" + runName + "_gfxInfo.log"); + String surfFlingerlogName = String.format(runName + "_surfFlinger.log"); + String viewName = new String("com.google.android.apps.photos.home.HomeActivity"); + + UiObject view = new UiObject(new UiSelector().enabled(true)); + + if (!view.waitForExists(viewTimeout)) { + throw new UiObjectNotFoundException("Could not find \"photo view\"."); + }; + + startDumpsysGfxInfo(); + startDumpsysSurfaceFlinger(viewName); + + Timer results = new Timer(); + + switch (type) { + case UIDEVICE_SWIPE: + results = uiDeviceSwipeTest(dir, steps); + break; + case UIOBJECT_SWIPE: + results = uiObjectSwipeTest(view, dir, steps); + break; + case PINCH: + results = uiObjectVertPinchTest(view, pinch, steps, percent); + break; + default: + break; + } + + stopDumpsysSurfaceFlinger(viewName, surfFlingerlogName); + stopDumpsysGfxInfo(gfxInfologName); + + timingResults.put(runName, results); + } + } + + private void editPhotoTest() throws Exception { + String testTag = "edit_photo"; + + Timer result = new Timer(); + result.start(); + + // Select first photograph + selectPhoto(0); + UiObject editView = getUiObjectByResourceId("com.google.android.apps.photos:id/edit", + "android.widget.ImageView"); + editView.click(); + + UiObject editColor = getUiObjectByText("Colour", "android.widget.RadioButton"); + editColor.click(); + + UiObject seekBar = getUiObjectByResourceId("com.google.android.apps.photos:id/cpe_strength_seek_bar", + "android.widget.SeekBar"); + seekBar.swipeLeft(10); + + UiObject accept = getUiObjectByDescription("Accept", "android.widget.ImageView"); + accept.click(); + + UiObject save = getUiObjectByText("SAVE", "android.widget.TextView"); + save.click(); + + // Return to application home screen + getUiDevice().pressBack(); + + result.end(); + timingResults.put(testTag, result); + } + + // Helper to click on an individual photographs based on index in Camera gallery. + private void selectPhoto(int index) throws Exception { + UiObject cameraHeading = new UiObject(new UiSelector().text("Camera")); + cameraHeading.clickAndWaitForNewWindow(); + + UiObject photo = + new UiObject(new UiSelector().resourceId("com.google.android.apps.photos:id/recycler_view") + .childSelector(new UiSelector() + .index(index))); + photo.click(); + } + + // Helper for testing zoom facility. NOTE: the built in UiObject methods + // pinchIn() and pinchOut() do not zoom appropriately for this application. + private Timer uiObjectVertPinchTest( + UiObject view, PinchType direction, + int steps, int percent) throws Exception { + + Timer results = new Timer(); + results.start(); + + final int FINGER_TOUCH_HALF_WIDTH = 20; + + // make value between 1 and 100 + percent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; + float percentage = percent / 100f; + + Rect rect = view.getVisibleBounds(); + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) + throw new IllegalStateException("Object width is too small for operation"); + + // start from the same point at the center of the control + Point startPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); + Point startPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); + + // End at the top-center and bottom-center of the control + Point endPoint1 = new Point(rect.centerX(), rect.centerY() + (int) ((rect.height() / 2) * percentage)); + Point endPoint2 = new Point(rect.centerX(), rect.centerY() - (int) ((rect.height() / 2) * percentage)); + + if (direction.equals(PinchType.IN)) { + view.performTwoPointerGesture(endPoint1, endPoint2, startPoint1, startPoint2, steps); + } else if (direction.equals(PinchType.OUT)) { + view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + results.end(); + + return results; + } + + private class GestureTestParams { + GestureType gestureType; + Direction gestureDirection; + PinchType pinchType; + private int percent; + private int steps; + + GestureTestParams(GestureType gesture, Direction direction, int steps) { + this.gestureType = gesture; + this.gestureDirection = direction; + this.pinchType = PinchType.NULL; + this.steps = steps; + this.percent = 0; + } + + GestureTestParams(GestureType gesture, PinchType pinchType, int steps, int percent) { + this.gestureType = gesture; + this.gestureDirection = Direction.NULL; + this.pinchType = pinchType; + this.steps = steps; + this.percent = percent; + } + } + + private void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { + // Write out the key/value pairs to the instrumentation log file + FileWriter fstream = new FileWriter(file); + BufferedWriter out = new BufferedWriter(fstream); + Iterator<Entry<String, Timer>> it = timingResults.entrySet().iterator(); + + while (it.hasNext()) { + Map.Entry<String, Timer> pairs = it.next(); + Timer results = pairs.getValue(); + long start = results.getStart(); + long finish = results.getFinish(); + long duration = results.getDuration(); + out.write(String.format(pairs .getKey() + " " + start + " " + finish + " " + duration + "\n")); + } + out.close(); + } + + private void startDumpsysSurfaceFlinger(String view) { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + initDumpsysSurfaceFlinger(parameters.getString("package"), view); + } + } + + private void stopDumpsysSurfaceFlinger(String view, String filename) throws Exception { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + File out_file = new File(parameters.getString("output_dir"), filename); + exitDumpsysSurfaceFlinger(parameters.getString("package"), view, out_file); + } + } + + private void startDumpsysGfxInfo() { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + initDumpsysGfxInfo(parameters.getString("package")); + } + } + + private void stopDumpsysGfxInfo(String filename) throws Exception { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + File out_file = new File(parameters.getString("output_dir"), filename); + exitDumpsysGfxInfo(parameters.getString("package"), out_file); + } + } +} From 31cf06b62abb05e45d1083f26bfbd473022c232f Mon Sep 17 00:00:00 2001 From: John Richardson <john.richardson@arm.com> Date: Wed, 4 May 2016 11:10:07 +0100 Subject: [PATCH 5/6] Extended BaseUiAutomation and UxPerfUiAutomation Moved common functionality to base classes for code reuse. Refactored googlephotos, reader and gmail workloads to take advantage of the new base class methods and removed total test time metric. New methods for BaseUiAutomation: uiDeviceVertPinchIn, uiDeviceVertPinchOut New methods for UxPerfUiAutomation: uiObjectVertPinchTest, writeResultsToFile, startDumpsysSurfaceFlinger, startDumpsysSurfaceFlinger, startDumpsysGfxInfo, stopDumpsysGfxInfo New class for UxPerfUiAutomation: GestureTestParams --- .../arm/wlauto/uiauto/BaseUiAutomation.java | 48 +++++- .../arm/wlauto/uiauto/UxPerfUiAutomation.java | 87 +++++++++++ .../com/arm/wlauto/uiauto/UiAutomation.java | 31 +--- wlauto/workloads/googlephotos/__init__.py | 7 +- .../com.arm.wlauto.uiauto.googlephotos.jar | Bin 11019 -> 11215 bytes wlauto/workloads/googlephotos/uiauto/build.sh | 4 +- .../googlephotos/uiauto/project.properties | 2 +- .../com/arm/wlauto/uiauto/UiAutomation.java | 139 ++---------------- .../com/arm/wlauto/uiauto/UiAutomation.java | 106 ++----------- 9 files changed, 167 insertions(+), 257 deletions(-) diff --git a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java index c31a835c..22266ca6 100644 --- a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java +++ b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java @@ -22,13 +22,13 @@ import java.io.InputStreamReader; import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeUnit; -import android.app.Activity; import android.os.Bundle; +import android.graphics.Point; +import android.graphics.Rect; // Import the uiautomator libraries import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; -import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; @@ -207,4 +207,48 @@ public class BaseUiAutomation extends UiAutomatorTestCase { getDisplayCentreHeight(), steps); } + + public void uiDeviceVertPinchIn(UiObject view, int steps, int percent) throws Exception { + final int FINGER_TOUCH_HALF_WIDTH = 20; + + // Make value between 1 and 100 + percent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; + float percentage = percent / 100f; + + Rect rect = view.getVisibleBounds(); + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) + throw new IllegalStateException("Object width is too small for operation"); + + // Start at the top-center and bottom-center of the control + Point startPoint1 = new Point(rect.centerX(), rect.centerY() + (int) ((rect.height() / 2) * percentage)); + Point startPoint2 = new Point(rect.centerX(), rect.centerY() - (int) ((rect.height() / 2) * percentage)); + + // End at the same point at the center of the control + Point endPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); + Point endPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); + + view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + public void uiDeviceVertPinchOut(UiObject view, int steps, int percent) throws Exception { + final int FINGER_TOUCH_HALF_WIDTH = 20; + + // Make value between 1 and 100 + percent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; + float percentage = percent / 100f; + + Rect rect = view.getVisibleBounds(); + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) + throw new IllegalStateException("Object width is too small for operation"); + + // Start from the same point at the center of the control + Point startPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); + Point startPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); + + // End at the top-center and bottom-center of the control + Point endPoint1 = new Point(rect.centerX(), rect.centerY() + (int) ((rect.height() / 2) * percentage)); + Point endPoint2 = new Point(rect.centerX(), rect.centerY() - (int) ((rect.height() / 2) * percentage)); + + view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } } diff --git a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java index 756d0ea0..379908c3 100644 --- a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java +++ b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java @@ -17,6 +17,7 @@ package com.arm.wlauto.uiauto; import android.os.Build; import android.os.SystemClock; +import android.os.Bundle; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; @@ -26,6 +27,7 @@ import com.android.uiautomator.core.UiSelector; import com.arm.wlauto.uiauto.BaseUiAutomation; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; @@ -34,6 +36,10 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.Arrays; import java.util.List; +import java.util.LinkedHashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; public class UxPerfUiAutomation extends BaseUiAutomation { @@ -209,4 +215,85 @@ public class UxPerfUiAutomation extends BaseUiAutomation { results.end(); return results; } + + public Timer uiObjectVertPinchTest(UiObject view, PinchType direction, + int steps, int percent) throws Exception { + Timer results = new Timer(); + results.start(); + if (direction.equals(PinchType.IN)) { + uiDeviceVertPinchIn(view, steps, percent); + } else if (direction.equals(PinchType.OUT)) { + uiDeviceVertPinchOut(view, steps, percent); + } + results.end(); + return results; + } + + public class GestureTestParams { + public GestureType gestureType; + public Direction gestureDirection; + public PinchType pinchType; + public int percent; + public int steps; + + public GestureTestParams(GestureType gesture, Direction direction, int steps) { + this.gestureType = gesture; + this.gestureDirection = direction; + this.pinchType = PinchType.NULL; + this.steps = steps; + this.percent = 0; + } + + public GestureTestParams(GestureType gesture, PinchType pinchType, int steps, int percent) { + this.gestureType = gesture; + this.gestureDirection = Direction.NULL; + this.pinchType = pinchType; + this.steps = steps; + this.percent = percent; + } + } + + public void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { + // Write out the key/value pairs to the instrumentation log file + FileWriter fstream = new FileWriter(file); + BufferedWriter out = new BufferedWriter(fstream); + Iterator<Entry<String, Timer>> it = timingResults.entrySet().iterator(); + + while (it.hasNext()) { + Map.Entry<String, Timer> pairs = it.next(); + Timer results = pairs.getValue(); + long start = results.getStart(); + long finish = results.getFinish(); + long duration = results.getDuration(); + out.write(String.format(pairs .getKey() + " " + start + " " + finish + " " + duration + "\n")); + } + out.close(); + } + + public void startDumpsysSurfaceFlinger(Bundle parameters, String view) { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + initDumpsysSurfaceFlinger(parameters.getString("package"), view); + } + } + + public void stopDumpsysSurfaceFlinger(Bundle parameters, String view, + String filename) throws Exception { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + File out_file = new File(parameters.getString("output_dir"), filename); + exitDumpsysSurfaceFlinger(parameters.getString("package"), view, out_file); + } + } + + public void startDumpsysGfxInfo(Bundle parameters) { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + initDumpsysGfxInfo(parameters.getString("package")); + } + } + + public void stopDumpsysGfxInfo(Bundle parameters, String filename) throws Exception { + if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { + File out_file = new File(parameters.getString("output_dir"), filename); + exitDumpsysGfxInfo(parameters.getString("package"), out_file); + } + } } diff --git a/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index b2ab4dfe..58a0b516 100644 --- a/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/gmail/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -1,24 +1,16 @@ package com.arm.wlauto.uiauto.gmail; import android.os.Bundle; -import android.os.SystemClock; // Import the uiautomator libraries import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; -import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; -import com.android.uiautomator.testrunner.UiAutomatorTestCase; import com.arm.wlauto.uiauto.UxPerfUiAutomation; -import java.io.BufferedWriter; -import java.io.FileWriter; import java.util.concurrent.TimeUnit; -import java.util.Iterator; import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Map.Entry; public class UiAutomation extends UxPerfUiAutomation { @@ -55,7 +47,7 @@ public class UiAutomation extends UxPerfUiAutomation { .className("android.widget.ListView")); if (!converationView.waitForExists(networkTimeout)) { throw new UiObjectNotFoundException("Could not find \"converationView\"."); - }; + } } public void clickNewMail() throws Exception { @@ -112,9 +104,9 @@ public class UiAutomation extends UxPerfUiAutomation { UiObject attachIcon = getUiObjectByResourceId("com.google.android.gm:id/add_attachment", "android.widget.TextView"); - String [] imageFiles = {"1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"}; + String[] imageFiles = {"1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"}; - for ( int i=0; i < imageFiles.length; i++) { + for ( int i = 0; i < imageFiles.length; i++) { result.start(); clickUiObject(attachIcon, timeout); @@ -174,21 +166,4 @@ public class UiAutomation extends UxPerfUiAutomation { timingResults.put(String.format("AttachFiles" + "_" + file), result); } } - - private void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { - // Write out the key/value pairs to the instrumentation log file - FileWriter fstream = new FileWriter(file); - BufferedWriter out = new BufferedWriter(fstream); - Iterator<Entry<String, Timer>> it = timingResults.entrySet().iterator(); - - while (it.hasNext()) { - Map.Entry<String, Timer> pairs = it.next(); - Timer results = pairs.getValue(); - long start = results.getStart(); - long finish = results.getFinish(); - long duration = results.getDuration(); - out.write(String.format(pairs.getKey() + " " + start + " " + finish + " " + duration + "\n")); - } - out.close(); - } } diff --git a/wlauto/workloads/googlephotos/__init__.py b/wlauto/workloads/googlephotos/__init__.py index db0107b3..f041defe 100644 --- a/wlauto/workloads/googlephotos/__init__.py +++ b/wlauto/workloads/googlephotos/__init__.py @@ -39,8 +39,6 @@ class Googlephotos(AndroidUiAutoBenchmark): def __init__(self, device, **kwargs): super(Googlephotos, self).__init__(device, **kwargs) self.output_file = os.path.join(self.device.working_directory, self.instrumentation_log) - self.camera_dir = self.device.path.join(self.device.external_storage_directory, - 'DCIM/Camera/') def validate(self): super(Googlephotos, self).validate() @@ -56,7 +54,7 @@ class Googlephotos(AndroidUiAutoBenchmark): wa_file = ''.join([self.file_prefix, entry]) if entry.endswith(".jpg"): self.device.push_file(os.path.join(self.dependencies_directory, entry), - os.path.join(self.camera_dir, wa_file), + os.path.join(self.device.working_directory, wa_file), timeout=300) # Force a re-index of the mediaserver cache to pick up new files @@ -91,9 +89,8 @@ class Googlephotos(AndroidUiAutoBenchmark): context.output_directory) self.device.delete_file(os.path.join(self.device.working_directory, entry)) - for entry in self.device.listdir(self.camera_dir): if entry.startswith(self.file_prefix) and entry.endswith(".jpg"): - self.device.delete_file(os.path.join(self.camera_dir, entry)) + self.device.delete_file(os.path.join(self.device.working_directory, entry)) # Force a re-index of the mediaserver cache to removed cached files self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') diff --git a/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar b/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar index 2a4fdd3dfe20bdec746f079613637275d236be80..cf790ce49740a4abeb93a8a4001c0b1ac8abf7c2 100644 GIT binary patch delta 10968 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 G00014kDNyU delta 10770 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 Qd{~p3D=!8=DgXcg0394Nf&c&j diff --git a/wlauto/workloads/googlephotos/uiauto/build.sh b/wlauto/workloads/googlephotos/uiauto/build.sh index f60c0b43..dc6235ec 100755 --- a/wlauto/workloads/googlephotos/uiauto/build.sh +++ b/wlauto/workloads/googlephotos/uiauto/build.sh @@ -1,9 +1,9 @@ #!/bin/bash class_dir=bin/classes/com/arm/wlauto/uiauto -base_class=`python -c "import os, wlauto; print os.path.join(os.path.dirname(wlauto.__file__), 'common', 'android', '*.class')"` +base_classes=`python -c "import os, wlauto; print os.path.join(os.path.dirname(wlauto.__file__), 'common', 'android', '*.class')"` mkdir -p $class_dir -cp $base_class $class_dir +cp $base_classes $class_dir ant build diff --git a/wlauto/workloads/googlephotos/uiauto/project.properties b/wlauto/workloads/googlephotos/uiauto/project.properties index 916037e3..ce39f2d0 100644 --- a/wlauto/workloads/googlephotos/uiauto/project.properties +++ b/wlauto/workloads/googlephotos/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-23 +target=android-18 diff --git a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 1c7a8c22..b9d9b81e 100644 --- a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -1,8 +1,6 @@ package com.arm.wlauto.uiauto.googlephotos; import android.os.Bundle; -import android.graphics.Point; -import android.graphics.Rect; // Import the uiautomator libraries import com.android.uiautomator.core.UiObject; @@ -11,9 +9,6 @@ import com.android.uiautomator.core.UiSelector; import com.arm.wlauto.uiauto.UxPerfUiAutomation; -import java.io.File; -import java.io.FileWriter; -import java.io.BufferedWriter; import java.util.concurrent.TimeUnit; import java.util.LinkedHashMap; import java.util.Iterator; @@ -25,21 +20,16 @@ public class UiAutomation extends UxPerfUiAutomation { public static String TAG = "uxperf_googlephotos"; public Bundle parameters; - private long viewTimeout = TimeUnit.SECONDS.toMillis(20); + private long viewTimeout = TimeUnit.SECONDS.toMillis(10); private LinkedHashMap<String, Timer> timingResults = new LinkedHashMap<String, Timer>(); public void runUiAutomation() throws Exception { - Timer result = new Timer(); - result.start(); parameters = getParams(); dismissWelcomeView(); gesturesTest(); editPhotoTest(); - result.end(); - timingResults.put("total", result); - writeResultsToFile(timingResults, parameters.getString("output_file")); } @@ -50,10 +40,10 @@ public class UiAutomation extends UxPerfUiAutomation { sleep(3); // Pause while splash screen loads - UiObject getStarteddButton = + UiObject getStartedButton = getUiObjectByResourceId("com.google.android.apps.photos:id/get_started", "android.widget.Button"); - getStarteddButton.clickAndWaitForNewWindow(); + getStartedButton.clickAndWaitForNewWindow(); UiObject welcomeButton = getUiObjectByResourceId("com.google.android.apps.photos:id/name", @@ -79,7 +69,7 @@ public class UiAutomation extends UxPerfUiAutomation { nextButton.clickAndWaitForNewWindow(); } - private void gesturesTest () throws Exception { + private void gesturesTest() throws Exception { String testTag = "gestures"; // Perform a range of swipe tests while browsing photo gallery @@ -112,10 +102,10 @@ public class UiAutomation extends UxPerfUiAutomation { if (!view.waitForExists(viewTimeout)) { throw new UiObjectNotFoundException("Could not find \"photo view\"."); - }; + } - startDumpsysGfxInfo(); - startDumpsysSurfaceFlinger(viewName); + startDumpsysGfxInfo(parameters); + startDumpsysSurfaceFlinger(parameters, viewName); Timer results = new Timer(); @@ -133,8 +123,8 @@ public class UiAutomation extends UxPerfUiAutomation { break; } - stopDumpsysSurfaceFlinger(viewName, surfFlingerlogName); - stopDumpsysGfxInfo(gfxInfologName); + stopDumpsysSurfaceFlinger(parameters, viewName, surfFlingerlogName); + stopDumpsysGfxInfo(parameters, gfxInfologName); timingResults.put(runName, results); } @@ -172,9 +162,9 @@ public class UiAutomation extends UxPerfUiAutomation { timingResults.put(testTag, result); } - // Helper to click on an individual photographs based on index in Camera gallery. - private void selectPhoto(int index) throws Exception { - UiObject cameraHeading = new UiObject(new UiSelector().text("Camera")); + // Helper to click on an individual photographs based on index in wa-working gallery. + private void selectPhoto(final int index) throws Exception { + UiObject cameraHeading = new UiObject(new UiSelector().text("wa-working")); cameraHeading.clickAndWaitForNewWindow(); UiObject photo = @@ -183,109 +173,4 @@ public class UiAutomation extends UxPerfUiAutomation { .index(index))); photo.click(); } - - // Helper for testing zoom facility. NOTE: the built in UiObject methods - // pinchIn() and pinchOut() do not zoom appropriately for this application. - private Timer uiObjectVertPinchTest( - UiObject view, PinchType direction, - int steps, int percent) throws Exception { - - Timer results = new Timer(); - results.start(); - - final int FINGER_TOUCH_HALF_WIDTH = 20; - - // make value between 1 and 100 - percent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; - float percentage = percent / 100f; - - Rect rect = view.getVisibleBounds(); - if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) - throw new IllegalStateException("Object width is too small for operation"); - - // start from the same point at the center of the control - Point startPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); - Point startPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); - - // End at the top-center and bottom-center of the control - Point endPoint1 = new Point(rect.centerX(), rect.centerY() + (int) ((rect.height() / 2) * percentage)); - Point endPoint2 = new Point(rect.centerX(), rect.centerY() - (int) ((rect.height() / 2) * percentage)); - - if (direction.equals(PinchType.IN)) { - view.performTwoPointerGesture(endPoint1, endPoint2, startPoint1, startPoint2, steps); - } else if (direction.equals(PinchType.OUT)) { - view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); - } - - results.end(); - - return results; - } - - private class GestureTestParams { - GestureType gestureType; - Direction gestureDirection; - PinchType pinchType; - private int percent; - private int steps; - - GestureTestParams(GestureType gesture, Direction direction, int steps) { - this.gestureType = gesture; - this.gestureDirection = direction; - this.pinchType = PinchType.NULL; - this.steps = steps; - this.percent = 0; - } - - GestureTestParams(GestureType gesture, PinchType pinchType, int steps, int percent) { - this.gestureType = gesture; - this.gestureDirection = Direction.NULL; - this.pinchType = pinchType; - this.steps = steps; - this.percent = percent; - } - } - - private void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { - // Write out the key/value pairs to the instrumentation log file - FileWriter fstream = new FileWriter(file); - BufferedWriter out = new BufferedWriter(fstream); - Iterator<Entry<String, Timer>> it = timingResults.entrySet().iterator(); - - while (it.hasNext()) { - Map.Entry<String, Timer> pairs = it.next(); - Timer results = pairs.getValue(); - long start = results.getStart(); - long finish = results.getFinish(); - long duration = results.getDuration(); - out.write(String.format(pairs .getKey() + " " + start + " " + finish + " " + duration + "\n")); - } - out.close(); - } - - private void startDumpsysSurfaceFlinger(String view) { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - initDumpsysSurfaceFlinger(parameters.getString("package"), view); - } - } - - private void stopDumpsysSurfaceFlinger(String view, String filename) throws Exception { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - File out_file = new File(parameters.getString("output_dir"), filename); - exitDumpsysSurfaceFlinger(parameters.getString("package"), view, out_file); - } - } - - private void startDumpsysGfxInfo() { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - initDumpsysGfxInfo(parameters.getString("package")); - } - } - - private void stopDumpsysGfxInfo(String filename) throws Exception { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - File out_file = new File(parameters.getString("output_dir"), filename); - exitDumpsysGfxInfo(parameters.getString("package"), out_file); - } - } } diff --git a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 41a3ceac..f2334102 100755 --- a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -7,16 +7,10 @@ import android.os.SystemClock; // Import the uiautomator libraries import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; -import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; -import com.android.uiautomator.core.UiCollection; -import com.android.uiautomator.testrunner.UiAutomatorTestCase; import com.arm.wlauto.uiauto.UxPerfUiAutomation; -import java.io.File; -import java.io.FileWriter; -import java.io.BufferedWriter; import java.util.concurrent.TimeUnit; import java.util.Iterator; import java.util.LinkedHashMap; @@ -33,8 +27,6 @@ public class UiAutomation extends UxPerfUiAutomation { private LinkedHashMap<String, Timer> timingResults = new LinkedHashMap<String, Timer>(); public void runUiAutomation() throws Exception { - Timer result = new Timer(); - result.start(); parameters = getParams(); dismissWelcomeView(); @@ -45,12 +37,9 @@ public class UiAutomation extends UxPerfUiAutomation { gesturesTest("Getting Started.pdf"); - String [] searchStrings = {"Glossary", "cortex"}; + String[] searchStrings = {"Glossary", "cortex"}; searchPdfTest("cortex_m4", searchStrings); - result.end(); - timingResults.put("Total", result); - writeResultsToFile(timingResults, parameters.getString("output_file")); } @@ -73,7 +62,7 @@ public class UiAutomation extends UxPerfUiAutomation { do { i += 10; tapDisplay(webViewCoords.centerX(), webViewCoords.centerY() + i); - } while ( welcomeView.exists() || i < webViewCoords.top ); + } while (welcomeView.exists() || i < webViewCoords.top); } private void signInOnline(Bundle parameters) throws Exception { @@ -139,10 +128,10 @@ public class UiAutomation extends UxPerfUiAutomation { .className("android.widget.Button")); if (allowButton.waitForExists(timeout)) { allowButton.clickAndWaitForNewWindow(timeout); - }; + } } - private void openFile(String filename) throws Exception { + private void openFile(final String filename) throws Exception { String TestTag = "openfile"; @@ -184,7 +173,7 @@ public class UiAutomation extends UxPerfUiAutomation { return result; } - private Timer searchFileList(String searchText) throws Exception { + private Timer searchFileList(final String searchText) throws Exception { // Enter search text into the file searchBox. This will automatically filter the list. UiObject searchBox = getUiObjectByResourceId("android:id/search_src_text", "android.widget.EditText"); @@ -196,7 +185,7 @@ public class UiAutomation extends UxPerfUiAutomation { return result; } - private Timer openFileFromList(String file) throws Exception { + private Timer openFileFromList(final String file) throws Exception { // Open a file from a file list view by searching for UiObjects containing the doc title. UiObject fileObject = getUiObjectByText(file, "android.widget.TextView"); Timer result = new Timer(); @@ -212,31 +201,7 @@ public class UiAutomation extends UxPerfUiAutomation { return result; } - private class GestureTestParams { - GestureType gestureType; - Direction gestureDirection; - PinchType pinchType; - int percent; - int steps; - - GestureTestParams(GestureType gesture, Direction direction, int steps) { - this.gestureType = gesture; - this.gestureDirection = direction; - this.pinchType = PinchType.NULL; - this.steps = steps; - this.percent = 0; - } - - GestureTestParams(GestureType gesture, PinchType pinchType, int steps, int percent) { - this.gestureType = gesture; - this.gestureDirection = Direction.NULL; - this.pinchType = pinchType; - this.steps = steps; - this.percent = percent; - } - } - - private void gesturesTest (String filename) throws Exception { + private void gesturesTest(final String filename) throws Exception { String TestTag = "gestures"; @@ -268,8 +233,8 @@ public class UiAutomation extends UxPerfUiAutomation { UiObject view = new UiObject(new UiSelector().resourceId("com.adobe.reader:id/viewPager")); - startDumpsysGfxInfo(); - startDumpsysSurfaceFlinger(viewName); + startDumpsysGfxInfo(parameters); + startDumpsysSurfaceFlinger(parameters, viewName); Timer results = new Timer(); @@ -287,8 +252,8 @@ public class UiAutomation extends UxPerfUiAutomation { break; } - stopDumpsysSurfaceFlinger(viewName, surfFlingerlogName); - stopDumpsysGfxInfo(gfxInfologName); + stopDumpsysSurfaceFlinger(parameters, viewName, surfFlingerlogName); + stopDumpsysGfxInfo(parameters, gfxInfologName); timingResults.put(runName, results); } @@ -296,7 +261,7 @@ public class UiAutomation extends UxPerfUiAutomation { exitDocument(); } - private void searchPdfTest (String filename, String [] searchStrings) throws Exception { + private void searchPdfTest(final String filename, final String[] searchStrings) throws Exception { String TestTag = "search"; @@ -305,7 +270,7 @@ public class UiAutomation extends UxPerfUiAutomation { // Get the page view for the opened document which we can use for pinch actions UiObject pageView = getUiObjectByResourceId("com.adobe.reader:id/pageView", "android.widget.RelativeLayout"); - for ( int i=0; i < searchStrings.length; i++) { + for (int i = 0; i < searchStrings.length; i++) { timingResults.put(String.format(TestTag + "_" + i), searchTest(searchStrings[i])); } @@ -313,7 +278,7 @@ public class UiAutomation extends UxPerfUiAutomation { exitDocument(); } - private Timer searchTest(String searchText) throws Exception { + private Timer searchTest(final String searchText) throws Exception { // Click on the search button icon and enter text in the box. This closes the keyboad // so click the box again and press Enter to start the search. UiObject searchButton = getUiObjectByResourceId("com.adobe.reader:id/document_view_search_icon", @@ -356,47 +321,4 @@ public class UiAutomation extends UxPerfUiAutomation { UiObject upButton = getUiObjectByResourceId("android:id/up", "android.widget.ImageView" ); upButton.clickAndWaitForNewWindow(); } - - private void writeResultsToFile(LinkedHashMap timingResults, String file) throws Exception { - // Write out the key/value pairs to the instrumentation log file - FileWriter fstream = new FileWriter(file); - BufferedWriter out = new BufferedWriter(fstream); - Iterator<Entry<String, Timer>> it = timingResults.entrySet().iterator(); - - while (it.hasNext()) { - Map.Entry<String, Timer> pairs = it.next(); - Timer results = pairs.getValue(); - long start = results.getStart(); - long finish = results.getFinish(); - long duration = results.getDuration(); - out.write(String.format(pairs.getKey() + " " + start + " " + finish + " " + duration + "\n")); - } - out.close(); - } - - private void startDumpsysSurfaceFlinger(String view) { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - initDumpsysSurfaceFlinger(parameters.getString("package"), view); - } - } - - private void stopDumpsysSurfaceFlinger(String view, String filename) throws Exception { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - File out_file = new File(parameters.getString("output_dir"), filename); - exitDumpsysSurfaceFlinger(parameters.getString("package"), view, out_file); - } - } - - private void startDumpsysGfxInfo() { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - initDumpsysGfxInfo(parameters.getString("package")); - } - } - - private void stopDumpsysGfxInfo(String filename) throws Exception { - if (Boolean.parseBoolean(parameters.getString("dumpsys_enabled"))) { - File out_file = new File(parameters.getString("output_dir"), filename); - exitDumpsysGfxInfo(parameters.getString("package"), out_file); - } - } } From d77b29165f1e2e5e088a4e15a58b437a84455688 Mon Sep 17 00:00:00 2001 From: James Hartley <james.hartley@arm.com> Date: Thu, 5 May 2016 11:05:06 +0100 Subject: [PATCH 6/6] Fixes for Reader/Gmail/Photos Check in missing UiAutomation .class files Fix generation and deletion of dump sys logs including renaming to a standard [test tag]_[test number].log format Improved Reader to run across a range of devices with subtlety different layouts and views --- wlauto/common/android/BaseUiAutomation.class | Bin 6748 -> 8225 bytes .../common/android/UxPerfUiAutomation$1.class | Bin 917 -> 917 bytes .../UxPerfUiAutomation$Direction.class | Bin 1345 -> 1345 bytes ...UxPerfUiAutomation$GestureTestParams.class | Bin 0 -> 1710 bytes .../UxPerfUiAutomation$GestureType.class | Bin 1287 -> 1287 bytes .../UxPerfUiAutomation$PinchType.class | Bin 1249 -> 1249 bytes .../android/UxPerfUiAutomation$Timer.class | Bin 1118 -> 1118 bytes .../common/android/UxPerfUiAutomation.class | Bin 7329 -> 10182 bytes wlauto/workloads/gmail/__init__.py | 31 +++++++++--------- .../gmail/com.arm.wlauto.uiauto.gmail.jar | Bin 9695 -> 10848 bytes .../com.arm.wlauto.uiauto.googlephotos.jar | Bin 11215 -> 11107 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 30 ++++++++++++++--- wlauto/workloads/reader/__init__.py | 29 ++++++++-------- .../reader/com.arm.wlauto.uiauto.reader.jar | Bin 11674 -> 12445 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 2 +- 15 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 wlauto/common/android/UxPerfUiAutomation$GestureTestParams.class diff --git a/wlauto/common/android/BaseUiAutomation.class b/wlauto/common/android/BaseUiAutomation.class index e7aca274e6ee0c144314a6d14b041cf3826f4f98..168228ae40e3b5d3a7bbcfb1e0db3357b5685211 100644 GIT binary patch literal 8225 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 TbHi{aE9d75!v`7U5<K#2VUDtZ delta 2390 zcma)6d013c6#v~}#`orN6&Y|CW<V!tm>gU_jm-Y=3*{dq7BxdFOVLRp2~08DCzr}H zv%FbimReRSxJ8j!S+=Wfwl8XBt8G?RmZ5ddd&6Vo(~sUC=bn4-`Tfpv&pWFM_T<NQ z9^1MNz(C<QFapcmxDU%+bikj}pxym$6yX8BTw##5QpYL-58@%-tk&?bhDQu^#WEI; z>R7|;S_2a63^bxi!+N&dpkbo{FP3T8#Or1qkMSC7HsHhKZ1MzaEgGKGv4z#A_@0=0 zVJmN+Ht-Cd)v=A&=L|fL?K)o2@S=v747`k24CLWe0};H&Y&%%nX<!##=i4_lys6_Y z4R7<&ZUd(?s~2VO=y;cv_gK8ojy}-wA&34Ei;r1+!i1)vZ4o|Yv4_Q8zTL;-GYy|> z_@a4^Sm$tHe{+9llSA#-LW4_Cs^LqCukf|RH~3bf80Scwi|-^3;ClgWR^9Ze(dy|M zevtSPKS}(IgKDTA3E~(0D&Xutt+q<yHyn~E!S5RWkQj?U1p;cMBcMx6L{uQGD!YZ% zZatDT35V4&J*&rT9A>~@64j`Y_!~zA2CMC^kQ(FeI{^Qnm9Hx$j^c=hV-o)g2)JwN zswP*~2m4KyLI{T@lB947m)htqh;)%c6XdW&xLFvS#TY4)aYz$VimsxY6e%bb2&tpV znQD+xJgB=!mADay1$>2dGi##3+PeDSl<L}Ouy<%iZ&OI&p-4p<i*y`O8;qPjJ#bLs zR@^4BfW_@B7P44`JEic73@LmfQy^FE5xLEc$*s<wIECJ01T`&ZK_w>5M;eu%WSMGC z&B-gLGXoBiIdCF`k)%nw1w0sq(X<NA$g~%ptTWo}Pa|9()81?1ljHV4GR{K<Aq2h2 zI1@SAQzFXM3QwSr`SanzK*F4l3&<y^?JQ5MU5N37aG^gg!o_4G5yk{MOQO?>sHBrJ zb=2cOyFHFGp<_rw9B!M<jY%fkWb)x8d@qwDYI0Ph<x@lp(gLxzh`0i6apc62e8#yr z$VUK|U<$<%AiWBg5@RB7H7;Xb@-&QWxSsAvUaDhU3$i!U#)0;LhZ8}e9dMW|ZNF|z zC1%lqxrUilNqPZAyf8iEERHxxUVs5MazGr(XI8|C(Or&OVl7j9)3ah6NEh0Hx}cpY z@%5}2+TPJYwsmA{WjBOY#u{4?^5nK4Jho$cqbQ%zCbQK?Mm)xNJQCB0;0jDPlbY9~ zfs*R!EjOQGJV6W58#CzHbaFD^PH#Ty&8OtEnbgP*YLU6Pk~Ak$a5ZM(DoW~9L`lB} z8a3twTuZlZ^d;PNxSpD_tsw0G2E^hCEg@@aLe-GbUA20-DF$X(Z5rWo47FnzN<S?( zC!ftG&4CQ$Vh%l6(sA5#EpD|aqm0=0os@0f|6;qzX7j5GpV_p&lf`GXduQ?8j9bjw zAMoXsax-)@TWK*>Tp<%n5}Lwq=kBMvb7KPjc>NQrNmGgL%2Z`$cDTL0mL@cTj57%y zUU6G*te}YqtzX0H$mJ)5(5Pbw+49ujAhbvehPi4w!dE81HQOT%$rHebyK4G%#IHUf z{*L&#tn&9v7?*2kG_6gr?`r#_d2D95$sbG@Q%zLo^`^b`>!#SXO~GB}xCC|bVsqFC zdI@XfrUZsi4;2M+Lj0>*gEnj<!?-&>XqUw8Q?ml9F_2A|9i3wCu`%qUIIA-s_uBS8 RwJs}2m|dM>mYNUT@E^=GYs&xt diff --git a/wlauto/common/android/UxPerfUiAutomation$1.class b/wlauto/common/android/UxPerfUiAutomation$1.class index 30a97eb30059b5f6db3ceb092e8f0bd180bd0c40..68c6d755ca4e880509a2505c6cf4d6443d7921c2 100644 GIT binary patch delta 13 UcmbQrK9zk#0yE?M$%)J+03NOc7XSbN delta 13 UcmbQrK9zk#0yE>x$%)J+03MJ85dZ)H diff --git a/wlauto/common/android/UxPerfUiAutomation$Direction.class b/wlauto/common/android/UxPerfUiAutomation$Direction.class index a3b7eb4e3390695dca11eddea3f9669ca3c4a24b..e7808a1fcd9175d29d21320c7f990e9979f257cc 100644 GIT binary patch delta 31 icmX@eb&zWV2MeR&WKI@+AZf{B2P7+4mH|n5RwV#{-3NvM delta 31 icmX@eb&zWV2MeS2WKI@+AZf{B2P7+4mH|n5RwV#`jR$T3 diff --git a/wlauto/common/android/UxPerfUiAutomation$GestureTestParams.class b/wlauto/common/android/UxPerfUiAutomation$GestureTestParams.class new file mode 100644 index 0000000000000000000000000000000000000000..3f074e63e2b1e9400d4732362c1687143e1bb976 GIT binary patch literal 1710 zcmd6oTTc@~6vzM5mabb?DR=RLf=J79DIlT(5)DSvq(Ksa_ob|`q}?{#t(R}%qsC7m zNn_%JAHXl;J>HG~nYIhc%l6GaoHOUloHM^Yb7uPH_p8?cW^i3c0^<p^V?vH5rI^yu zhm0IeOEDwGtd1^R(r{VByg>VoUGb})z5cjtYq&zkodbt}k#$|$TPawTid_+y&*e+S zjO7(G4+~b+FJ-EZQX7xfZ14VtbCbTJ<vS&J<WQPLfn;NwTaIVv<-CTg0(xKy%!N-K zL@}{mcHI1Ko&FllwWirp#vqCrwX*HyZPynNS%J2SZ<qPyaevpTj7$rdp*fi=zT~)$ zzbx=H9X>4d%D-wHKI))+*|AN5*h*>J7U;-1uDx0<ZrR?twN;>}D_6=}g-y$Iq}_1F zWE})Lo5#y$S+hK=NZ(R;gd@?i?u{1VA#OLjMBv$fRJemK$*RgF?v<)+mD`T2R{zmE zFtukrune5RSp$PuFkm2Qpc6d?7ID%*uN0?o%D{jWi|Em?B(Tu(9XoUgNx5gHV7WV) zyIXs_YrF?7=i^%-FdI57XsA|#f?^6p)2a_wH*z_Fbl7b%#K)|iPhT8-r;y}`eTg2W zSz4u8SfyEIAeoeBK|8{ggE&Wdp4JoEZPcUYcn!jQiHJE-L)4tCA!hEQt%kVS8>>Mx zqct3Rq2h-q2cc2Eg^qVPf%oXf2k!EbIX~edK4X}(bM?%)K#%;5DgvQKqhyY#QHs=2 zHIke$MVD^SJ?EM@=TiUB?L(J*gly9FlJp4P7vg;--ZysJcP9Tqyr0DQrSO*PsRO)J zfS2N$I$lclslrRiW+fhBWXJN;A{e6;fr$?4Va^@rC!e@6z`vL|bW`_H_fsdRM<D(H Dwy@6A literal 0 HcmV?d00001 diff --git a/wlauto/common/android/UxPerfUiAutomation$GestureType.class b/wlauto/common/android/UxPerfUiAutomation$GestureType.class index 5e9e2410e3850dd666e5ac4eb4d4b30075c461c4..7651f530945e3d4337529cf574c170d8cf773b68 100644 GIT binary patch delta 31 icmZqYYUkSUg_+T4@>gbkAgRh?2P9Ki8i3?e79{|l3JGHX delta 31 icmZqYYUkSUg_%)j@>gbkAgRh?2P9Ki8i3?e79{|jx(Q1F diff --git a/wlauto/common/android/UxPerfUiAutomation$PinchType.class b/wlauto/common/android/UxPerfUiAutomation$PinchType.class index b1368c088b7ea9d428ee74935ae1e77075460e36..1ee135ef0c94491cd9d880c6ee6d51334ddd39fc 100644 GIT binary patch delta 31 jcmaFJ`H*wNIc7%V$>*8%f#iQ?J0NMt(f}m)vnT-ow-yRo delta 31 jcmaFJ`H*wNIc7%P$>*8%f#iQ?J0NMt(f}m)vnT-owZ;lU diff --git a/wlauto/common/android/UxPerfUiAutomation$Timer.class b/wlauto/common/android/UxPerfUiAutomation$Timer.class index 4babd8ee9f7bdea95193ce9ee370b154195db72f..3926a1eae8333148a0f018ddbdb5bc6e1b3dd406 100644 GIT binary patch delta 67 zcmcb|agSreX(nD%22KVu20jLJ24Mz^$v2ohS*;n^8Ehu2G5c`Z16d9XA`Fg`tC?*W TT_*1Uk{*-40!g3AMl3o2_?Qmv delta 67 zcmcb|agSreX(nEM22KV820jKu24M!H$v2ohSxp((8O$cDG5c^@0$ElJA`I4(tC?*W T?I!O4l1`Jq0!g>YMl3o2?;sAQ diff --git a/wlauto/common/android/UxPerfUiAutomation.class b/wlauto/common/android/UxPerfUiAutomation.class index ccd5d115010d2109b8ad40226b9be8d7af68f284..03ce92db58fac950197f06f8de4c3028a019f02c 100644 GIT binary patch literal 10182 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 delta 2483 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 D9Wc1W diff --git a/wlauto/workloads/gmail/__init__.py b/wlauto/workloads/gmail/__init__.py index 78a05abe..a02646ab 100755 --- a/wlauto/workloads/gmail/__init__.py +++ b/wlauto/workloads/gmail/__init__.py @@ -66,30 +66,29 @@ class Gmail(AndroidUiAutoBenchmark): def update_result(self, context): super(Gmail, self).update_result(context) - if self.dumpsys_enabled: - self.device.pull_file(self.output_file, context.output_directory) - result_file = os.path.join(context.output_directory, self.instrumentation_log) + self.device.pull_file(self.output_file, context.output_directory) + result_file = os.path.join(context.output_directory, self.instrumentation_log) - with open(result_file, 'r') as wfh: - regex = re.compile(r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)') - for line in wfh: - match = regex.search(line) - if match: - context.result.add_metric((match.group('key') + "_start"), - match.group('value1')) - context.result.add_metric((match.group('key') + "_finish"), - match.group('value2')) - context.result.add_metric((match.group('key') + "_duration"), - match.group('value3')) + with open(result_file, 'r') as wfh: + regex = re.compile(r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)') + for line in wfh: + match = regex.search(line) + if match: + context.result.add_metric((match.group('key') + "_start"), + match.group('value1')) + context.result.add_metric((match.group('key') + "_finish"), + match.group('value2')) + context.result.add_metric((match.group('key') + "_duration"), + match.group('value3')) def teardown(self, context): super(Gmail, self).teardown(context) for file in self.device.listdir(self.device.working_directory): - if file.startswith (self.name) and file.endswith(".log"): + if file.endswith(".log"): self.device.pull_file(os.path.join(self.device.working_directory, file), context.output_directory) self.device.delete_file(os.path.join(self.device.working_directory, file)) - if file.startswith (self.name) and file.endswith(".jpg"): + if file.endswith(".jpg"): self.device.delete_file(os.path.join(self.device.working_directory, file)) # Force a re-index of the mediaserver cache to pick up new files diff --git a/wlauto/workloads/gmail/com.arm.wlauto.uiauto.gmail.jar b/wlauto/workloads/gmail/com.arm.wlauto.uiauto.gmail.jar index 48aabdb73701ffe66b83220b41de60b08f3524b0..1ac26c1657de50badc6608c10b8addc60f76e53a 100644 GIT binary patch delta 10598 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/++OR=^~~qFB{8DQM=< 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 A^Z)<= delta 9436 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 diff --git a/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar b/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar index cf790ce49740a4abeb93a8a4001c0b1ac8abf7c2..41dd7af6796b07324f663dcec21ec441d7901db7 100644 GIT binary patch delta 10897 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 delta 11006 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 diff --git a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index b9d9b81e..a8bd6514 100644 --- a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -20,12 +20,14 @@ public class UiAutomation extends UxPerfUiAutomation { public static String TAG = "uxperf_googlephotos"; public Bundle parameters; - private long viewTimeout = TimeUnit.SECONDS.toMillis(10); + private int viewTimeoutSecs = 10; + private long viewTimeout = TimeUnit.SECONDS.toMillis(viewTimeoutSecs); private LinkedHashMap<String, Timer> timingResults = new LinkedHashMap<String, Timer>(); public void runUiAutomation() throws Exception { parameters = getParams(); + confirmLocalFileAccess(); dismissWelcomeView(); gesturesTest(); editPhotoTest(); @@ -33,16 +35,31 @@ public class UiAutomation extends UxPerfUiAutomation { writeResultsToFile(timingResults, parameters.getString("output_file")); } + private void confirmLocalFileAccess() throws Exception { + // First time run requires confirmation to allow access to local files + UiObject allowButton = new UiObject(new UiSelector().textContains("Allow") + .className("android.widget.Button")); + if (allowButton.waitForExists(timeout)) { + allowButton.clickAndWaitForNewWindow(timeout); + } + } + + private void dismissWelcomeView() throws Exception { + // Click through the first two pages and make sure that we don't sign // in to our google account. This ensures the same set of photographs // are placed in the camera directory for each run. - sleep(3); // Pause while splash screen loads + sleep(5); // Pause while splash screen loads UiObject getStartedButton = - getUiObjectByResourceId("com.google.android.apps.photos:id/get_started", - "android.widget.Button"); + new UiObject (new UiSelector().textContains("Get started") + .className("android.widget.Button")); + + tapDisplayCentre(); + waitObject(getStartedButton, 10); + getStartedButton.clickAndWaitForNewWindow(); UiObject welcomeButton = @@ -78,7 +95,6 @@ public class UiAutomation extends UxPerfUiAutomation { testParams.put("pinch_out", new GestureTestParams(GestureType.PINCH, PinchType.OUT, 100, 50)); testParams.put("pinch_in", new GestureTestParams(GestureType.PINCH, PinchType.IN, 100, 50)); testParams.put("swipe_right", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.RIGHT, 10)); - testParams.put("swipe_up", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.UP, 10)); Iterator<Entry<String, GestureTestParams>> it = testParams.entrySet().iterator(); @@ -128,6 +144,10 @@ public class UiAutomation extends UxPerfUiAutomation { timingResults.put(runName, results); } + + UiObject navigateUpButton = + getUiObjectByDescription("Navigate Up", "android.widget.ImageButton"); + navigateUpButton.click(); } private void editPhotoTest() throws Exception { diff --git a/wlauto/workloads/reader/__init__.py b/wlauto/workloads/reader/__init__.py index 53c6fe3d..1a29e00b 100755 --- a/wlauto/workloads/reader/__init__.py +++ b/wlauto/workloads/reader/__init__.py @@ -65,21 +65,20 @@ class Reader(AndroidUiAutoBenchmark): def update_result(self, context): super(Reader, self).update_result(context) - if self.dumpsys_enabled: - self.device.pull_file(self.output_file, context.output_directory) - result_file = os.path.join(context.output_directory, self.instrumentation_log) + self.device.pull_file(self.output_file, context.output_directory) + result_file = os.path.join(context.output_directory, self.instrumentation_log) - with open(result_file, 'r') as wfh: - regex = re.compile(r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)') - for line in wfh: - match = regex.search(line) - if match: - context.result.add_metric((match.group('key') + "_start"), - match.group('value1')) - context.result.add_metric((match.group('key') + "_finish"), - match.group('value2')) - context.result.add_metric((match.group('key') + "_duration"), - match.group('value3')) + with open(result_file, 'r') as wfh: + regex = re.compile(r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)') + for line in wfh: + match = regex.search(line) + if match: + context.result.add_metric((match.group('key') + "_start"), + match.group('value1')) + context.result.add_metric((match.group('key') + "_finish"), + match.group('value2')) + context.result.add_metric((match.group('key') + "_duration"), + match.group('value3')) def teardown(self, context): super(Reader, self).teardown(context) @@ -88,6 +87,6 @@ class Reader(AndroidUiAutoBenchmark): self.device.delete_file(os.path.join(self.reader_local_dir, file)) for file in self.device.listdir(self.device.working_directory): - if file.startswith (self.name) and file.endswith(".log"): + if file.endswith(".log"): self.device.pull_file(os.path.join(self.device.working_directory, file), context.output_directory) self.device.delete_file(os.path.join(self.device.working_directory, file)) diff --git a/wlauto/workloads/reader/com.arm.wlauto.uiauto.reader.jar b/wlauto/workloads/reader/com.arm.wlauto.uiauto.reader.jar index aae224998bcb2b6c6b6ed4c10c9a604c8a0542e9..ba3eb3bfb32ae10804ae8101e5bca3bbd19d1e9a 100644 GIT binary patch delta 12226 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 N&WSwD`A?4z_diWdGg$xt delta 11458 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 diff --git a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index f2334102..5255e58e 100755 --- a/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/reader/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -227,7 +227,7 @@ public class UiAutomation extends UxPerfUiAutomation { int percent = pair.getValue().percent; String runName = String.format(TestTag + "_" + pair.getKey()); - String gfxInfologName = String.format(TAG + "_" + runName + "_gfxInfo.log"); + String gfxInfologName = String.format(runName + "_gfxInfo.log"); String surfFlingerlogName = String.format(runName + "_surfFlinger.log"); String viewName = new String("com.adobe.reader.viewer.ARViewerActivity");