# Released under the MIT License. See LICENSE for details.
#
"""UIs for debugging purposes."""
from __future__ import annotations
import logging
from typing import cast
import bauiv1 as bui
[docs]
class DebugWindow(bui.Window):
"""Window for debugging internal values."""
def __init__(self, transition: str | None = 'in_right'):
# pylint: disable=too-many-statements
# pylint: disable=cyclic-import
from bauiv1lib import popup
assert bui.app.classic is not None
bui.app.ui_v1.set_main_menu_location('Benchmarks & Stress Tests')
uiscale = bui.app.ui_v1.uiscale
self._width = width = 580
self._height = height = (
350
if uiscale is bui.UIScale.SMALL
else 420 if uiscale is bui.UIScale.MEDIUM else 520
)
self._scroll_width = self._width - 100
self._scroll_height = self._height - 120
self._sub_width = self._scroll_width * 0.95
self._sub_height = 520
self._stress_test_game_type = 'Random'
self._stress_test_playlist = '__default__'
self._stress_test_player_count = 8
self._stress_test_round_duration = 30
self._r = 'debugWindow'
uiscale = bui.app.ui_v1.uiscale
super().__init__(
root_widget=bui.containerwidget(
size=(width, height),
transition=transition,
scale=(
2.35
if uiscale is bui.UIScale.SMALL
else 1.55 if uiscale is bui.UIScale.MEDIUM else 1.0
),
stack_offset=(
(0, -30) if uiscale is bui.UIScale.SMALL else (0, 0)
),
)
)
self._done_button = btn = bui.buttonwidget(
parent=self._root_widget,
position=(40, height - 67),
size=(120, 60),
scale=0.8,
autoselect=True,
label=bui.Lstr(resource='doneText'),
on_activate_call=self._done,
)
bui.containerwidget(edit=self._root_widget, cancel_button=btn)
bui.textwidget(
parent=self._root_widget,
position=(0, height - 60),
size=(width, 30),
text=bui.Lstr(resource=self._r + '.titleText'),
h_align='center',
color=bui.app.ui_v1.title_color,
v_align='center',
maxwidth=260,
)
self._scrollwidget = bui.scrollwidget(
parent=self._root_widget,
highlight=False,
size=(self._scroll_width, self._scroll_height),
position=((self._width - self._scroll_width) * 0.5, 50),
)
bui.containerwidget(edit=self._scrollwidget, claims_left_right=True)
self._subcontainer = bui.containerwidget(
parent=self._scrollwidget,
size=(self._sub_width, self._sub_height),
background=False,
)
v = self._sub_height - 70
button_width = 300
btn = bui.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60),
autoselect=True,
label=bui.Lstr(resource=self._r + '.runCPUBenchmarkText'),
on_activate_call=self._run_cpu_benchmark_pressed,
)
bui.widget(
edit=btn, up_widget=self._done_button, left_widget=self._done_button
)
v -= 60
bui.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60),
autoselect=True,
label=bui.Lstr(resource=self._r + '.runGPUBenchmarkText'),
on_activate_call=self._run_gpu_benchmark_pressed,
)
v -= 60
bui.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60),
autoselect=True,
label=bui.Lstr(resource=self._r + '.runMediaReloadBenchmarkText'),
on_activate_call=self._run_media_reload_benchmark_pressed,
)
v -= 60
bui.textwidget(
parent=self._subcontainer,
position=(self._sub_width * 0.5, v + 22),
size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestTitleText'),
maxwidth=200,
color=bui.app.ui_v1.heading_color,
scale=0.85,
h_align='center',
v_align='center',
)
v -= 45
x_offs = 165
bui.textwidget(
parent=self._subcontainer,
position=(x_offs - 10, v + 22),
size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlaylistTypeText'),
maxwidth=130,
color=bui.app.ui_v1.heading_color,
scale=0.65,
h_align='right',
v_align='center',
)
popup.PopupMenu(
parent=self._subcontainer,
position=(x_offs, v),
width=150,
choices=['Random', 'Teams', 'Free-For-All'],
choices_display=[
bui.Lstr(resource=a)
for a in [
'randomText',
'playModes.teamsText',
'playModes.freeForAllText',
]
],
current_choice='Auto',
on_value_change_call=self._stress_test_game_type_selected,
)
v -= 46
bui.textwidget(
parent=self._subcontainer,
position=(x_offs - 10, v + 22),
size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlaylistNameText'),
maxwidth=130,
color=bui.app.ui_v1.heading_color,
scale=0.65,
h_align='right',
v_align='center',
)
self._stress_test_playlist_name_field = bui.textwidget(
parent=self._subcontainer,
position=(x_offs + 5, v - 5),
size=(250, 46),
text=self._stress_test_playlist,
h_align='left',
v_align='center',
autoselect=True,
color=(0.9, 0.9, 0.9, 1.0),
description=bui.Lstr(
resource=self._r + '.stressTestPlaylistDescriptionText'
),
editable=True,
padding=4,
)
v -= 29
x_sub = 60
# Player count.
bui.textwidget(
parent=self._subcontainer,
position=(x_offs - 10, v),
size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlayerCountText'),
color=(0.8, 0.8, 0.8, 1.0),
h_align='right',
v_align='center',
scale=0.65,
maxwidth=130,
)
self._stress_test_player_count_text = bui.textwidget(
parent=self._subcontainer,
position=(246 - x_sub, v - 14),
size=(60, 28),
editable=False,
color=(0.3, 1.0, 0.3, 1.0),
h_align='right',
v_align='center',
text=str(self._stress_test_player_count),
padding=2,
)
bui.buttonwidget(
parent=self._subcontainer,
position=(330 - x_sub, v - 11),
size=(28, 28),
label='-',
autoselect=True,
on_activate_call=bui.Call(self._stress_test_player_count_decrement),
repeat=True,
enable_sound=True,
)
bui.buttonwidget(
parent=self._subcontainer,
position=(380 - x_sub, v - 11),
size=(28, 28),
label='+',
autoselect=True,
on_activate_call=bui.Call(self._stress_test_player_count_increment),
repeat=True,
enable_sound=True,
)
v -= 42
# Round duration.
bui.textwidget(
parent=self._subcontainer,
position=(x_offs - 10, v),
size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestRoundDurationText'),
color=(0.8, 0.8, 0.8, 1.0),
h_align='right',
v_align='center',
scale=0.65,
maxwidth=130,
)
self._stress_test_round_duration_text = bui.textwidget(
parent=self._subcontainer,
position=(246 - x_sub, v - 14),
size=(60, 28),
editable=False,
color=(0.3, 1.0, 0.3, 1.0),
h_align='right',
v_align='center',
text=str(self._stress_test_round_duration),
padding=2,
)
bui.buttonwidget(
parent=self._subcontainer,
position=(330 - x_sub, v - 11),
size=(28, 28),
label='-',
autoselect=True,
on_activate_call=bui.Call(
self._stress_test_round_duration_decrement
),
repeat=True,
enable_sound=True,
)
bui.buttonwidget(
parent=self._subcontainer,
position=(380 - x_sub, v - 11),
size=(28, 28),
label='+',
autoselect=True,
on_activate_call=bui.Call(
self._stress_test_round_duration_increment
),
repeat=True,
enable_sound=True,
)
v -= 82
btn = bui.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60),
autoselect=True,
label=bui.Lstr(resource=self._r + '.runStressTestText'),
on_activate_call=self._stress_test_pressed,
)
bui.widget(btn, show_buffer_bottom=50)
def _stress_test_player_count_decrement(self) -> None:
self._stress_test_player_count = max(
1, self._stress_test_player_count - 1
)
bui.textwidget(
edit=self._stress_test_player_count_text,
text=str(self._stress_test_player_count),
)
def _stress_test_player_count_increment(self) -> None:
self._stress_test_player_count = self._stress_test_player_count + 1
bui.textwidget(
edit=self._stress_test_player_count_text,
text=str(self._stress_test_player_count),
)
def _stress_test_round_duration_decrement(self) -> None:
self._stress_test_round_duration = max(
10, self._stress_test_round_duration - 10
)
bui.textwidget(
edit=self._stress_test_round_duration_text,
text=str(self._stress_test_round_duration),
)
def _stress_test_round_duration_increment(self) -> None:
self._stress_test_round_duration = self._stress_test_round_duration + 10
bui.textwidget(
edit=self._stress_test_round_duration_text,
text=str(self._stress_test_round_duration),
)
def _stress_test_game_type_selected(self, game_type: str) -> None:
self._stress_test_game_type = game_type
def _run_cpu_benchmark_pressed(self) -> None:
if bui.app.classic is None:
logging.warning('run-cpu-benchmark requires classic')
return
bui.app.classic.run_cpu_benchmark()
def _run_gpu_benchmark_pressed(self) -> None:
if bui.app.classic is None:
logging.warning('run-gpu-benchmark requires classic')
return
bui.app.classic.run_gpu_benchmark()
def _run_media_reload_benchmark_pressed(self) -> None:
if bui.app.classic is None:
logging.warning('run-media-reload-benchmark requires classic')
return
bui.app.classic.run_media_reload_benchmark()
def _stress_test_pressed(self) -> None:
if bui.app.classic is None:
logging.warning('stress-test requires classic')
return
bui.app.classic.run_stress_test(
playlist_type=self._stress_test_game_type,
playlist_name=cast(
str, bui.textwidget(query=self._stress_test_playlist_name_field)
),
player_count=self._stress_test_player_count,
round_duration=self._stress_test_round_duration,
)
bui.containerwidget(edit=self._root_widget, transition='out_right')
def _done(self) -> None:
# pylint: disable=cyclic-import
from bauiv1lib.settings.advanced import AdvancedSettingsWindow
# no-op if our underlying widget is dead or on its way out.
if not self._root_widget or self._root_widget.transitioning_out:
return
bui.containerwidget(edit=self._root_widget, transition='out_right')
assert bui.app.classic is not None
bui.app.ui_v1.set_main_menu_window(
AdvancedSettingsWindow(transition='in_left').get_root_widget(),
from_window=self._root_widget,
)