From 810c2ec4930531443dee85d2014ce8ce2be8ffee Mon Sep 17 00:00:00 2001 From: Matthew Territo Date: Thu, 6 Jul 2017 12:07:50 -0600 Subject: [PATCH] Enable PerformanceManager logging with ImGui checkbox. --- .../performance/performancemanager.h | 12 +++++- .../src/guiperformancecomponent.cpp | 11 +++-- src/performance/performancemanager.cpp | 43 ++++++++++++++++--- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/include/openspace/performance/performancemanager.h b/include/openspace/performance/performancemanager.h index 7d6e43dddd..0a81730837 100644 --- a/include/openspace/performance/performancemanager.h +++ b/include/openspace/performance/performancemanager.h @@ -59,14 +59,24 @@ public: void storeScenePerformanceMeasurements(const std::vector& sceneNodes); void outputLogs(); - PerformanceLayout* performanceData(); + void enableLogging(); + void disableLogging(); + void toggleLogging(); + void setLogging(bool enabled); + bool loggingEnabled(); + PerformanceLayout* performanceData(); private: bool _doPerformanceMeasurements; + bool _loggingEnabled; std::map individualPerformanceLocations; std::unique_ptr _performanceMemory; + + size_t _tick; + + void tick(); }; } // namespace performance diff --git a/modules/onscreengui/src/guiperformancecomponent.cpp b/modules/onscreengui/src/guiperformancecomponent.cpp index ec6e31ee85..0fcd10a22f 100644 --- a/modules/onscreengui/src/guiperformancecomponent.cpp +++ b/modules/onscreengui/src/guiperformancecomponent.cpp @@ -81,17 +81,16 @@ void GuiPerformanceComponent::render() { v = _functionsIsEnabled; ImGui::Checkbox("Functions", &v); _functionsIsEnabled = v; - + v = OsEng.renderEngine().performanceManager()->loggingEnabled(); + ImGui::Checkbox("Output Logs", &v); + OsEng.renderEngine().performanceManager()->setLogging(v); + ImGui::Spacing(); - + if (ImGui::Button("Reset measurements")) { OsEng.renderEngine().performanceManager()->resetPerformanceMeasurements(); } - if (ImGui::Button("Output Logs")) { - OsEng.renderEngine().performanceManager()->outputLogs(); - } - if (_sceneGraphIsEnabled) { bool sge = _sceneGraphIsEnabled; ImGui::Begin("SceneGraph", &sge); diff --git a/src/performance/performancemanager.cpp b/src/performance/performancemanager.cpp index c6d612c3f9..9fa1b48c25 100644 --- a/src/performance/performancemanager.cpp +++ b/src/performance/performancemanager.cpp @@ -130,6 +130,8 @@ void PerformanceManager::destroyGlobalSharedMemory() { PerformanceManager::PerformanceManager() : _performanceMemory(nullptr) + , _tick(0) + , _loggingEnabled(false) { using ghoul::SharedMemory; PerformanceManager::createGlobalSharedMemory(); @@ -213,11 +215,34 @@ void PerformanceManager::outputLogs() { } } +void PerformanceManager::enableLogging() { + setLogging(true); +} + +void PerformanceManager::disableLogging() { + setLogging(false); +} + +void PerformanceManager::toggleLogging() { + _loggingEnabled = !_loggingEnabled; +} +void PerformanceManager::setLogging(bool enabled) { + _loggingEnabled = enabled; +} + +bool PerformanceManager::loggingEnabled() { + return _loggingEnabled; +} + PerformanceLayout* PerformanceManager::performanceData() { void* ptr = _performanceMemory->memory(); return reinterpret_cast(ptr); } +void PerformanceManager::tick() { + _tick = (_tick + 1) % PerformanceLayout::NumberValues; +} + void PerformanceManager::storeIndividualPerformanceMeasurement (std::string identifier, long long microseconds) { @@ -278,45 +303,49 @@ void PerformanceManager::storeScenePerformanceMeasurements( SceneGraphNode::PerformanceRecord r = node->performanceRecord(); PerformanceLayout::SceneGraphPerformanceLayout& entry = layout->sceneGraphEntries[i]; - // Covert milliseconds to seconds - const float second = 1000.f; + // Covert nano to microseconds + const float micro = 1000.f; std::rotate( std::begin(entry.renderTime), std::next(std::begin(entry.renderTime)), std::end(entry.renderTime) ); - entry.renderTime[PerformanceLayout::NumberValues - 1] = r.renderTime / second; + entry.renderTime[PerformanceLayout::NumberValues - 1] = r.renderTime / micro; std::rotate( std::begin(entry.updateTranslation), std::next(std::begin(entry.updateTranslation)), std::end(entry.updateTranslation) ); - entry.updateTranslation[PerformanceLayout::NumberValues - 1] = r.updateTimeTranslation / second; + entry.updateTranslation[PerformanceLayout::NumberValues - 1] = r.updateTimeTranslation / micro; std::rotate( std::begin(entry.updateRotation), std::next(std::begin(entry.updateRotation)), std::end(entry.updateRotation) ); - entry.updateRotation[PerformanceLayout::NumberValues - 1] = r.updateTimeRotation / second; + entry.updateRotation[PerformanceLayout::NumberValues - 1] = r.updateTimeRotation / micro; std::rotate( std::begin(entry.updateScaling), std::next(std::begin(entry.updateScaling)), std::end(entry.updateScaling) ); - entry.updateScaling[PerformanceLayout::NumberValues - 1] = r.updateTimeScaling / second; + entry.updateScaling[PerformanceLayout::NumberValues - 1] = r.updateTimeScaling / micro; std::rotate( std::begin(entry.updateRenderable), std::next(std::begin(entry.updateRenderable)), std::end(entry.updateRenderable) ); - entry.updateRenderable[PerformanceLayout::NumberValues - 1] = r.updateTimeRenderable / second; + entry.updateRenderable[PerformanceLayout::NumberValues - 1] = r.updateTimeRenderable / micro; } _performanceMemory->releaseLock(); + + if (_loggingEnabled && _tick == PerformanceLayout::NumberValues - 1) outputLogs(); + + tick(); } } // namespace performance