From c6edea8bbaceda316375019344f4e7ffbf6da57e Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Sat, 25 Nov 2017 14:42:38 -0800 Subject: Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled --HG-- branch : nuklear_ui --- nuklear_ui/blastem_nuklear.c | 7 +++++++ render.h | 2 ++ render_sdl.c | 10 ++++++++++ 3 files changed, 19 insertions(+) diff --git a/nuklear_ui/blastem_nuklear.c b/nuklear_ui/blastem_nuklear.c index bcff610..4785de6 100644 --- a/nuklear_ui/blastem_nuklear.c +++ b/nuklear_ui/blastem_nuklear.c @@ -206,8 +206,15 @@ void blastem_nuklear_render(void) void idle_loop(void) { + const uint32_t MIN_UI_DELAY = 15; + static uint32_t last; while (current_view != view_play) { + uint32_t current = render_elapsed_ms(); + if ((current - last) < MIN_UI_DELAY) { + render_sleep_ms(MIN_UI_DELAY - (current - last) - 1); + } + last = current; render_update_display(); } } diff --git a/render.h b/render.h index 026c3f1..a4274c9 100644 --- a/render.h +++ b/render.h @@ -103,6 +103,8 @@ uint32_t render_emulated_width(); uint32_t render_emulated_height(); uint32_t render_overscan_top(); uint32_t render_overscan_left(); +uint32_t render_elapsed_ms(void); +void render_sleep_ms(uint32_t delay); #endif //RENDER_H_ diff --git a/render_sdl.c b/render_sdl.c index 2c45071..4d33f72 100755 --- a/render_sdl.c +++ b/render_sdl.c @@ -1220,3 +1220,13 @@ void render_infobox(char *title, char *message) SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, title, message, NULL); } +uint32_t render_elapsed_ms(void) +{ + return SDL_GetTicks(); +} + +void render_sleep_ms(uint32_t delay) +{ + return SDL_Delay(delay); +} + -- cgit v1.2.3