- added a bit of profiling code to the multithreaded parts of the renderer.

This commit is contained in:
Christoph Oelckers 2018-10-31 10:20:06 +01:00
parent 01a0af8ad1
commit 790b121195
3 changed files with 14 additions and 4 deletions

View File

@ -96,6 +96,7 @@ void HWDrawInfo::WorkerThread()
{ {
sector_t fakefront, fakeback, *front, *back; sector_t fakefront, fakeback, *front, *back;
WTTotal.Clock();
isWorkerThread = true; // for adding asserts in GL API code. The worker thread may never call any GL API. isWorkerThread = true; // for adding asserts in GL API code. The worker thread may never call any GL API.
while (true) while (true)
{ {
@ -118,7 +119,7 @@ void HWDrawInfo::WorkerThread()
else switch (job->type) else switch (job->type)
{ {
case RenderJob::TerminateJob: case RenderJob::TerminateJob:
PreparePlayerSprites(Viewpoint.sector, in_area); WTTotal.Unclock();
return; return;
case RenderJob::WallJob: case RenderJob::WallJob:
@ -727,7 +728,10 @@ void HWDrawInfo::RenderBSP(void *node)
jobQueue.AddJob(RenderJob::TerminateJob, nullptr, nullptr); jobQueue.AddJob(RenderJob::TerminateJob, nullptr, nullptr);
Bsp.Unclock(); Bsp.Unclock();
MTWait.Clock();
future.wait(); future.wait();
jobQueue.ReleaseAll(); jobQueue.ReleaseAll();
MTWait.Unclock();
PreparePlayerSprites(Viewpoint.sector, in_area);
} }

View File

@ -51,6 +51,7 @@ glcycle_t RenderAll;
glcycle_t Dirty; glcycle_t Dirty;
glcycle_t drawcalls; glcycle_t drawcalls;
glcycle_t twoD, Flush3D; glcycle_t twoD, Flush3D;
glcycle_t MTWait, WTTotal;
int vertexcount, flatvertices, flatprimitives; int vertexcount, flatvertices, flatprimitives;
int rendered_lines,rendered_flats,rendered_sprites,render_vertexsplit,render_texsplit,rendered_decals, rendered_portals; int rendered_lines,rendered_flats,rendered_sprites,render_vertexsplit,render_texsplit,rendered_decals, rendered_portals;
@ -73,6 +74,8 @@ void ResetProfilingData()
RenderSprite.Reset(); RenderSprite.Reset();
SetupSprite.Reset(); SetupSprite.Reset();
drawcalls.Reset(); drawcalls.Reset();
MTWait.Reset();
WTTotal.Reset();
flatvertices=flatprimitives=vertexcount=0; flatvertices=flatprimitives=vertexcount=0;
render_texsplit=render_vertexsplit=rendered_lines=rendered_flats=rendered_sprites=rendered_decals=rendered_portals = 0; render_texsplit=render_vertexsplit=rendered_lines=rendered_flats=rendered_sprites=rendered_decals=rendered_portals = 0;
@ -87,20 +90,22 @@ void ResetProfilingData()
static void AppendRenderTimes(FString &str) static void AppendRenderTimes(FString &str)
{ {
double setupwall = SetupWall.TimeMS(); double setupwall = SetupWall.TimeMS();
double clipwall = ClipWall.TimeMS() - SetupWall.TimeMS(); double clipwall = ClipWall.TimeMS();
double bsp = Bsp.TimeMS() - ClipWall.TimeMS() - SetupFlat.TimeMS() - SetupSprite.TimeMS(); double bsp = Bsp.TimeMS() - ClipWall.TimeMS();
str.AppendFormat("BSP = %2.3f, Clip=%2.3f\n" str.AppendFormat("BSP = %2.3f, Clip=%2.3f\n"
"W: Render=%2.3f, Setup=%2.3f\n" "W: Render=%2.3f, Setup=%2.3f\n"
"F: Render=%2.3f, Setup=%2.3f\n" "F: Render=%2.3f, Setup=%2.3f\n"
"S: Render=%2.3f, Setup=%2.3f\n" "S: Render=%2.3f, Setup=%2.3f\n"
"2D: %2.3f Finish3D: %2.3f\n" "2D: %2.3f Finish3D: %2.3f\n"
"Main thread total=%2.3f, Main thread waiting=%2.3f Worker thread total=%2.3f, Worker thread waiting=%2.3f\n"
"All=%2.3f, Render=%2.3f, Setup=%2.3f, Portal=%2.3f, Drawcalls=%2.3f, Postprocess=%2.3f, Finish=%2.3f\n", "All=%2.3f, Render=%2.3f, Setup=%2.3f, Portal=%2.3f, Drawcalls=%2.3f, Postprocess=%2.3f, Finish=%2.3f\n",
bsp, clipwall, bsp, clipwall,
RenderWall.TimeMS(), setupwall, RenderWall.TimeMS(), setupwall,
RenderFlat.TimeMS(), SetupFlat.TimeMS(), RenderFlat.TimeMS(), SetupFlat.TimeMS(),
RenderSprite.TimeMS(), SetupSprite.TimeMS(), RenderSprite.TimeMS(), SetupSprite.TimeMS(),
twoD.TimeMS(), Flush3D.TimeMS() - twoD.TimeMS(), twoD.TimeMS(), Flush3D.TimeMS() - twoD.TimeMS(),
MTWait.TimeMS() + Bsp.TimeMS(), MTWait.TimeMS(), WTTotal.TimeMS(), WTTotal.TimeMS() - setupwall - SetupFlat.TimeMS() - SetupSprite.TimeMS(),
All.TimeMS() + Finish.TimeMS(), RenderAll.TimeMS(), ProcessAll.TimeMS(), PortalAll.TimeMS(), drawcalls.TimeMS(), PostProcess.TimeMS(), Finish.TimeMS()); All.TimeMS() + Finish.TimeMS(), RenderAll.TimeMS(), ProcessAll.TimeMS(), PortalAll.TimeMS(), drawcalls.TimeMS(), PostProcess.TimeMS(), Finish.TimeMS());
} }

View File

@ -13,6 +13,7 @@ extern glcycle_t ProcessAll, PostProcess;
extern glcycle_t RenderAll; extern glcycle_t RenderAll;
extern glcycle_t Dirty; extern glcycle_t Dirty;
extern glcycle_t drawcalls, twoD, Flush3D; extern glcycle_t drawcalls, twoD, Flush3D;
extern glcycle_t MTWait, WTTotal;
extern int iter_dlightf, iter_dlight, draw_dlight, draw_dlightf; extern int iter_dlightf, iter_dlight, draw_dlight, draw_dlightf;
extern int rendered_lines,rendered_flats,rendered_sprites,rendered_decals,render_vertexsplit,render_texsplit; extern int rendered_lines,rendered_flats,rendered_sprites,rendered_decals,render_vertexsplit,render_texsplit;