78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||
|
|
||
|
import argparse
|
||
|
import os
|
||
|
import subprocess
|
||
|
import webbrowser
|
||
|
|
||
|
DESCRIPTION = """ This script is made to run benchmark tests on Fenix. It'll open
|
||
|
the JSON output file in firefox (or another browser of your choice if you pass the string in)
|
||
|
"""
|
||
|
|
||
|
ff_browser = "firefox"
|
||
|
target_directory = "{cwd}/app/build/".format(cwd=os.getcwd())
|
||
|
output_path = "/storage/emulated/0/benchmark/"
|
||
|
output_file = "org.mozilla.fenix-benchmarkData.json"
|
||
|
file_url = "file:///"
|
||
|
|
||
|
|
||
|
def parse_args():
|
||
|
parser = argparse.ArgumentParser(description=DESCRIPTION)
|
||
|
parser.add_argument(
|
||
|
"class_to_test",
|
||
|
help="Path to the class to test. Format it as 'org.mozilla.fenix.[path_to_benchmark_test",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"--open_file_in_browser",
|
||
|
help="Open the JSON file in the browser once the tests are done.",
|
||
|
)
|
||
|
return parser.parse_args()
|
||
|
|
||
|
|
||
|
def run_benchmark(class_to_test):
|
||
|
args = ["./gradlew", "-Pbenchmark", "app:connectedCheck"]
|
||
|
if class_to_test:
|
||
|
args.append(
|
||
|
"-Pandroid.testInstrumentationRunnerArguments.class={clazz}".format(
|
||
|
clazz=class_to_test
|
||
|
)
|
||
|
)
|
||
|
subprocess.run(args, check=True, text=True)
|
||
|
|
||
|
|
||
|
def fetch_benchmark_results():
|
||
|
subprocess.run(
|
||
|
["adb", "pull", "{path}{file}".format(path=output_path, file=output_file)],
|
||
|
cwd=target_directory,
|
||
|
check=True,
|
||
|
text=True,
|
||
|
)
|
||
|
print(
|
||
|
"The benchmark results can be seen here: {file_path}".format(
|
||
|
file_path=os.path.abspath("./{file}".format(file=file_url))
|
||
|
)
|
||
|
)
|
||
|
|
||
|
|
||
|
def open_in_browser():
|
||
|
abs_path = os.path.abspath(
|
||
|
"{target_directory}{file}".format(
|
||
|
target_directory=target_directory, file=output_file
|
||
|
)
|
||
|
)
|
||
|
webbrowser.get(ff_browser).open_new(file_url + abs_path)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
args = parse_args()
|
||
|
run_benchmark(args.class_to_test)
|
||
|
fetch_benchmark_results()
|
||
|
if args.open_file_in_browser:
|
||
|
open_in_browser()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|