blob: 92e7ded862f71292316f70dc176a2b35a99ffbda [file] [log] [blame]
import json
import time
from common import ApkTestRunner
from com.dtmilano.android.viewclient import ViewNotFoundException
class ApkRunnerImpl(ApkTestRunner):
def __init__(self, config):
self.config = config
self.config["apk_file_name"] = "com.quicinc.vellamo-3.apk"
self.config["apk_package"] = "com.quicinc.vellamo"
self.config["activity"] = "com.quicinc.vellamo/.main.MainActivity"
super(ApkRunnerImpl, self).__init__(self.config)
def choose_chapter(self, chapter_name):
# ToDo: scroll screen if chapter is not found on the first screen
self.dump_always()
scroll = self.vc.findViewWithText("""LET'S ROLL""")
if scroll:
print("Click LET'S ROLL")
scroll.touch()
chapter_tab = None
self.dump_always()
while chapter_tab is None:
gotit_button = self.vc.findViewWithText("GOT IT")
if gotit_button:
print("Click GOT IT")
gotit_button.touch()
else:
print("press DPAD_DOWN")
self.device.press("DPAD_DOWN")
self.dump_always()
chapter_tab = self.vc.findViewWithText(chapter_name)
enclosing_tab = chapter_tab.getParent().getParent()
for child in enclosing_tab.children:
if child.getClass() == "android.widget.FrameLayout":
for subchild in child.children:
if (
subchild.getId()
== "com.quicinc.vellamo:id/card_launcher_run_button"
):
subchild.touch()
break
def execute(self):
need_continue = True
while need_continue:
self.dump_always()
btn_setup_1 = self.vc.findViewById("android:id/button1")
btn_settings = self.vc.findViewById(
"com.quicinc.vellamo:id/main_toolbar_wheel"
)
btn_animations = self.vc.findViewWithText(
"Make Vellamo even more beautiful"
)
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")
if btn_setup_1:
# Accept Vellamo EULA
btn_setup_1.touch()
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 btn_settings:
# Open settings
btn_settings.touch()
elif btn_animations:
# Disable animations
btn_animations.touch()
need_continue = False
# Back to the home screen
self.device.press("KEYCODE_BACK")
self.logger.info("Benchmark started now")
chapters = ["Browser", "Multicore", "Metal"]
for chapter in chapters:
self.choose_chapter(chapter)
# Start benchmark
self.dump_always()
try:
gotit_button = self.vc.findViewWithText("GOT IT")
if gotit_button:
gotit_button.touch()
except ViewNotFoundException:
self.report_result("vellamo3-%s" % chapter, "fail")
self.logger.error(
"Start button for chapter %s NOT found, moving to the next chapter..."
)
continue
# Wait while Vellamo is running benchmark
finished = False
while not finished:
time.sleep(1)
try:
self.dump_always()
goback_btn = self.vc.findViewById(
"com.quicinc.vellamo:id/main_toolbar_goback_button"
)
if goback_btn:
goback_btn.touch()
time.sleep(5)
finished = True
except ViewNotFoundException:
pass
except RuntimeError as e:
print(e)
except ValueError as ve:
print(ve)
self.logger.info("Benchmark finished: %s" % chapter)
self.device.press("KEYCODE_BACK")
time.sleep(5)
self.device.press("KEYCODE_BACK")
def parseResult(self):
raw_result_file = "%s/chapterscores-itr%s.json" % (
self.config["output"],
self.config["itr"],
)
self.call_adb(
"pull /data/data/com.quicinc.vellamo/files/chapterscores.json %s"
% raw_result_file
)
default_unit = "Points"
# This is one-line file, read it in a whole
fileopen = open(raw_result_file, "r")
jsoncontent = json.load(fileopen)
result_flag = "benchmark_results"
chapter_flag = "chapter_name"
total_score = 0
for item in jsoncontent:
if result_flag and chapter_flag in item.keys():
chapter = item[chapter_flag]
chapter_total = 0
self.logger.info(
"%s test result found in category: %s"
% (str(len(item[result_flag])), chapter)
)
for elem in item[result_flag]:
if (
"failed" in elem.keys()
and "id" in elem.keys()
and "score" in elem.keys()
):
# Pick up the result
if elem["failed"] is False:
result = "pass"
else:
result = "fail"
# Pick up the full test name
testcase = chapter + "-" + elem["id"]
# Pick up the test score
score = elem["score"]
# Submit the result to LAVA
self.report_result(
"vellamo3-" + testcase, result, str(score), default_unit
)
chapter_total = chapter_total + score
else:
print("Corrupted test result found, please check it manually.")
print(
"A valid test result must contain id, score and pass/fail status."
)
self.report_result(
"vellamo3-" + chapter + "-total",
"pass",
str(chapter_total),
default_unit,
)
total_score = total_score + chapter_total
else:
print(
"Cannot find %s or %s in test result dictionary. Please check it manually."
% (result_flag, chapter_flag)
)
fileopen.close()
self.report_result(
"vellamo3-total-score", "pass", str(total_score), default_unit
)