Make performance widget graphs fill from right to left instead of circular

This commit is contained in:
Alexander Bock
2016-06-07 11:16:27 +02:00
parent 55456ae272
commit 146b71e129
4 changed files with 32 additions and 19 deletions

View File

@@ -43,10 +43,6 @@ struct PerformanceLayout {
float renderTime[NumberValues];
float updateRenderable[NumberValues];
float updateEphemeris[NumberValues];
int32_t currentRenderTime;
int32_t currentUpdateRenderable;
int32_t currentUpdateEphemeris;
};
SceneGraphPerformanceLayout sceneGraphEntries[MaxValues];
int16_t nScaleGraphEntries;
@@ -54,7 +50,6 @@ struct PerformanceLayout {
struct FunctionPerformanceLayout {
char name[LengthName];
float time[NumberValues];
int32_t currentTime;
};
FunctionPerformanceLayout functionEntries[MaxValues];
int16_t nFunctionEntries;

View File

@@ -175,7 +175,7 @@ void GuiPerformanceComponent::render() {
const PerformanceLayout::SceneGraphPerformanceLayout& entry = layout->sceneGraphEntries[indices[i]];
if (ImGui::CollapsingHeader(entry.name)) {
std::string updateEphemerisTime = std::to_string(entry.updateEphemeris[entry.currentUpdateEphemeris - 1]) + "us";
std::string updateEphemerisTime = std::to_string(entry.updateEphemeris[PerformanceLayout::NumberValues - 1]) + "us";
;
ImGui::PlotLines(
fmt::format("UpdateEphemeris\nAverage: {}us", averages[indices[i]][0]).c_str(),
@@ -188,7 +188,7 @@ void GuiPerformanceComponent::render() {
ImVec2(0, 40)
);
std::string updateRenderableTime = std::to_string(entry.updateRenderable[entry.currentUpdateRenderable - 1]) + "us";
std::string updateRenderableTime = std::to_string(entry.updateRenderable[PerformanceLayout::NumberValues - 1]) + "us";
ImGui::PlotLines(
fmt::format("UpdateRender\nAverage: {}us", averages[indices[i]][1]).c_str(),
&entry.updateRenderable[0],
@@ -200,7 +200,7 @@ void GuiPerformanceComponent::render() {
ImVec2(0, 40)
);
std::string renderTime = std::to_string(entry.renderTime[entry.currentRenderTime - 1]) + "us";
std::string renderTime = std::to_string(entry.renderTime[PerformanceLayout::NumberValues - 1]) + "us";
ImGui::PlotLines(
fmt::format("RenderTime\nAverage: {}us", averages[indices[i]][2]).c_str(),
&entry.renderTime[0],
@@ -246,7 +246,7 @@ void GuiPerformanceComponent::render() {
const PerformanceLayout::FunctionPerformanceLayout& f = layout->functionEntries[i];
std::string renderTime = std::to_string(entry.time[entry.currentTime - 1]) + "us";
std::string renderTime = std::to_string(entry.time[PerformanceLayout::NumberValues - 1]) + "us";
ImGui::PlotLines(
fmt::format("{}\nAverage: {}us", entry.name, avg).c_str(),
&entry.time[0],

View File

@@ -104,8 +104,13 @@ void PerformanceManager::storeIndividualPerformanceMeasurement
strcpy(p->name, identifier.c_str());
#endif
p->time[p->currentTime] = static_cast<float>(microseconds);
p->currentTime = (p->currentTime + 1) % PerformanceLayout::NumberValues;
std::rotate(
std::begin(p->time),
std::next(std::begin(p->time)),
std::end(p->time)
);
p->time[PerformanceLayout::NumberValues - 1] =
static_cast<float>(microseconds);
_performanceMemory->releaseLock();
}
@@ -134,13 +139,26 @@ void PerformanceManager::storeScenePerformanceMeasurements(
SceneGraphNode::PerformanceRecord r = node->performanceRecord();
PerformanceLayout::SceneGraphPerformanceLayout& entry = layout->sceneGraphEntries[i];
entry.renderTime[entry.currentRenderTime] = r.renderTime / 1000.f;
entry.updateEphemeris[entry.currentUpdateEphemeris] = r.updateTimeEphemeris / 1000.f;
entry.updateRenderable[entry.currentUpdateRenderable] = r.updateTimeRenderable / 1000.f;
entry.currentRenderTime = (entry.currentRenderTime + 1) % PerformanceLayout::NumberValues;
entry.currentUpdateEphemeris = (entry.currentUpdateEphemeris + 1) % PerformanceLayout::NumberValues;
entry.currentUpdateRenderable = (entry.currentUpdateRenderable + 1) % PerformanceLayout::NumberValues;
std::rotate(
std::begin(entry.renderTime),
std::next(std::begin(entry.renderTime)),
std::end(entry.renderTime)
);
entry.renderTime[PerformanceLayout::NumberValues - 1] = r.renderTime / 1000.f;
std::rotate(
std::begin(entry.updateEphemeris),
std::next(std::begin(entry.updateEphemeris)),
std::end(entry.updateEphemeris)
);
entry.updateEphemeris[PerformanceLayout::NumberValues - 1] = r.updateTimeEphemeris / 1000.f;
std::rotate(
std::begin(entry.updateRenderable),
std::next(std::begin(entry.updateRenderable)),
std::end(entry.updateRenderable)
);
entry.updateRenderable[PerformanceLayout::NumberValues - 1] = r.updateTimeRenderable / 1000.f;
}
_performanceMemory->releaseLock();
}