diff --git a/wlauto/common/android/workload.py b/wlauto/common/android/workload.py index 0943a411..73d54650 100644 --- a/wlauto/common/android/workload.py +++ b/wlauto/common/android/workload.py @@ -236,6 +236,11 @@ class ApkWorkload(Workload): self.device.execute('am force-stop {}'.format(self.package)) self.device.execute('pm clear {}'.format(self.package)) + # As of android API level 23, apps can request permissions at runtime, + # this will grant all of them so requests do not pop up when running the app + if self.device.get_sdk_version() >= 23: + self._grant_requested_permissions() + def install_apk(self, context): output = self.device.install(self.apk_file, self.install_timeout) if 'Failure' in output: @@ -247,6 +252,23 @@ class ApkWorkload(Workload): self.logger.debug(output) self.do_post_install(context) + def _grant_requested_permissions(self): + dumpsys_output = self.device.execute(command="dumpsys package {}".format(self.package)) + permissions = [] + lines = iter(dumpsys_output.splitlines()) + for line in lines: + if "requested permissions:" in line: + break + + for line in lines: + if "android.permission." in line: + permissions.append(line.split(":")[0].strip()) + else: + break + + for permission in permissions: + self.device.execute("pm grant {} {}".format(self.package, permission)) + def do_post_install(self, context): """ May be overwritten by dervied classes.""" pass diff --git a/wlauto/workloads/antutu/__init__.py b/wlauto/workloads/antutu/__init__.py index 580e9daa..5d046044 100644 --- a/wlauto/workloads/antutu/__init__.py +++ b/wlauto/workloads/antutu/__init__.py @@ -16,7 +16,8 @@ import os from collections import defaultdict, OrderedDict -from wlauto import AndroidUiAutoBenchmark, Parameter +from wlauto import AndroidUiAutoBenchmark, Parameter, File +from wlauto.utils.android import ApkInfo class Antutu(AndroidUiAutoBenchmark): @@ -46,7 +47,7 @@ class Antutu(AndroidUiAutoBenchmark): activity = ".ABenchMarkStart" summary_metrics = ['score', 'Overall_Score'] - valid_versions = ['3.3.2', '4.0.3', '5.3.0'] + valid_versions = ['3.3.2', '4.0.3', '5.3.0', '6.0.1'] device_prefs_directory = '/data/data/com.antutu.ABenchMark/shared_prefs' device_prefs_file = '/'.join([device_prefs_directory, 'com.antutu.ABenchMark_preferences.xml']) @@ -68,18 +69,26 @@ class Antutu(AndroidUiAutoBenchmark): def __init__(self, device, **kwargs): # pylint: disable=W0613 super(Antutu, self).__init__(device, **kwargs) - self.run_timeout = 6 * 60 * self.times + self.run_timeout = 10 * 60 * self.times self.uiauto_params['version'] = self.version self.uiauto_params['times'] = self.times self.uiauto_params['enable_sd_tests'] = self.enable_sd_tests + def setup(self, context): + if self.version == "6.0.1": + antutu_3d = context.resolver.get(File(self, "com.antutu.benchmark.full-1.apk")) + info = ApkInfo(antutu_3d) + if not context.device.is_installed(info.package): + self.device.install_apk(antutu_3d, timeout=120) + super(Antutu, self).setup(context) + def update_result(self, context): super(Antutu, self).update_result(context) with open(self.logcat_log) as fh: - if self.version == '4.0.3': - metrics = extract_version4_metrics(fh) + if self.version == '3.3.2': + metrics = extract_older_version_metrics(fh) else: - metrics = extract_older_version_metrics(fh) # pylint: disable=redefined-variable-type + metrics = extract_metrics(fh) # pylint: disable=redefined-variable-type for key, value in metrics.iteritems(): key = key.replace(' ', '_') context.result.add_metric(key, value) @@ -87,7 +96,7 @@ class Antutu(AndroidUiAutoBenchmark): # Utility functions -def extract_version4_metrics(fh): +def extract_metrics(fh): metrics = OrderedDict() metric_counts = defaultdict(int) for line in fh: diff --git a/wlauto/workloads/antutu/com.arm.wlauto.uiauto.antutu.jar b/wlauto/workloads/antutu/com.arm.wlauto.uiauto.antutu.jar index 122b57f0..4aecde1d 100644 Binary files a/wlauto/workloads/antutu/com.arm.wlauto.uiauto.antutu.jar and b/wlauto/workloads/antutu/com.arm.wlauto.uiauto.antutu.jar differ diff --git a/wlauto/workloads/antutu/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/antutu/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 2d98e5f4..4d7a08d1 100644 --- a/wlauto/workloads/antutu/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/antutu/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -34,36 +34,60 @@ import com.android.uiautomator.testrunner.UiAutomatorTestCase; import com.arm.wlauto.uiauto.BaseUiAutomation; -public class UiAutomation extends BaseUiAutomation { +public class UiAutomation extends BaseUiAutomation { public static String TAG = "antutu"; - + public static String TestButton5 = "com.antutu.ABenchMark:id/start_test_region"; + public static String TestButton6 = "com.antutu.ABenchMark:id/start_test_text"; private static int initialTimeoutSeconds = 20; public void runUiAutomation() throws Exception{ Bundle parameters = getParams(); String version = parameters.getString("version"); - boolean enableSdTests = Boolean.parseBoolean(parameters.getString("enable_sd_tests")); + boolean enableSdTests = Boolean.parseBoolean(parameters.getString("enable_sd_tests")); int times = Integer.parseInt(parameters.getString("times")); if (times < 1) { times = 1; } - if (version.equals("4.0.3") || version.equals("5.3.0")){ + if (version.equals("3.3.2")) { // version earlier than 4.0.3 + dismissReleaseNotesDialogIfNecessary(); + if(!enableSdTests){ + disableSdCardTests(); + } + hitStart(); + waitForAndViewResults(); + } + else { int iteration = 0; dismissNewVersionNotificationIfNecessary(); - hitTestButton(); while (true) { - if (version.equals("5.3.0")) - hitTestButtonVersion5(); + if(version.equals("6.0.1")) + hitTestButtonVersion5(TestButton6); + else if (version.equals("5.3.0")) { + hitTestButton(); + hitTestButtonVersion5(TestButton5); + } + else if (version.equals("4.0.3")) { + hitTestButton(); + hitTestButton(); + } else hitTestButton(); - waitForVersion4Results(); - viewDetails(); - extractResults(); + if(version.equals("6.0.1")) + { + waitForVersion6Results(); + extractResults6(); + } + else + { + waitForVersion4Results(); + viewDetails(); + extractResults(); + } iteration++; if (iteration >= times) { @@ -74,13 +98,6 @@ public class UiAutomation extends BaseUiAutomation { dismissRateDialogIfNecessary(); testAgain(); } - } else { // version earlier than 4.0.3 - dismissReleaseNotesDialogIfNecessary(); - if(!enableSdTests){ - disableSdCardTests(); - } - hitStart(); - waitForAndViewResults(); } Bundle status = new Bundle(); @@ -98,7 +115,7 @@ public class UiAutomation extends BaseUiAutomation { return false; } } - + public boolean dismissReleaseNotesDialogIfNecessary() throws Exception { UiSelector selector = new UiSelector(); UiObject closeButton = new UiObject(selector.text("Close")); @@ -118,11 +135,11 @@ public class UiAutomation extends BaseUiAutomation { // Sometimes, dismissing the dialog the first time does not work properly -- // it starts to disappear but is then immediately re-created; so may need to // dismiss it as long as keeps popping up. - while (closeButton.waitForExists(2)) { + while (closeButton.waitForExists(2)) { closeButton.click(); sleep(1); // diaglog dismissal dismissed = true; - } + } return dismissed; } @@ -137,15 +154,16 @@ public class UiAutomation extends BaseUiAutomation { /* In version 5 of antutu, the test has been changed from a button widget to a textview */ - public void hitTestButtonVersion5() throws Exception { + public void hitTestButtonVersion5(String id) throws Exception { UiSelector selector = new UiSelector(); - UiObject test = new UiObject(selector.resourceId("com.antutu.ABenchMark:id/start_test_region") + UiObject test = new UiObject(selector.resourceId(id) .className("android.widget.TextView")); test.waitForExists(initialTimeoutSeconds); test.click(); sleep(1); // possible tab transtion } + public void hitTest() throws Exception { UiSelector selector = new UiSelector(); UiObject test = new UiObject(selector.text("Test")); @@ -193,6 +211,17 @@ public class UiAutomation extends BaseUiAutomation { } } + public void waitForVersion6Results() throws Exception { + UiObject qrText = new UiObject(new UiSelector().className("android.widget.TextView") + .text("QRCode of result")); + for (int i = 0; i < 120; i++) { + if (qrText.exists()) { + break; + } + sleep(5); + } + } + public void viewDetails() throws Exception { UiSelector selector = new UiSelector(); UiObject detailsButton = new UiObject(new UiSelector().className("android.widget.Button") @@ -200,6 +229,30 @@ public class UiAutomation extends BaseUiAutomation { detailsButton.clickAndWaitForNewWindow(); } + public void extractResults6() throws Exception { + //Overal result + UiObject result = new UiObject(new UiSelector().resourceId("com.antutu.ABenchMark:id/tv_score_name")); + if (result.exists()) { + Log.v(TAG, String.format("ANTUTU RESULT: Overall Score: %s", result.getText())); + } + + // individual scores + extractSectionResults6("3d"); + extractSectionResults6("ux"); + extractSectionResults6("cpu"); + extractSectionResults6("ram"); + } + + public void extractSectionResults6(String section) throws Exception { + UiSelector selector = new UiSelector(); + UiObject resultLayout = new UiObject(selector.resourceId("com.antutu.ABenchMark:id/hcf_" + section)); + UiObject result = resultLayout.getChild(selector.resourceId("com.antutu.ABenchMark:id/tv_score_value")); + + if (result.exists()) { + Log.v(TAG, String.format("ANTUTU RESULT: %s Score: %s", section, result.getText())); + } + } + public void extractResults() throws Exception { extractOverallResult(); extractSectionResults();