view stats: Make CPU and GPU timestamps available (#1921)

* view stats: Make GPU begin and end times available

* view stats: Make CPU start and end times available

* view stats: Remove redundant `gpuTimeElapsed`

Value can be derived by `gpuTimeEnd - gpuTimeBegin`

* view stats: Remove redundant `cpuTimeElapsed`

Value can be derived by `cpuTimeEnd - cpuTimeBegin`
This commit is contained in:
Sandy 2019-10-31 15:30:35 +01:00 committed by Бранимир Караџић
parent 2edbd06ef6
commit c7950c6db3
7 changed files with 30 additions and 17 deletions

View File

@ -2056,8 +2056,10 @@ public static partial class bgfx
{
public fixed byte name[256];
public ushort view;
public long cpuTimeElapsed;
public long gpuTimeElapsed;
public long cpuTimeBegin;
public long cpuTimeEnd;
public long gpuTimeBegin;
public long gpuTimeEnd;
}
public unsafe struct EncoderStats

View File

@ -924,8 +924,10 @@ struct bgfx_view_stats_t
{
char[256] name; /// View name.
bgfx_view_id_t view; /// View id.
long cpuTimeElapsed; /// CPU (submit) time elapsed.
long gpuTimeElapsed; /// GPU time elapsed.
long cpuTimeBegin; /// CPU (submit) begin time.
long cpuTimeEnd; /// CPU (submit) end time.
long gpuTimeBegin; /// GPU begin time.
long gpuTimeEnd; /// GPU end time.
}
/// Encoder stats.

View File

@ -438,8 +438,10 @@ void showExampleDialog(entry::AppI* _app, const char* _errorText)
ImGui::Text("%3d %3d %s", pos, viewStats.view, viewStats.name);
const float maxWidth = 30.0f*scale;
const float cpuWidth = bx::clamp(float(viewStats.cpuTimeElapsed*toCpuMs)*scale, 1.0f, maxWidth);
const float gpuWidth = bx::clamp(float(viewStats.gpuTimeElapsed*toGpuMs)*scale, 1.0f, maxWidth);
const float cpuTimeElapsed = float((viewStats.cpuTimeEnd - viewStats.cpuTimeBegin) * toCpuMs);
const float gpuTimeElapsed = float((viewStats.gpuTimeEnd - viewStats.gpuTimeBegin) * toGpuMs);
const float cpuWidth = bx::clamp(cpuTimeElapsed*scale, 1.0f, maxWidth);
const float gpuWidth = bx::clamp(gpuTimeElapsed*scale, 1.0f, maxWidth);
ImGui::SameLine(64.0f);
@ -448,7 +450,7 @@ void showExampleDialog(entry::AppI* _app, const char* _errorText)
ImGui::SetTooltip("View %d \"%s\", CPU: %f [ms]"
, pos
, viewStats.name
, viewStats.cpuTimeElapsed*toCpuMs
, cpuTimeElapsed
);
}
@ -458,7 +460,7 @@ void showExampleDialog(entry::AppI* _app, const char* _errorText)
ImGui::SetTooltip("View: %d \"%s\", GPU: %f [ms]"
, pos
, viewStats.name
, viewStats.gpuTimeElapsed*toGpuMs
, gpuTimeElapsed
);
}
}

View File

@ -911,8 +911,10 @@ namespace bgfx
{
char name[256]; //!< View name.
ViewId view; //!< View id.
int64_t cpuTimeElapsed; //!< CPU (submit) time elapsed.
int64_t gpuTimeElapsed; //!< GPU time elapsed.
int64_t cpuTimeBegin; //!< CPU (submit) begin time.
int64_t cpuTimeEnd; //!< CPU (submit) end time.
int64_t gpuTimeBegin; //!< GPU begin time.
int64_t gpuTimeEnd; //!< GPU end time.
};
/// Encoder stats.

View File

@ -783,8 +783,10 @@ typedef struct bgfx_view_stats_s
{
char name[256]; /** View name. */
bgfx_view_id_t view; /** View id. */
int64_t cpuTimeElapsed; /** CPU (submit) time elapsed. */
int64_t gpuTimeElapsed; /** GPU time elapsed. */
int64_t cpuTimeBegin; /** CPU (submit) begin time. */
int64_t cpuTimeEnd; /** CPU (submit) end time. */
int64_t gpuTimeBegin; /** GPU begin time. */
int64_t gpuTimeEnd; /** GPU end time. */
} bgfx_view_stats_t;

View File

@ -860,8 +860,10 @@ struct.Transform
struct.ViewStats
.name "char[256]" --- View name.
.view "ViewId" --- View id.
.cpuTimeElapsed "int64_t" --- CPU (submit) time elapsed.
.gpuTimeElapsed "int64_t" --- GPU time elapsed.
.cpuTimeBegin "int64_t" --- CPU (submit) begin time.
.cpuTimeEnd "int64_t" --- CPU (submit) end time.
.gpuTimeBegin "int64_t" --- GPU begin time.
.gpuTimeEnd "int64_t" --- GPU end time.
--- Encoder stats.
struct.EncoderStats

View File

@ -499,7 +499,7 @@ namespace bgfx
if (m_enabled)
{
ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews];
viewStats.cpuTimeElapsed = -bx::getHPCounter();
viewStats.cpuTimeBegin = bx::getHPCounter();
m_queryIdx = m_gpuTimer.begin(_view);
@ -521,8 +521,9 @@ namespace bgfx
ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews];
const typename Ty::Result& result = m_gpuTimer.m_result[viewStats.view];
viewStats.cpuTimeElapsed += bx::getHPCounter();
viewStats.gpuTimeElapsed = result.m_end - result.m_begin;
viewStats.cpuTimeEnd = bx::getHPCounter();
viewStats.gpuTimeBegin = result.m_begin;
viewStats.gpuTimeEnd = result.m_end;
++m_numViews;
m_queryIdx = UINT32_MAX;