From 7e7188abbd8639620f2beb58b58dc3c5a8afe8df Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sun, 3 May 2026 01:29:57 +0500 Subject: [PATCH] Some stats --- src/core/main.cpp | 2 ++ src/core/timebars.cpp | 38 +++++++++++++++++++++++++++++++ vendor/librw/src/gl/gl3matfx.cpp | 3 +++ vendor/librw/src/gl/gl3pipe.cpp | 3 +++ vendor/librw/src/gl/gl3render.cpp | 5 ++++ vendor/librw/src/gl/gl3skin.cpp | 3 +++ 6 files changed, 54 insertions(+) diff --git a/src/core/main.cpp b/src/core/main.cpp index 07b3fa2..a7207e3 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -1750,7 +1750,9 @@ Idle(void *arg) if (gbShowTimebars) tbDisplay(); + tbStartTimer(0, "EndOfFrame"); DoRWStuffEndOfFrame(); + tbEndTimer("EndOfFrame"); POP_MEMID(); // MEMID_RENDER diff --git a/src/core/timebars.cpp b/src/core/timebars.cpp index ac2a402..c2de256 100644 --- a/src/core/timebars.cpp +++ b/src/core/timebars.cpp @@ -29,10 +29,23 @@ float MaxFrameTime; uint32 curMS; uint32 msCollected[MAX_MS_COLLECTED]; +uint frames; #ifdef FRAMETIME float FrameInitTime; #endif +extern "C" int vboUploads; +extern "C" int draw; +extern "C" int render; +extern "C" int matfx; +extern "C" int skin; +int vboUploads; +int draw; +int render; +int matfx; +int skin; +float endOfFrameTime; + void tbInit() { TimerBar.count = 0; @@ -67,6 +80,9 @@ void tbEndTimer(Const char* name) } assert(n != 1500); TimerBar.Timers[n].endTime = (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerFrame(); + if (strcmp(name, "EndOfFrame")) { + endOfFrameTime = TimerBar.Timers[n].endTime - TimerBar.Timers[n].startTime; + } } float Diag_GetFPS() @@ -74,6 +90,8 @@ float Diag_GetFPS() return 39000.0f / (msCollected[(curMS - 1) % MAX_MS_COLLECTED] - msCollected[curMS % MAX_MS_COLLECTED]); } +extern "C" void RDebug_Printf(const char*, ...); + void tbDisplay() { char temp[200]; @@ -94,6 +112,26 @@ void tbDisplay() CFont::SetPropOn(); CFont::SetFontStyle(FONT_BANK); sprintf(temp, "FPS: %.2f", Diag_GetFPS()); + if (frames >= 15) { + RDebug_Printf("FPS: %.2f", Diag_GetFPS()); + RDebug_Printf("vbo: %d, draw: %d, render: %d, matfx: %d, skin: %d ", vboUploads, draw, render, matfx, skin); + for (uint32 i = 0; i < TimerBar.count; i++) { + MaxTimes[i] = Max(MaxTimes[i], TimerBar.Timers[i].endTime - TimerBar.Timers[i].startTime); + RDebug_Printf("%s: %.2f", &TimerBar.Timers[i].name[0], MaxTimes[i]); + } + MaxFrameTime = Max(MaxFrameTime, FrameEndTime - FrameInitTime); + RDebug_Printf("EndOfFrame: %.2f", endOfFrameTime); + RDebug_Printf("Frame Time: %.2f", MaxFrameTime); + RDebug_Printf(" "); + frames = 0; + } else frames++; + + vboUploads = 0; + draw = 0; + render = 0; + matfx = 0; + skin = 0; + AsciiToUnicode(temp, wtemp); CFont::SetColor(CRGBA(255, 255, 255, 255)); #ifndef MASTER diff --git a/vendor/librw/src/gl/gl3matfx.cpp b/vendor/librw/src/gl/gl3matfx.cpp index 9044799..46cb069 100644 --- a/vendor/librw/src/gl/gl3matfx.cpp +++ b/vendor/librw/src/gl/gl3matfx.cpp @@ -149,9 +149,12 @@ matfxEnvRender(InstanceDataHeader *header, InstanceData *inst, int32 vsBits, uin rw::SetRenderState(SRCBLEND, BLENDSRCALPHA); } +extern "C" int matfx; + void matfxRenderCB(Atomic *atomic, InstanceDataHeader *header) { + matfx++; uint32 flags = atomic->geometry->flags; setWorldMatrix(atomic->getFrame()->getLTM()); int32 vsBits = lightingCB(atomic); diff --git a/vendor/librw/src/gl/gl3pipe.cpp b/vendor/librw/src/gl/gl3pipe.cpp index 1d43193..be1c6bd 100644 --- a/vendor/librw/src/gl/gl3pipe.cpp +++ b/vendor/librw/src/gl/gl3pipe.cpp @@ -167,6 +167,8 @@ ObjPipeline::create(void) return pipe; } +extern "C" int vboUploads; + void defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance) { @@ -303,6 +305,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance) glBindBuffer(GL_ARRAY_BUFFER, header->vbo); glBufferData(GL_ARRAY_BUFFER, header->totalNumVertex*attribs[0].stride, header->vertexBuffer, GL_STATIC_DRAW); + vboUploads++; #ifdef RW_GL_USE_VAOS setAttribPointers(header->attribDesc, header->numAttribs); glBindVertexArray(0); diff --git a/vendor/librw/src/gl/gl3render.cpp b/vendor/librw/src/gl/gl3render.cpp index d4866bb..c8a6aca 100644 --- a/vendor/librw/src/gl/gl3render.cpp +++ b/vendor/librw/src/gl/gl3render.cpp @@ -21,9 +21,13 @@ namespace gl3 { #define MAX_LIGHTS +extern "C" int draw; +extern "C" int render; + void drawInst_simple(InstanceDataHeader *header, InstanceData *inst) { + draw++; flushCache(); glDrawElements(header->primType, inst->numIndex, GL_UNSIGNED_SHORT, ((uint8*) header->indexBuffer) + inst->offset); @@ -133,6 +137,7 @@ lightingCB(Atomic *atomic) void defaultRenderCB(Atomic *atomic, InstanceDataHeader *header) { + render++; Material *m; uint32 flags = atomic->geometry->flags; diff --git a/vendor/librw/src/gl/gl3skin.cpp b/vendor/librw/src/gl/gl3skin.cpp index 99ad989..04777a2 100644 --- a/vendor/librw/src/gl/gl3skin.cpp +++ b/vendor/librw/src/gl/gl3skin.cpp @@ -246,9 +246,12 @@ uploadSkinMatrices(Atomic *a) setUniform(u_boneMatrices, skinMatrices); } +extern "C" int skin; + void skinRenderCB(Atomic *atomic, InstanceDataHeader *header) { + skin++; Material *m; uint32 flags = atomic->geometry->flags;