mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-10 08:38:20 +00:00
[client] app: correct FPS to use an actual per second value
This commit is contained in:
parent
2736e37e4a
commit
33bf668697
@ -691,12 +691,9 @@ bool app_renderImGui(void)
|
|||||||
ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar
|
ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar
|
||||||
);
|
);
|
||||||
|
|
||||||
const float fps = 1000.0f / (g_state.renderTimeTotal /
|
igText("FPS:%4.2f UPS:%4.2f",
|
||||||
ringbuffer_getCount(g_state.renderTimings));
|
atomic_load_explicit(&g_state.fps, memory_order_relaxed),
|
||||||
const float ups = 1000.0f / (g_state.frameTimeTotal /
|
atomic_load_explicit(&g_state.ups, memory_order_relaxed));
|
||||||
ringbuffer_getCount(g_state.frameTimings));
|
|
||||||
|
|
||||||
igText("FPS:%4.2f UPS:%4.2f", fps, ups);
|
|
||||||
|
|
||||||
igEnd();
|
igEnd();
|
||||||
}
|
}
|
||||||
|
@ -95,6 +95,26 @@ static void lgInit(void)
|
|||||||
g_state.ds->showPointer(true);
|
g_state.ds->showPointer(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool fpsTimerFn(void * unused)
|
||||||
|
{
|
||||||
|
const float renderTime =
|
||||||
|
(float)atomic_exchange_explicit(&g_state.renderTime, 0,
|
||||||
|
memory_order_acquire);
|
||||||
|
|
||||||
|
const float fps = 1e9f / (renderTime /
|
||||||
|
(float)atomic_exchange_explicit(&g_state.renderCount, 0,
|
||||||
|
memory_order_acquire));
|
||||||
|
|
||||||
|
const float ups = 1e9f / (renderTime /
|
||||||
|
(float)atomic_exchange_explicit(&g_state.frameCount, 0,
|
||||||
|
memory_order_acquire));
|
||||||
|
|
||||||
|
atomic_store_explicit(&g_state.fps, fps, memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&g_state.ups, ups, memory_order_relaxed);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static int renderThread(void * unused)
|
static int renderThread(void * unused)
|
||||||
{
|
{
|
||||||
if (!g_state.lgr->render_startup(g_state.lgrData))
|
if (!g_state.lgr->render_startup(g_state.lgrData))
|
||||||
@ -106,6 +126,14 @@ static int renderThread(void * unused)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* start up the fps timer */
|
||||||
|
LGTimer * fpsTimer;
|
||||||
|
if (!lgCreateTimer(1000, fpsTimerFn, NULL, &fpsTimer))
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Failed to create the fps timer");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
LG_LOCK_INIT(g_state.lgrLock);
|
LG_LOCK_INIT(g_state.lgrLock);
|
||||||
|
|
||||||
/* signal to other threads that the renderer is ready */
|
/* signal to other threads that the renderer is ready */
|
||||||
@ -149,13 +177,15 @@ static int renderThread(void * unused)
|
|||||||
|
|
||||||
const uint64_t t = nanotime();
|
const uint64_t t = nanotime();
|
||||||
const uint64_t delta = t - g_state.lastRenderTime;
|
const uint64_t delta = t - g_state.lastRenderTime;
|
||||||
|
|
||||||
g_state.lastRenderTime = t;
|
g_state.lastRenderTime = t;
|
||||||
|
atomic_fetch_add_explicit(&g_state.renderTime , delta, memory_order_relaxed);
|
||||||
|
atomic_fetch_add_explicit(&g_state.renderCount, 1 , memory_order_relaxed);
|
||||||
|
|
||||||
if (g_state.lastRenderTimeValid)
|
if (g_state.lastRenderTimeValid)
|
||||||
{
|
{
|
||||||
const float fdelta = (float)delta / 1000000.0f;
|
const float fdelta = (float)delta / 1e6f;
|
||||||
ringbuffer_push(g_state.renderTimings, &fdelta);
|
ringbuffer_push(g_state.renderTimings, &fdelta);
|
||||||
g_state.renderTimeTotal += fdelta;
|
|
||||||
}
|
}
|
||||||
g_state.lastRenderTimeValid = true;
|
g_state.lastRenderTimeValid = true;
|
||||||
|
|
||||||
@ -177,6 +207,8 @@ static int renderThread(void * unused)
|
|||||||
|
|
||||||
g_state.state = APP_STATE_SHUTDOWN;
|
g_state.state = APP_STATE_SHUTDOWN;
|
||||||
|
|
||||||
|
lgTimerDestroy(fpsTimer);
|
||||||
|
|
||||||
if (t_cursor)
|
if (t_cursor)
|
||||||
lgJoinThread(t_cursor, NULL);
|
lgJoinThread(t_cursor, NULL);
|
||||||
|
|
||||||
@ -591,10 +623,10 @@ int main_frameThread(void * unused)
|
|||||||
{
|
{
|
||||||
const float fdelta = (float)delta / 1000000.0f;
|
const float fdelta = (float)delta / 1000000.0f;
|
||||||
ringbuffer_push(g_state.frameTimings, &fdelta);
|
ringbuffer_push(g_state.frameTimings, &fdelta);
|
||||||
g_state.frameTimeTotal += fdelta;
|
|
||||||
}
|
}
|
||||||
g_state.lastFrameTimeValid = true;
|
g_state.lastFrameTimeValid = true;
|
||||||
|
|
||||||
|
atomic_fetch_add_explicit(&g_state.frameCount, 1, memory_order_relaxed);
|
||||||
lgSignalEvent(e_frame);
|
lgSignalEvent(e_frame);
|
||||||
lgmpClientMessageDone(queue);
|
lgmpClientMessageDone(queue);
|
||||||
}
|
}
|
||||||
@ -679,13 +711,6 @@ static bool tryRenderer(const int index, const LG_RendererParams lgrParams,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rbSubtractFloat(void * value_, void * udata_)
|
|
||||||
{
|
|
||||||
float * value = (float *)value_;
|
|
||||||
float * udata = (float *)udata_;
|
|
||||||
*udata -= *value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int lg_run(void)
|
static int lg_run(void)
|
||||||
{
|
{
|
||||||
memset(&g_state, 0, sizeof(g_state));
|
memset(&g_state, 0, sizeof(g_state));
|
||||||
@ -710,11 +735,6 @@ static int lg_run(void)
|
|||||||
g_state.renderTimings = ringbuffer_new(256, sizeof(float));
|
g_state.renderTimings = ringbuffer_new(256, sizeof(float));
|
||||||
g_state.frameTimings = ringbuffer_new(256, sizeof(float));
|
g_state.frameTimings = ringbuffer_new(256, sizeof(float));
|
||||||
|
|
||||||
ringbuffer_setPreOverwriteFn(g_state.renderTimings, rbSubtractFloat,
|
|
||||||
&g_state.renderTimeTotal);
|
|
||||||
ringbuffer_setPreOverwriteFn(g_state.frameTimings , rbSubtractFloat,
|
|
||||||
&g_state.frameTimeTotal);
|
|
||||||
|
|
||||||
app_registerGraph("RENDER", g_state.renderTimings);
|
app_registerGraph("RENDER", g_state.renderTimings);
|
||||||
app_registerGraph("UPLOAD", g_state.frameTimings);
|
app_registerGraph("UPLOAD", g_state.frameTimings);
|
||||||
|
|
||||||
|
@ -103,8 +103,10 @@ struct AppState
|
|||||||
bool lastRenderTimeValid;
|
bool lastRenderTimeValid;
|
||||||
RingBuffer renderTimings;
|
RingBuffer renderTimings;
|
||||||
RingBuffer frameTimings;
|
RingBuffer frameTimings;
|
||||||
float renderTimeTotal;
|
|
||||||
float frameTimeTotal;
|
atomic_uint_least64_t renderTime;
|
||||||
|
atomic_uint_least64_t renderCount, frameCount;
|
||||||
|
_Atomic(float) fps, ups;
|
||||||
|
|
||||||
uint64_t resizeTimeout;
|
uint64_t resizeTimeout;
|
||||||
bool resizeDone;
|
bool resizeDone;
|
||||||
|
Loading…
Reference in New Issue
Block a user