From 403d8ea1bfee411d1f535d78fefe0e3ee03e392c Mon Sep 17 00:00:00 2001 From: muendelezaji Date: Fri, 27 May 2016 14:31:13 +0100 Subject: [PATCH] Move common methods to base classes --- .gitignore | 1 + .../common/android/BaseUiAutomation$1.class | Bin 868 -> 1311 bytes .../BaseUiAutomation$FindByCriteria.class | Bin 0 -> 1278 bytes .../BaseUiAutomation$ScreenOrientation.class | Bin 1296 -> 1296 bytes wlauto/common/android/BaseUiAutomation.class | Bin 9139 -> 12128 bytes .../common/android/UxPerfUiAutomation$1.class | Bin 917 -> 917 bytes ...UxPerfUiAutomation$GestureTestParams.class | Bin 1710 -> 1710 bytes .../common/android/UxPerfUiAutomation.class | Bin 12314 -> 12543 bytes wlauto/external/uiauto/build.sh | 6 ++ .../arm/wlauto/uiauto/BaseUiAutomation.java | 87 ++++++++++++++++ .../arm/wlauto/uiauto/UxPerfUiAutomation.java | 10 +- .../com.arm.wlauto.uiauto.googleslides.jar | Bin 15787 -> 16176 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 95 ++---------------- 13 files changed, 112 insertions(+), 87 deletions(-) create mode 100644 wlauto/common/android/BaseUiAutomation$FindByCriteria.class diff --git a/.gitignore b/.gitignore index 0f568f55..5a58f101 100755 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ pmu_logger.mod.c obj/ libs/armeabi wlauto/workloads/*/uiauto/bin/ +wlauto/external/uiauto/bin/ diff --git a/wlauto/common/android/BaseUiAutomation$1.class b/wlauto/common/android/BaseUiAutomation$1.class index a70b448fa455d76641c6d4344b845d9e9cd5282c..5f94fdc208c89a11adf127138369f8c1acf9dc3d 100644 GIT binary patch delta 596 zcmZXS+fEZv6o$VwJxpgDYZbvBRH`VQs(=MrDxj1?Nzk?=S`!Hp(*zP44kq;wO-#J= zzL^K`(rYy_#uyTBz4IM-4&&NzVbEk|{r@*>?OA)T?1Sigcjf2rZ~H)jIhXTXaENo! zQ8#EXYjerKWfO*6u5i^93_I#_2D8TbCgg3d+1%(A8dB*^j>nfedmGi)3*FB1&2FdN zd-EzeVl(P-lY++?PJ4_q;W0@u@MJJoGBCx2P1)2;dn8QF46`1$O}N9X;0FyW7pzND zipGr|ZzBBDRfxW9@4VQ2CQSSJwV-bK>Elaggh+Mu$?~EwWzwbp()QEtMrW_RBZU0? zvS4fZV(r1gk!#f+wS=;6rW_o|KoGLtRhsjyhxg~}LbzUAY9+Eduv0o=E0Hv30#!Y~ zei35yaaOfo=?5Woup9icN^ids+yCx<#`$C(_X{V&D<25oJ48=0@)u7kMi22LQ5^l_ zIU*z(Vpuh&gD$GhahHZ_lT{w8uCv9qs>OhIbyblnC5h>3$_8~qNsSgM(yC!H8n5e{ W)=XTLL`?5RhOtUYZ$O4ymDC@%iDa$- delta 275 zcmbQw^@Ppv)W2Q(7#J7~8ML_=L>a_588{fkIe{z*5Lc3&K?=l?1`#ss46^JD@)P}i zC*CiUP+(_JQDDBmq(YBm)2d diff --git a/wlauto/common/android/BaseUiAutomation$FindByCriteria.class b/wlauto/common/android/BaseUiAutomation$FindByCriteria.class new file mode 100644 index 0000000000000000000000000000000000000000..6727b7d5f41ad4f909e77e777412ba5ef6981eb0 GIT binary patch literal 1278 zcmbVL+iuf95IvhXapJlc(hKy$J(MJcnm|h{QdMo!REmh`gWHOT2ee5|*~+mc$1dWp zAeATrf%?oxA!fG`O@Id!TiWsL9M3s3JNx73m+t_ISWQDi-ar8hI;M0yG%$iixmYQT z8Wgl7;!z6Y(iT&gkoK{TCk%C4!7Qy0}(ob;0$Kf^PHgU@^;&4Gpy8_ ze#_!P%X;VXDDlRG ztAP_IPq-UNZO?M~!Lw*(|IlF=tqIS05w#jlu*VxN?dU4~?i+^Zx!N&5;g-w2Bg+m0 z;T@Io1Iy0T{3dq~ICYtLx@4NiTf~|9n}{K~COi?YGfe$MM>T)IpoMP*^&xGGBaeqs zK$+q>8Az=)-R{rTp41gDYOM`ez&ahNVf#_gbasU7)8wBcuqc~lVp7iHl!+xQ>v+nr zJkS7{n8k{TTexjv6d4oaa+yGeM)vYhWI;5`P1pBG(L^raQ|xZz*lC8Odj9_ekkZ~h zs~b@2$@hBz`sqs>MY>cYbR)HmX(<&TOKO!R!NAyzY>Gr6jjOl@hH3Kdkd=?o0sDm5 zIpQD4W0;{esbUu4XEE2sFCnIOjf__KjKn!KiI4T+uhWisfx->kRB`Gdp(JAwae4v0 zurPOq0ca%G2{RM literal 0 HcmV?d00001 diff --git a/wlauto/common/android/BaseUiAutomation$ScreenOrientation.class b/wlauto/common/android/BaseUiAutomation$ScreenOrientation.class index 2f04ac44a3c881ff30ee1d137972653be7151c13..a9410115e666b76804c0ba23ef9cd5a4fe2373ff 100644 GIT binary patch delta 31 icmbQhHGylxUuH)2$^V%3futUb9gxgrX#kS%Sd;*uSP6Cj delta 31 icmbQhHGylxUuH(N$^V%3futUb9gxgrX#kS%Sd;*uAPI5+ diff --git a/wlauto/common/android/BaseUiAutomation.class b/wlauto/common/android/BaseUiAutomation.class index 914a153306c886837801f7021f0af240a27dc127..a2a03d61c3d4476b581cbb6edb01ba0981e1d0b5 100644 GIT binary patch literal 12128 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 L61jom8_RwN9n5>f delta 3575 zcmb_fd3;sH75>i4a^Jg|ENn3$`$8Th61ET%LnMUFunCBQkOTuH5u}6$ETXkhEQ?!F zuU4rowAEUwv@S@RQY*!ZQV_MZ#flXzimet4w%Tg7+V9-^@^ZBx{lk~v@7$TWXTI~z znQzYAyxO>ZV#mIZcRmJSm@Ki;h&>@ZiKpT?pubp~y}cnc;Me+cpUu|(AfC2y0MBUW zSqslu_>GN3>{0XEAfDIf?`#yg!wYQpN%F- zRg^Q-q^U`_q<>H{Y|K%T2PIS8vn z87!sF<%uPkLu9BRwsiTjRwKh?xIwdwu%ygjxr}snCFaJj##Mr_^I+ewW0Hzvu9R}8 zGAXm)CMj3nvkcZ?t&s|;6qMf@H^AALG`RF^sp3mqVPuq4T2gJ~92qSLEp2OE*t9Zt z@IoUsGRBfxBV%Qp^Hx$#c)XDbGEpJVRZ~ay_>z%HGTf5MMyAMABh%30%t&qto+r}{ z?j(_2$yv2CNJM6;IbTW*He-vych!7P&G*&ZgC7`~B^MZMl?#o`mN`Z)lDU@5Gg6N& zPIgM`&;~k6qni0TrCFz3EKNoh2-z;u7tFGe7B#ITvLj_g@DlATmbuP}ltD4>`qP{v zy(UYAb4xX_-y1+rHwpg!awc|TUl%okG9p>oL*3J3CC;%XbTXF0a(nI z;ai|Lmf%u8MHAxsA4|_1+2cQm^NL;nRCj(t#2-k&GPH4qU^%|*&aCb~r9)??LeKqR z+EPXth9MYEJHkaNkS#E8Q4hrB^Ibb6n)B6xkV*QMR~;{U~Bo zqYutO21X+vHBt7O!*0$65j-8!Yy>zf17AZ2IcBhZHLhVCf3!8Y){S;JqyOlhERUt{ zxKl9xIx*xk7;9aOvodRDC`NBLlM`7k&qX%sn7_#`RxVk9+3#jM1Rj=-d2Id6)?q#4 zv^sk;GpiIeo;_fi56Qpx-AJAa0`%QLy=fkEvNC-7nTZh2cQHJ@*%3C~k>_ycb-3Q0 z*_O4*)z2iZ2)K|+n2ltXu0qViAk^bb>b#svufoNcfF_)W1(-?2UqD^Vr2ra;-AolP z;ZCfiD%VqGs`Pqt7|T7pfqNfhe?v4Q8*rnm2OYbKCnqq0L9fL(*o2U~p`_2CsPif4DvCyF6}#J3 z9VJtZJ0oPOv5Bn!XB6RE-2RwP#keaPqrY=oPMI%G2jg7LS=TVm8pc_Bia6i?zv6ty z7iUavnY%UKdah%f>lx<;#<`JkHl8Amci6y#^m*%HO;zDBBjtRm=uB}Z5@vT{R41yp zvG1Pl!iXXrH<+g;6G@(EO;!*mEiWtFqux7C>dVsY`qt;Awe1JAQ097H-^KrUV+ z${`HJOE?>cS>Ima4S0m*=r!)^Q9Ob-+z88AfWZ8A*Z3XGzup%*rrA}E?BIU1QB1LX zKFn4u(QoJ8Ji=mEgpIXy=%kA0vdsRJ$+Z}$ib?NcvAmfd3p?2gF=#S3po^aa{(ARl zbQ!ap`-<9qOL>!Fj&Uh(GuUy4Il-m8!==27>3EMSd>`xZ0Z~6BjgP+QrA+5N;4P(v zw}iKpb-eXHZz;c^rgTSM4mY~XDB_}lPf#d=5(%JGVlh(UP$3pZOAxjEyq_Y*x6f0f zyD$~I@JsH3KUKTE`;nO4WiF^kuM_h=bEYM^7?z~Cz+RaPMu7crkF&Zf-PZ?}t%}|> z(g$(Um;ZnCLpGoJlIo&(H;wo$%)J+03Y}SSpWb4 diff --git a/wlauto/common/android/UxPerfUiAutomation$GestureTestParams.class b/wlauto/common/android/UxPerfUiAutomation$GestureTestParams.class index d027418966fd3652c45253fc53622619b91bf5a1..afbe52c33286aee4f635be7597529a0f6e3d97b0 100644 GIT binary patch delta 67 zcmZ3-yN-851FNJt11F;e10SO$gD|5NgA}7Rg94)sgDRu#%ySM=sMYgtqcHplL}z~ delta 67 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 delta 5688 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 diff --git a/wlauto/external/uiauto/build.sh b/wlauto/external/uiauto/build.sh index b32ec134..95f9872f 100755 --- a/wlauto/external/uiauto/build.sh +++ b/wlauto/external/uiauto/build.sh @@ -16,6 +16,12 @@ +# Build and return appropriate exit code if failed ant build +exit_code=$? +if [ $exit_code -ne 0 ]; then + echo "ERROR: 'ant build' exited with code $exit_code" + exit $exit_code +fi cp bin/classes/com/arm/wlauto/uiauto/*.class ../../common/android 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 f7df5dc2..61ed0d64 100644 --- a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java +++ b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/BaseUiAutomation.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeUnit; import android.os.Bundle; +import android.os.SystemClock; import android.graphics.Point; import android.graphics.Rect; @@ -37,6 +38,14 @@ public class BaseUiAutomation extends UiAutomatorTestCase { public long waitTimeout = TimeUnit.SECONDS.toMillis(4); public enum ScreenOrientation { RIGHT, NATURAL, LEFT }; + public static final int CLICK_REPEAT_INTERVAL_MINIMUM = 5; + public static final int CLICK_REPEAT_INTERVAL_DEFAULT = 50; + + /* + * Used by clickView() methods in order to provide a consistent API + */ + public enum FindByCriteria { BY_ID, BY_TEXT, BY_DESC; } + public void sleep(int second) { super.sleep(second * 1000); } @@ -276,4 +285,82 @@ public class BaseUiAutomation extends UiAutomatorTestCase { getUiDevice().getInstance().swipe(rect.centerX(), rect.centerY(), rect.centerX(), rect.centerY(), steps); } + + public void uiDeviceSwipeVertical(int startY, int endY, int xCoordinate, int steps) { + getUiDevice().swipe(startY, xCoordinate, endY, xCoordinate, steps); + } + + public void uiDeviceSwipeHorizontal(int startX, int endX, int yCoordinate, int steps) { + getUiDevice().swipe(startX, yCoordinate, endX, yCoordinate, steps); + } + + public void repeatClickView(UiObject view, int repeatCount, int intervalInMillis) throws Exception { + int repeatInterval = intervalInMillis > CLICK_REPEAT_INTERVAL_MINIMUM ? intervalInMillis : CLICK_REPEAT_INTERVAL_DEFAULT; + if (repeatCount < 1 || !view.isClickable()) { + return; + } + while (repeatCount-- > 0) { + view.click(); + SystemClock.sleep(repeatInterval); // in order to register as separate click + } + } + + public UiObject clickView(FindByCriteria criteria, String matching) throws Exception { + return clickView(criteria, matching, null, false); + } + + public UiObject clickView(FindByCriteria criteria, String matching, boolean wait) throws Exception { + return clickView(criteria, matching, null, wait); + } + + public UiObject clickView(FindByCriteria criteria, String matching, String clazz) throws Exception { + return clickView(criteria, matching, clazz, false); + } + + public UiObject clickView(FindByCriteria criteria, String matching, String clazz, boolean wait) throws Exception { + UiObject view; + switch (criteria) { + case BY_ID: + view = clazz == null ? getViewById(matching) : getUiObjectByResourceId(matching, clazz); + break; + case BY_DESC: + view = clazz == null ? getViewByDesc(matching) : getUiObjectByDescription(matching, clazz); + break; + case BY_TEXT: + default: + view = clazz == null ? getViewByText(matching) : getUiObjectByText(matching, clazz); + break; + } + if (wait) { + view.clickAndWaitForNewWindow(); + } else { + view.click(); + } + return view; + } + + public UiObject getViewByText(String text) throws Exception { + UiObject object = new UiObject(new UiSelector().textContains(text)); + if (!object.waitForExists(waitTimeout)) { + throw new UiObjectNotFoundException("Could not find view with text: " + text); + }; + return object; + } + + public UiObject getViewByDesc(String desc) throws Exception { + UiObject object = new UiObject(new UiSelector().descriptionContains(desc)); + if (!object.waitForExists(waitTimeout)) { + throw new UiObjectNotFoundException("Could not find view with description: " + desc); + }; + return object; + } + + public UiObject getViewById(String id) throws Exception { + UiObject object = new UiObject(new UiSelector().resourceId(id)); + if (!object.waitForExists(waitTimeout)) { + throw new UiObjectNotFoundException("Could not find view with resource ID: " + id); + }; + return object; + } + } 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 38f6e5c1..8d14461d 100644 --- a/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java +++ b/wlauto/external/uiauto/src/com/arm/wlauto/uiauto/UxPerfUiAutomation.java @@ -110,14 +110,20 @@ public class UxPerfUiAutomation extends BaseUiAutomation { } public void initDumpsysSurfaceFlinger(String appPackage) { - String packageView = getSurfaceFlingerView(appPackage); + initDumpsysSurfaceFlinger(appPackage, getSurfaceFlingerView(appPackage)); + } + + public void initDumpsysSurfaceFlinger(String appPackage, String packageView) { List command = Arrays.asList("dumpsys", "SurfaceFlinger", "--latency-clear", packageView); executeCommand(command); } public void exitDumpsysSurfaceFlinger(String appPackage, File filename) { - String packageView = getSurfaceFlingerView(appPackage); + exitDumpsysSurfaceFlinger(appPackage, getSurfaceFlingerView(appPackage), filename); + } + + public void exitDumpsysSurfaceFlinger(String appPackage, String packageView, File filename) { List command = Arrays.asList("dumpsys", "SurfaceFlinger", "--latency", packageView); exitDumpsys(command, filename); } diff --git a/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar b/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar index c66251f7e5205b1be5efcb773c25c5201f1e73ab..62cf6b121cc5b1d50575d2f58ece0eb0e14f6238 100644 GIT binary patch delta 15981 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 O0!%Qbg8z!g!TukwoUo$+ delta 15589 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 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 1ab200f5..44ee526c 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 @@ -30,9 +30,9 @@ import com.android.uiautomator.core.UiSelector; import com.arm.wlauto.uiauto.UxPerfUiAutomation; -import static com.arm.wlauto.uiauto.googleslides.UiAutomation.FindByCriteria.BY_ID; -import static com.arm.wlauto.uiauto.googleslides.UiAutomation.FindByCriteria.BY_TEXT; -import static com.arm.wlauto.uiauto.googleslides.UiAutomation.FindByCriteria.BY_DESC; +import static com.arm.wlauto.uiauto.BaseUiAutomation.FindByCriteria.BY_ID; +import static com.arm.wlauto.uiauto.BaseUiAutomation.FindByCriteria.BY_TEXT; +import static com.arm.wlauto.uiauto.BaseUiAutomation.FindByCriteria.BY_DESC; public class UiAutomation extends UxPerfUiAutomation { @@ -49,10 +49,6 @@ public class UiAutomation extends UxPerfUiAutomation { public static final String CLASS_IMAGE_BUTTON = "android.widget.ImageButton"; public static final String CLASS_TABLE_ROW = "android.widget.TableRow"; - public enum FindByCriteria { - BY_ID, BY_TEXT, BY_DESC; - } - public static final int DIALOG_WAIT_TIME_MS = 3000; public static final int SLIDE_WAIT_TIME_MS = 200; public static final int CLICK_REPEAT_INTERVAL_MS = 50; @@ -188,7 +184,8 @@ public class UiAutomation extends UxPerfUiAutomation { startDumpsys(ACTIVITY_SLIDES); slideTimer = new Timer(); slideTimer.start(); - uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); + uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, + centerY, DEFAULT_SWIPE_STEPS); slideTimer.end(); results.put(testTag, slideTimer); endDumpsys(ACTIVITY_SLIDES, testTag); @@ -208,7 +205,8 @@ public class UiAutomation extends UxPerfUiAutomation { startDumpsys(ACTIVITY_SLIDES); slideTimer = new Timer(); slideTimer.start(); - uiDeviceSwipeHorizontal(centerX - centerX/2, centerX + centerX/2, centerY); + uiDeviceSwipeHorizontal(centerX - centerX/2, centerX + centerX/2, + centerY, DEFAULT_SWIPE_STEPS); slideTimer.end(); results.put(testTag, slideTimer); endDumpsys(ACTIVITY_SLIDES, testTag); @@ -234,7 +232,8 @@ public class UiAutomation extends UxPerfUiAutomation { startDumpsys(ACTIVITY_SLIDES); slideTimer = new Timer(); slideTimer.start(); - uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, centerY); + uiDeviceSwipeHorizontal(centerX + centerX/2, centerX - centerX/2, + centerY, DEFAULT_SWIPE_STEPS); slideTimer.end(); results.put(testTag, slideTimer); endDumpsys(ACTIVITY_SLIDES, testTag); @@ -274,7 +273,7 @@ public class UiAutomation extends UxPerfUiAutomation { clickView(BY_TEXT, "Droid Sans Mono"); clickView(BY_ID, PACKAGE_ID + "palette_back_button"); UiObject decreaseFont = getViewByDesc("Decrease text"); - repeatClickView(decreaseFont, 20); + repeatClickView(decreaseFont, 20, CLICK_REPEAT_INTERVAL_MS); getUiDevice().pressBack(); // get image from gallery and insert @@ -387,80 +386,6 @@ public class UiAutomation extends UxPerfUiAutomation { sleep(1); } - public void repeatClickView(UiObject view, int repeat) throws Exception { - if (repeat < 1 || !view.isClickable()) return; - while (repeat-- > 0) { - view.click(); - SystemClock.sleep(CLICK_REPEAT_INTERVAL_MS); // in order to register as separate click - } - } - - public UiObject clickView(FindByCriteria criteria, String matching) throws Exception { - return clickView(criteria, matching, null, false); - } - - public UiObject clickView(FindByCriteria criteria, String matching, boolean wait) throws Exception { - return clickView(criteria, matching, null, wait); - } - - public UiObject clickView(FindByCriteria criteria, String matching, String clazz) throws Exception { - return clickView(criteria, matching, clazz, false); - } - - public UiObject clickView(FindByCriteria criteria, String matching, String clazz, boolean wait) throws Exception { - UiObject view; - switch (criteria) { - case BY_ID: - view = clazz == null ? getViewById(matching) : getUiObjectByResourceId(matching, clazz); - break; - case BY_DESC: - view = clazz == null ? getViewByDesc(matching) : getUiObjectByDescription(matching, clazz); - break; - case BY_TEXT: - default: - view = clazz == null ? getViewByText(matching) : getUiObjectByText(matching, clazz); - break; - } - if (wait) { - view.clickAndWaitForNewWindow(); - } else { - view.click(); - } - return view; - } - - public UiObject getViewByText(String text) throws Exception { - UiObject object = new UiObject(new UiSelector().textContains(text)); - if (!object.waitForExists(waitTimeout)) { - throw new UiObjectNotFoundException("Could not find view with text: " + text); - }; - return object; - } - - public UiObject getViewByDesc(String desc) throws Exception { - UiObject object = new UiObject(new UiSelector().descriptionContains(desc)); - if (!object.waitForExists(waitTimeout)) { - throw new UiObjectNotFoundException("Could not find view with description: " + desc); - }; - return object; - } - - public UiObject getViewById(String id) throws Exception { - UiObject object = new UiObject(new UiSelector().resourceId(id)); - if (!object.waitForExists(waitTimeout)) { - throw new UiObjectNotFoundException("Could not find view with resource ID: " + id); - }; - return object; - } - - public void uiDeviceSwipeHorizontal(int startX, int endX, int height) { - uiDeviceSwipeHorizontal(startX, endX, height, DEFAULT_SWIPE_STEPS); - } - - public void uiDeviceSwipeHorizontal(int startX, int endX, int height, int steps) { - getUiDevice().swipe(startX, height, endX, height, steps); - } - public void startDumpsys(String viewName) throws Exception { if (!dumpsysEnabled) return;