blob: 51c4936ebf91d29725702602132dc1ebf3da520f [file] [log] [blame]
import sys
import time
import xml.dom.minidom
from common import ApkTestRunner
class ApkRunnerImpl(ApkTestRunner):
def __init__(self, config):
self.config = config
self.config["apk_file_name"] = "GLBenchmark_2.5.1.apk"
self.config["apk_package"] = "com.glbenchmark.glbenchmark25"
self.config["activity"] = (
"com.glbenchmark.glbenchmark25/com.glbenchmark.activities.GLBenchmarkDownloaderActivity"
)
super(ApkRunnerImpl, self).__init__(self.config)
def setUp(self):
# set to peformance governor policay
# self.set_performance_governor()
# download apk related files
self.download_apk("main.1.com.glbenchmark.glbenchmark25.obb")
self.download_apk(self.config["apk_file_name"])
self.uninstall_apk(self.config["apk_package"])
self.install_apk(self.config["apk_file_name"])
# Push data and config files.
self.logger.info(
"Pushing main.1.com.glbenchmark.glbenchmark25.obb to target..."
)
self.call_adb(
"push %s/main.1.com.glbenchmark.glbenchmark25.obb /sdcard/Android/obb/com.glbenchmark.glbenchmark25/main.1.com.glbenchmark.glbenchmark25.obb"
% self.config["apk_dir"]
)
self.logger.info("Pushing glbenchmark25-preferences.xml to target...")
self.call_adb(
"push ./glbenchmark25-preferences.xml /data/data/com.glbenchmark.glbenchmark25/shared_prefs/com.glbenchmark.glbenchmark25_preferences.xml"
)
# Clear logcat buffer.
self.call_adb("logcat -c")
self.call_adb("logcat -b events -c")
time.sleep(3)
# Start intent.
self.logger.info("Starting %s" % self.config["apk_package"])
self.call_adb("shell am start -W -S %s" % self.config["activity"])
def execute(self):
selected_all = False
while not selected_all:
self.dump_always()
select_all_btn = self.vc.findViewWithText("All")
display_tests_menu = self.vc.findViewWithText("Performance Tests")
warn_msg = self.vc.findViewWithText(
"This app was built for an older version of Android and may not work properly. Try checking for updates, or contact the developer."
)
continue_btn = self.vc.findViewWithText("CONTINUE")
attention_msg = self.vc.findViewWithText(
"""Network connection not found!
Do you want to setup network connection? (If you can not upload the results you will not see it)"""
)
if select_all_btn:
select_all_btn.touch()
self.logger.info("All selected!")
selected_all = True
elif display_tests_menu:
display_tests_menu.touch()
self.logger.info("Display all tests to select all")
elif warn_msg:
self.logger.info("Older version warning popped up")
warning_ok_btn = self.vc.findViewWithTextOrRaise("OK")
warning_ok_btn.touch()
elif continue_btn:
continue_btn.touch()
elif attention_msg:
self.report_result("glbenchmark25-run", "fail")
self.logger.info("Network connection is required")
sys.exit(1)
else:
# continue
pass
# Disable crashed test suites
self.dump_always()
crashed_test_name = "C24Z24MS4"
self.logger.info("Test suite %s is going to be disabled!" % crashed_test_name)
crashed_test = self.vc.findViewWithText(crashed_test_name)
if crashed_test is not None:
crashed_test.touch()
self.logger.info("Test suite %s has been excluded!" % crashed_test_name)
else:
self.logger.info(
"Can not find test suite %s, please check the screen!"
% crashed_test_name
)
# Start selected test suites
self.dump_always()
start_button = self.vc.findViewByIdOrRaise(
"com.glbenchmark.glbenchmark25:id/buttonStart"
)
start_button.touch()
finished = False
while not finished:
time.sleep(120)
self.dump_always()
flag = self.vc.findViewWithText("Result processing")
if flag is not None:
self.logger.info("GLBenchmark Test Finished.")
finished = True
# Give up the result upload
cancel_button = self.vc.findViewWithText("Cancel")
if cancel_button is not None:
cancel_button.touch()
time.sleep(5)
else:
self.logger.error(
"Can not find cancel button! Please check the pop up window!"
)
else:
self.logger.info("GLBenchmark Test is still in progress...")
def getText(self, node):
children = node.childNodes
rc = []
for node in children:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return "".join(rc)
def logparser(self, cached_result_file):
run_result = "pass"
dom = xml.dom.minidom.parse(cached_result_file)
results = dom.getElementsByTagName("test_result")
for test in results:
title = self.getText(test.getElementsByTagName("title")[0])
test_type = self.getText(test.getElementsByTagName("type")[0])
score_number = self.getText(test.getElementsByTagName("score")[0])
fps = self.getText(test.getElementsByTagName("fps")[0])
score_unit = self.getText(test.getElementsByTagName("uom")[0])
benchmark_name = (
title.replace(" ", "-").replace(":", "")
+ "-"
+ test_type.replace(" ", "-").replace(":", "")
)
self.report_result(benchmark_name, run_result, score_number, score_unit)
if fps != "":
score_number = fps.split(" ")[0]
score_unit = fps.split(" ")[1]
self.report_result(benchmark_name, run_result, score_number, score_unit)
def parseResult(self):
cached_result_file = "%s/last-results-2.5.1-itr%s.xml" % (
self.config["output"],
self.config["itr"],
)
self.logger.info(
"pull /data/data/com.glbenchmark.glbenchmark25/cache/last_results_2.5.1.xml to output directory..."
)
self.call_adb(
"pull /data/data/com.glbenchmark.glbenchmark25/cache/last_results_2.5.1.xml %s"
% cached_result_file
)
self.logparser(cached_result_file)