# HG changeset patch # User Michael Pavone # Date 1511649758 28800 # Node ID 2d203bf73dbd6190b5e0989923f0a93a82797b96 # Parent 77a401044935d46a9931448a5c750ba34ef95532 Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled diff -r 77a401044935 -r 2d203bf73dbd nuklear_ui/blastem_nuklear.c --- a/nuklear_ui/blastem_nuklear.c Sat Nov 25 13:57:38 2017 -0800 +++ b/nuklear_ui/blastem_nuklear.c Sat Nov 25 14:42:38 2017 -0800 @@ -206,8 +206,15 @@ 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 -r 77a401044935 -r 2d203bf73dbd render.h --- a/render.h Sat Nov 25 13:57:38 2017 -0800 +++ b/render.h Sat Nov 25 14:42:38 2017 -0800 @@ -103,6 +103,8 @@ 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 -r 77a401044935 -r 2d203bf73dbd render_sdl.c --- a/render_sdl.c Sat Nov 25 13:57:38 2017 -0800 +++ b/render_sdl.c Sat Nov 25 14:42:38 2017 -0800 @@ -1220,3 +1220,13 @@ 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); +} +