Skip to content

Commit

Permalink
refactored tests to be easier to read and make it simpler to run as w…
Browse files Browse the repository at this point in the history
…ell with added sites and cpu frequency added to the readings
  • Loading branch information
MarcLeclair committed Dec 3, 2024
1 parent 5fd8af8 commit 43426bd
Show file tree
Hide file tree
Showing 1,852 changed files with 51,776 additions and 201 deletions.
Binary file added battery_test/.DS_Store
Binary file not shown.
69 changes: 43 additions & 26 deletions battery_test/battery_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import threading
import queue
import signal

import platform

def run_adb_command(command, serialID=None):
if serialID is None:
Expand Down Expand Up @@ -45,6 +45,22 @@ def get_battery_status(serialID=None):
current_charge = run_adb_command("cat /sys/class/power_supply/battery/charge_counter", serialID)
return battery_level, current_charge

def get_cpu_frequencies(serialID=None):
frequencies = {}

try:
cpu_count = len(run_adb_command("ls /sys/devices/system/cpu/ | grep -E '^cpu[0-9]+'", serialID).splitlines())
for i in range(cpu_count):
try:
freq = run_adb_command(f"cat /sys/devices/system/cpu/cpu{i}/cpufreq/scaling_cur_freq", serialID).strip()
freq_mhz = int(freq) / 1000
frequencies[f"CPU{i}"] = freq_mhz
except subprocess.CalledProcessError:
frequencies[f"CPU{i}"] = "offline"
except subprocess.CalledProcessError as e:
print(f"Error getting CPU frequencies: {e}")
return {}
return frequencies

def capture_processes(serialID=None):
process_output = run_adb_command("top -b -n 1 | grep -E '^[0-9]'", serialID)
Expand Down Expand Up @@ -94,7 +110,6 @@ def fetch_temperatures(component_names, serialID=None):

def signal_handler(sig, frame):
print('SIGINT received. Exiting...')
# Perform any necessary cleanup actions here (e.g., close files, save data)
sys.exit(0)


