mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-22 22:01:46 +00:00
[client] main: remove/fix faulty upsTime code
The implementation was flawed, instead we just update the presentation time if there was not an early wakeup.
This commit is contained in:
parent
f5dfc264ba
commit
9b472d62a9
2 changed files with 27 additions and 19 deletions
|
@ -106,22 +106,30 @@ static bool fpsTimerFn(void * unused)
|
|||
|
||||
const uint64_t renderCount = atomic_exchange_explicit(&g_state.renderCount, 0,
|
||||
memory_order_acquire);
|
||||
const uint64_t frameCount = atomic_exchange_explicit(&g_state.frameCount, 0,
|
||||
memory_order_acquire);
|
||||
|
||||
const uint64_t time = nanotime();
|
||||
const float elapsedNs = time - last;
|
||||
last = time;
|
||||
float fps, ups;
|
||||
if (renderCount > 0)
|
||||
{
|
||||
const uint64_t frameCount = atomic_exchange_explicit(&g_state.frameCount, 0,
|
||||
memory_order_acquire);
|
||||
|
||||
const float elapsedMs = (float)elapsedNs / 1e6;
|
||||
const uint64_t time = nanotime();
|
||||
const uint64_t elapsedNs = time - last;
|
||||
const float elapsedMs = (float)elapsedNs / 1e6f;
|
||||
|
||||
const float fps = 1e3f / (elapsedMs / (float)renderCount);
|
||||
const float ups = 1e3f / (elapsedMs / (float)frameCount);
|
||||
const uint64_t upsTime = elapsedNs / frameCount;
|
||||
last = time;
|
||||
fps = 1e3f / (elapsedMs / (float)renderCount);
|
||||
ups = 1e3f / (elapsedMs / (float)frameCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
last = nanotime();
|
||||
fps = 0.0f;
|
||||
ups = 0.0f;
|
||||
}
|
||||
|
||||
atomic_store_explicit(&g_state.fps , fps , memory_order_relaxed);
|
||||
atomic_store_explicit(&g_state.ups , ups , memory_order_relaxed);
|
||||
atomic_store_explicit(&g_state.upsTime, upsTime, memory_order_relaxed);
|
||||
atomic_store_explicit(&g_state.fps, fps, memory_order_relaxed);
|
||||
atomic_store_explicit(&g_state.ups, ups, memory_order_relaxed);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -157,12 +165,12 @@ static int renderThread(void * unused)
|
|||
{
|
||||
if (g_params.fpsMin != 0)
|
||||
{
|
||||
const uint64_t upsTime = atomic_load_explicit(&g_state.upsTime,
|
||||
memory_order_relaxed);
|
||||
|
||||
lgWaitEventAbs(e_frame, &time);
|
||||
clock_gettime(CLOCK_MONOTONIC, &time);
|
||||
tsAdd(&time, g_state.frameTime + upsTime);
|
||||
if (!lgWaitEventAbs(e_frame, &time))
|
||||
{
|
||||
/* only update the time if we woke up early */
|
||||
clock_gettime(CLOCK_MONOTONIC, &time);
|
||||
tsAdd(&time, g_state.frameTime);
|
||||
}
|
||||
}
|
||||
|
||||
int resize = atomic_load(&g_state.lgrResize);
|
||||
|
|
|
@ -104,7 +104,7 @@ struct AppState
|
|||
RingBuffer renderTimings;
|
||||
RingBuffer frameTimings;
|
||||
|
||||
atomic_uint_least64_t renderCount, frameCount, upsTime;
|
||||
atomic_uint_least64_t renderCount, frameCount;
|
||||
_Atomic(float) fps, ups;
|
||||
|
||||
uint64_t resizeTimeout;
|
||||
|
|
Loading…
Reference in a new issue