mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-20 11:58:55 +00:00
commit
ffc3fcef67
@ -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
|
||||
|
@ -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:
|
||||
|
Binary file not shown.
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user