Expand All @@ -111,12 +126,16 @@ def main(directory, filename, package, activity, duration, components, serialID,
browsertime_cmd = (
"browsertime "
"-b firefox --android "
f"--firefox.geckodriverPath {os.path.expanduser('~/Repositories/mozilla-unified/target/debug/geckodriver')}"
"--firefox.android.deviceSerial 192.168.2.118:5555 "
"--firefox.android.intentArgument=--ez "
"--firefox.android.intentArgument=performancetest "
"--firefox.android.intentArgument=true "
f"--firefox.geckodriverPath {os.path.expanduser('~/Repositories/mozilla-unified/target/debug/geckodriver')} "
"--firefox.android.package org.mozilla.firefox "
"--firefox.android.activity org.mozilla.fenix.IntentReceiverActivity "
"--firefox.geckodriverArgs=\"--android-storage\" "
"--firefox.geckodriverArgs=\"sdcard\" "
"test.mjs "
"./tests/browsertime/test.mjs "
"-n 1 --maxLoadTime 60000 -vvv "
"--pageCompleteCheck 'return true;'")
browsertime_process = start_browsertime_command(browsertime_cmd)
Expand All @@ -131,6 +150,8 @@ def main(directory, filename, package, activity, duration, components, serialID,
logging_started = True
print("adb start do nothing")
components_names = get_component_names(components, serialID)
print("components_names")
print(components_names)
total_duration = round(int(duration) / 15) * 15
num_iterations = total_duration // 15
with open(output_path, 'w+') as file:
Expand All @@ -149,11 +170,19 @@ def main(directory, filename, package, activity, duration, components, serialID,
battery_level, charge_counter = get_battery_status(serialID)
current_processes = capture_processes(serialID)
temperatures = fetch_temperatures(components_names, serialID)
cpu_frequencies = get_cpu_frequencies(serialID)
file.write(f"[{(iteration + 1) * 15} seconds]\n")

file.write("-Battery info:\n")
file.write(f" Battery level: {battery_level}\n")
file.write(f" Charge Counter: {charge_counter}\n")

file.write("-CPU Frequencies:\n")
for cpu, freq in cpu_frequencies.items():
if isinstance(freq, (int, float)):
file.write(f" {cpu}: {freq:.0f} MHz\n")
else:
file.write(f" {cpu}: {freq}\n")
print(f" Battery level: {battery_level}\n")
print(f" Charge Counter: {charge_counter}\n")
file.write("-Temperature of components:\n")
Expand All @@ -170,7 +199,6 @@ def main(directory, filename, package, activity, duration, components, serialID,
print(f'finished iteration {iteration} and spent {iteration * 15} seconds')
time.sleep(15)

# Check if browsertime process has ended and stop logging if so
if browsertime_process and browsertime_process.poll() is not None:
logging_started = False
break
Expand All @@ -180,35 +208,24 @@ def main(directory, filename, package, activity, duration, components, serialID,
if browsertime_process is not None:
browsertime_process.kill()


if __name__ == "__main__":
signal.signal(signal.SIGINT, signal_handler)
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('output_directory', type=str, help='Output directory path')
parser.add_argument('output_filename', type=str, help='Output filename')

if "--start_method" in sys.argv and sys.argv[sys.argv.index("--start_method") + 1] == "manual":
parser.add_argument('package_name', type=str, help='Android package name (required for manual start)')
parser.add_argument('activity_name', type=str, help='Activity name (required for manual start)')
parser.add_argument('components', nargs='*', help='Optional list of components', default=[])
else:
parser.add_argument('--package_name', type=str, help='Android package name (optional for browsertime)')
parser.add_argument('--activity_name', type=str, help='Activity name (optional for browsertime)')
parser.add_argument('--components', nargs='*', help='Optional list of components', default=[])

parser.add_argument('duration_seconds', type=int, help='Duration in seconds')
parser.add_argument('--serialID', type=str, help='Optional serial ID', default=None)
parser.add_argument(
'--start_method',
type=str,
choices=[
'browsertime',
'manual',
'adb'],
default='browsertime',
help='Method to start the app')
parser.add_argument('--start_method', type=str, choices=['browsertime', 'manual', 'adb'], default='browsertime', help='Method to start the app')

parser.add_argument('--package_name', type=str, help='Android package name (optional for browsertime)', default=None)
parser.add_argument('--activity_name', type=str, help='Activity name (optional for browsertime)', default=None)
parser.add_argument('--components', nargs='*', help='Optional list of components', default=[])

args = parser.parse_args()

if args.start_method == "manual":
if not args.package_name or not args.activity_name:
parser.error('package_name and activity_name are required for manual start method')

main(args.output_directory, args.output_filename, args.package_name, args.activity_name,
args.duration_seconds, args.components, args.serialID, args.start_method)
args.duration_seconds, args.components, args.serialID, args.start_method)
2 changes: 1 addition & 1 deletion battery_test/batterytest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function capture_processes() {


function compare_and_log_changes() {
if [ -f "$LAST_PROCESS_SNAPSHOT" ]; thenz
if [ -f "$LAST_PROCESS_SNAPSHOT" ]; then
echo "Running tasks with changed times:"
awk 'NR==FNR {a[$1] = $4; next} ($1 in a) && (a[$1] != $4)' "$LAST_PROCESS_SNAPSHOT" "$CURRENT_PROCESS_SNAPSHOT" | \
awk '{print " Name:", $2, "| CPU%:", $3, "| Time:", $4}'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
9 changes: 9 additions & 0 deletions battery_test/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"firefox": {
"android": {
"package": "org.mozilla.firefox",
"activity": "org.mozilla.fenix.IntentReceiverActivity",
"intentArgument": "-e performancetest true"
}
}
}
50 changes: 50 additions & 0 deletions battery_test/convert.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import re
import datetime

def parse_and_format_file(input_file, output_file):
with open(input_file, 'r') as file:
lines = file.readlines()

battery_info_pattern = re.compile(r'Battery level: (\d+)|Charge Counter: (\d+)')
running_tasks_pattern = re.compile(r'Name: ([^|]+) \| CPU%: (\d+\.\d+) \| Time: (\d+:\d+\.\d+)')
timestamp_pattern = re.compile(r'Timestamp: (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+N)')

output_lines = [
"Components ['GPU', 'CPU'] matched to these names {'GPU': ['G3D'], 'CPU': ['BIG', 'MID', 'LITTLE']}\n"
]

time_intervals = 15 # Start with 15 seconds
current_battery_level = None
current_charge_counter = None
running_tasks = []

for line in lines:
battery_match = battery_info_pattern.search(line)
task_match = running_tasks_pattern.search(line)
timestamp_match = timestamp_pattern.search(line)

if battery_match:
if battery_match.group(1):
current_battery_level = battery_match.group(1)
if battery_match.group(2):
current_charge_counter = battery_match.group(2)

elif task_match:
running_tasks.append(f" Name: {task_match.group(1).strip()} | CPU%: {task_match.group(2)} | Time: {task_match.group(3)}\n")

elif timestamp_match:
if current_battery_level and current_charge_counter:
output_lines.append(f"\n[{time_intervals} seconds]\n")
output_lines.append(f"-Battery info:\n Battery level: {current_battery_level}\n Charge Counter: {current_charge_counter}\n")
output_lines.append("-Running processes:\n")
output_lines.extend(running_tasks)
running_tasks.clear()
time_intervals += 15

with open(output_file, 'w') as file:
file.writelines(output_lines)

# Use the function
input_file = '../chrome_test/s21_output_chrome_video.txt'
output_file = '../chrome_test/s21_output_chrome_video_playback.txt'
parse_and_format_file(input_file, output_file)
Binary file added battery_test/firefox.default/.DS_Store
Binary file not shown.
Binary file not shown.
Empty file.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions battery_test/firefox.default/9iksvnsh.default/addons.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"schema":6,"addons":[]}
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[Compatibility]
LastVersion=133.0_20241121140525/20241121140525
LastOSABI=Android_aarch64-gcc3
LastPlatformDir=/data/app/~~bOrHYvlXuPDJtvfksMEaww==/org.mozilla.firefox-1PyCqPRtBgjLuUiUZkz-dQ==/base.apk
LastAppDir=/data/app/~~bOrHYvlXuPDJtvfksMEaww==/org.mozilla.firefox-1PyCqPRtBgjLuUiUZkz-dQ==/lib/arm64
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"version":2,"clientID":"df3e3cf9-2f62-4c33-ac6b-9307274f5b66","profileGroupID":"cde92cee-f84e-4b70-8b0a-7ca9d457a1d1"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]},"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]},"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]},"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]},"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]},"[email protected]":{"permissions":["internal:privateBrowsingAllowed","internal:svgContextPropertiesAllowed"],"origins":[]}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"schemaVersion":36,"addons":[{"id":"[email protected]","syncGUID":"{c9599a1a-dccd-4d62-903b-75d933b62186}","version":"133.0.20241121.182324","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Mozilla Android Components - Browser Icons","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901230065,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["geckoViewAddons","nativeMessaging","nativeMessagingFromContent"],"origins":["*://*/*"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/browser-icons/","location":"app-builtin"},{"id":"[email protected]","syncGUID":"{b41a0edc-5740-4c5b-b45a-72e69e8a681d}","version":"133.4.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Web Compatibility Interventions","description":"Urgent post-release fixes for web compatibility.","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901230101,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":"102.0","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["mozillaAddons","scripting","tabs","webNavigation","webRequest","webRequestBlocking"],"origins":["<all_urls>"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/webcompat/","location":"app-builtin"},{"id":"[email protected]","syncGUID":"{d110866f-e1de-4149-a37d-d8da6fb15524}","version":"133.0.20241121.182351","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Mozilla Android Components - Ads Telemetry","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901230216,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["geckoViewAddons","nativeMessaging","nativeMessagingFromContent"],"origins":["https://*/*"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/ads/","location":"app-builtin"},{"id":"[email protected]","syncGUID":"{0672c34d-67fb-45ae-9c29-41a201ef7f10}","version":"133.0.20241121.182351","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Mozilla Android Components - Search Telemetry","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901230235,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["geckoViewAddons","nativeMessaging","nativeMessagingFromContent"],"origins":["https://*/*"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/search/","location":"app-builtin"},{"id":"[email protected]","syncGUID":"{b5f821ee-df7a-4dbf-b403-583c8ce7d184}","version":"133.0.20241121.182328","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Mozilla Android Components - Firefox Accounts WebChannel","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901236841,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["mozillaAddons","geckoViewAddons","nativeMessaging","nativeMessagingFromContent"],"origins":["<all_urls>","https://accounts.firefox.com/*","https://stable.dev.lcip.org/*","https://accounts.stage.mozaws.net/*","https://latest.dev.lcip.org/*","https://accounts.firefox.com.cn/*"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/fxawebchannel/","location":"app-builtin"},{"id":"[email protected]","syncGUID":"{6531621d-a666-4956-ab35-4bacb0aa351e}","version":"133.0.20241121.182331","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Mozilla Android Components - ReaderView","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1732901236857,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"[email protected]","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["mozillaAddons","geckoViewAddons","nativeMessaging","nativeMessagingFromContent","storage","tabs"],"origins":["<all_urls>"]},"optionalPermissions":{"permissions":[],"origins":[]},"requestedPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://android/assets/extensions/readerview/","location":"app-builtin"}]}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit 43426bd

Please sign in to comment.