From dcbe0949a218df0dae8e3cdc85f62a2236cbeae7 Mon Sep 17 00:00:00 2001 From: Serge Bazanski <q3k@q3k.org> Date: Sun, 4 Jun 2023 15:26:01 +0200 Subject: [PATCH] demo_worms: add primitive frame limiter --- python_payload/demo_worms.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/python_payload/demo_worms.py b/python_payload/demo_worms.py index 87a11a5989..066b66897e 100644 --- a/python_payload/demo_worms.py +++ b/python_payload/demo_worms.py @@ -85,13 +85,37 @@ def init(): worms.append(Worm()) ctx = hardware.get_ctx() +# TODO(q3k): factor out frame limiter +last_render = None +target_fps = 30 +target_delta = 1000 / target_fps +frame_slack = None +last_report = None def run(): + global last_render + global last_report + global frame_slack + now = time.ticks_ms() + + if last_render is not None: + delta = now - last_render + if frame_slack is None: + frame_slack = target_delta - delta + if delta < target_delta: + return + + if last_report is None or (now - last_report) > 1000: + fps = 1000/delta + print(f'fps: {fps:.3}, frame budget slack: {frame_slack:.3}ms') + last_report = now + + # Simulation is currently locked to FPS. global worms for w in worms: w.draw() w.move() hardware.display_update() - time.sleep(0.001) + last_render = now def foreground(): -- GitLab