Skip to content

Commit

Permalink
More fps limiter tweaks (experimental)
Browse files Browse the repository at this point in the history
  • Loading branch information
gendlin committed Jun 6, 2024
1 parent e4ec2ab commit c63afbb
Showing 1 changed file with 30 additions and 23 deletions.
53 changes: 30 additions & 23 deletions src/i_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,35 @@ static void I_ResetTargetRefresh(void);
#define I_CpuPause()
#endif

static void I_WaitUntil(uint64_t target_time)
{
while( true )
{
uint64_t current_time = I_GetTimeUS();
uint64_t elapsed_time = current_time - frametime_start;
uint64_t remaining_time = 0;

I_CpuPause();

if( elapsed_time >= target_time )
{
frametime_start = current_time;
break;
}

remaining_time = target_time - elapsed_time;

if( remaining_time > 1000 )
{
I_SleepUS(500);
}
else
{
I_Sleep(0); // yield
}
}
}

void I_FinishUpdate(void)
{
if (noblit)
Expand Down Expand Up @@ -790,29 +819,7 @@ void I_FinishUpdate(void)

if (use_limiter)
{
uint64_t target_time = 1000000ull / targetrefresh;

while (true)
{
uint64_t current_time = I_GetTimeUS();
uint64_t elapsed_time = current_time - frametime_start;
uint64_t remaining_time = 0;

I_CpuPause();

if (elapsed_time >= target_time)
{
frametime_start = current_time;
break;
}

remaining_time = target_time - elapsed_time;

if (remaining_time > 1000)
{
I_Sleep((remaining_time - 1000) / 1000);
}
}
I_WaitUntil(1000000ull / targetrefresh);
}
else
{
Expand Down

0 comments on commit c63afbb

Please sign in to comment.