mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
Refactor update_frame_time/limit_frame_time
This commit is contained in:
parent
828e02cb49
commit
6c637dafc3
@ -631,7 +631,7 @@ struct global
|
|||||||
bool sram_save_disable;
|
bool sram_save_disable;
|
||||||
bool use_sram;
|
bool use_sram;
|
||||||
|
|
||||||
/* Pausing support. */
|
/* Lifecycle state checks. */
|
||||||
bool is_paused;
|
bool is_paused;
|
||||||
bool is_oneshot;
|
bool is_oneshot;
|
||||||
bool is_menu;
|
bool is_menu;
|
||||||
|
29
retroarch.c
29
retroarch.c
@ -2737,15 +2737,9 @@ error:
|
|||||||
|
|
||||||
static inline void update_frame_time(void)
|
static inline void update_frame_time(void)
|
||||||
{
|
{
|
||||||
retro_time_t time = 0;
|
|
||||||
retro_time_t delta = 0;
|
retro_time_t delta = 0;
|
||||||
bool is_locked_fps = false;
|
retro_time_t time = rarch_get_time_usec();
|
||||||
|
bool is_locked_fps = g_extern.is_paused || driver.nonblock_state;
|
||||||
if (!g_extern.system.frame_time.callback)
|
|
||||||
return;
|
|
||||||
|
|
||||||
time = rarch_get_time_usec();
|
|
||||||
is_locked_fps = g_extern.is_paused || driver.nonblock_state;
|
|
||||||
|
|
||||||
is_locked_fps |= !!g_extern.rec;
|
is_locked_fps |= !!g_extern.rec;
|
||||||
|
|
||||||
@ -2763,20 +2757,21 @@ static inline void update_frame_time(void)
|
|||||||
|
|
||||||
static inline void limit_frame_time(void)
|
static inline void limit_frame_time(void)
|
||||||
{
|
{
|
||||||
if (g_settings.fastforward_ratio < 0.0f)
|
retro_time_t current = rarch_get_time_usec();
|
||||||
return;
|
retro_time_t target = 0, to_sleep_ms = 0;
|
||||||
|
|
||||||
g_extern.frame_limit.minimum_frame_time = (retro_time_t)
|
g_extern.frame_limit.minimum_frame_time = (retro_time_t)
|
||||||
roundf(1000000.0f / (g_extern.system.av_info.timing.fps *
|
roundf(1000000.0f / (g_extern.system.av_info.timing.fps *
|
||||||
g_settings.fastforward_ratio));
|
g_settings.fastforward_ratio));
|
||||||
|
|
||||||
retro_time_t current = rarch_get_time_usec();
|
target = g_extern.frame_limit.last_frame_time +
|
||||||
retro_time_t target = g_extern.frame_limit.last_frame_time +
|
|
||||||
g_extern.frame_limit.minimum_frame_time;
|
g_extern.frame_limit.minimum_frame_time;
|
||||||
retro_time_t to_sleep_ms = (target - current) / 1000;
|
to_sleep_ms = (target - current) / 1000;
|
||||||
|
|
||||||
if (to_sleep_ms > 0)
|
if (to_sleep_ms > 0)
|
||||||
{
|
{
|
||||||
rarch_sleep((unsigned int)to_sleep_ms);
|
rarch_sleep((unsigned int)to_sleep_ms);
|
||||||
|
|
||||||
/* Combat jitter a bit. */
|
/* Combat jitter a bit. */
|
||||||
g_extern.frame_limit.last_frame_time +=
|
g_extern.frame_limit.last_frame_time +=
|
||||||
g_extern.frame_limit.minimum_frame_time;
|
g_extern.frame_limit.minimum_frame_time;
|
||||||
@ -3285,10 +3280,14 @@ bool rarch_main_iterate(void)
|
|||||||
if ((g_settings.video.frame_delay > 0) && !driver.nonblock_state)
|
if ((g_settings.video.frame_delay > 0) && !driver.nonblock_state)
|
||||||
rarch_sleep(g_settings.video.frame_delay);
|
rarch_sleep(g_settings.video.frame_delay);
|
||||||
|
|
||||||
|
if (g_extern.system.frame_time.callback)
|
||||||
|
update_frame_time();
|
||||||
|
|
||||||
/* Run libretro for one frame. */
|
/* Run libretro for one frame. */
|
||||||
update_frame_time();
|
|
||||||
pretro_run();
|
pretro_run();
|
||||||
limit_frame_time();
|
|
||||||
|
if (g_settings.fastforward_ratio >= 0.0f)
|
||||||
|
limit_frame_time();
|
||||||
|
|
||||||
for (i = 0; i < MAX_PLAYERS; i++)
|
for (i = 0; i < MAX_PLAYERS; i++)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user