Files
EOJHL-LED-Scoreboard/test_transition.py
2026-02-13 12:22:06 -05:00

88 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# src/test_transition.py
import time
import psutil
from PIL import Image
from src.display_manager import DisplayManager
from src.config_manager import ConfigManager
PRESETS = {
"snappy": {
"type": "fade",
"fade_duration": 0.3,
"fade_steps": 5,
"easing": True
},
"cinematic": {
"type": "fade",
"fade_duration": 0.8,
"fade_steps": 12,
"easing": True
},
"lightweight": {
"type": "fade",
"fade_duration": 0.4,
"fade_steps": 4,
"easing": False
},
"cut": {
"type": "cut",
"cut_duration": 0.2
}
}
def benchmark_transition(dm, transition_func, *args, **kwargs):
psutil.cpu_percent(interval=None)
start = time.time()
transition_func(*args, **kwargs)
end = time.time()
cpu = psutil.cpu_percent(interval=None)
print(f"{transition_func.__name__} took {end - start:.2f}s, CPU ~{cpu:.1f}%")
def show_frame(dm, color, hold=0.5):
frame = Image.new("RGB", (dm.width, dm.height), color)
dm.image.paste(frame)
dm.update_display()
time.sleep(hold)
def run_preset(name, settings, dm):
print(f"\n=== Testing preset: {name} ===")
show_frame(dm, (255, 0, 0), hold=0.5) # red start
if settings["type"] == "fade":
dur = settings.get("fade_duration", 0.4)
steps = settings.get("fade_steps", 6)
easing = settings.get("easing", True)
benchmark_transition(dm, dm.fade_out, duration=dur, steps=steps, easing=easing)
show_frame(dm, (0, 0, 255), hold=0.0) # blue
benchmark_transition(dm, dm.fade_in, duration=dur, steps=steps, easing=easing)
elif settings["type"] == "cut":
dur = settings.get("cut_duration", 0.2)
benchmark_transition(dm, dm.cut_to_black, duration=dur)
show_frame(dm, (0, 0, 255), hold=0.5) # blue
# After each preset, hold a 2second black screen
show_frame(dm, (0, 0, 0), hold=2.0)
def main():
config = ConfigManager().load_config()
dm = DisplayManager(config)
# Loop through all presets twice for stress test
for cycle in range(2):
print(f"\n### Cycle {cycle+1} ###")
for name, settings in PRESETS.items():
run_preset(name, settings, dm)
print("\nAll presets tested.")
if __name__ == "__main__":
main()