From 6750c40dc4aba1805c7c3ef039636c18d268be9f Mon Sep 17 00:00:00 2001 From: Christian Heinemann Date: Fri, 2 Aug 2024 17:57:30 +0200 Subject: [PATCH] show created cells per second --- source/Gui/StatisticsWindow.cpp | 4 ++-- source/Gui/TableLiveStatistics.cpp | 38 ++++++++++++++++++++++++------ source/Gui/TableLiveStatistics.h | 10 ++++---- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/source/Gui/StatisticsWindow.cpp b/source/Gui/StatisticsWindow.cpp index 5ad08bade..18dce63aa 100644 --- a/source/Gui/StatisticsWindow.cpp +++ b/source/Gui/StatisticsWindow.cpp @@ -242,10 +242,10 @@ void _StatisticsWindow::processTablesTab() ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); - AlienImGui::Text(StringHelper::format(_tableLiveStatistics.getCreatedCells())); + AlienImGui::Text(StringHelper::format(_tableLiveStatistics.getCreatedCellsPerSecond())); ImGui::TableSetColumnIndex(1); - AlienImGui::Text("Created cells"); + AlienImGui::Text("Created cells / sec"); ImGui::EndTable(); diff --git a/source/Gui/TableLiveStatistics.cpp b/source/Gui/TableLiveStatistics.cpp index 7e722a38f..977a3acea 100644 --- a/source/Gui/TableLiveStatistics.cpp +++ b/source/Gui/TableLiveStatistics.cpp @@ -2,7 +2,7 @@ bool TableLiveStatistics::isDataAvailable() const { - return _lastData.has_value(); + return _currentData.has_value(); } namespace @@ -17,15 +17,39 @@ namespace } } -uint64_t TableLiveStatistics::getCreatedCells() const +float TableLiveStatistics::getCreatedCellsPerSecond() const { - return sum(_lastData->accumulated.numCreatedCells); + if (!_lastDataTimepoint.has_value()) { + return 0; + } + + auto currentCreatedCells = sum(_currentData->accumulated.numCreatedCells); + auto lastCreatedCells = sum(_lastData->accumulated.numCreatedCells); + return (toFloat(currentCreatedCells) - toFloat(lastCreatedCells)) + / toFloat(std::chrono::duration_cast(*_currentDataTimepoint - *_lastDataTimepoint).count()) * 5000; +} + +float TableLiveStatistics::getReplicatorsPerSecond() const +{ + return 0; } void TableLiveStatistics::update(TimelineStatistics const& data) { - _lastData = data; - //auto timepoint = std::chrono::steady_clock::now(); - //auto duration = - // _lastTimepoint.has_value() ? static_cast(std::chrono::duration_cast(timepoint - *_lastTimepoint).count()) : 0; + auto timepoint = std::chrono::steady_clock::now(); + + if (!_currentDataTimepoint.has_value()) { + _currentData = data; + _currentDataTimepoint = timepoint; + return; + } + + auto duration = static_cast(std::chrono::duration_cast(timepoint - *_currentDataTimepoint).count()); + if (duration > 5000) { + _lastData = _currentData; + _lastDataTimepoint = _currentDataTimepoint; + + _currentData = data; + _currentDataTimepoint = timepoint; + } } diff --git a/source/Gui/TableLiveStatistics.h b/source/Gui/TableLiveStatistics.h index 2c116b32f..070e1e7dd 100644 --- a/source/Gui/TableLiveStatistics.h +++ b/source/Gui/TableLiveStatistics.h @@ -10,13 +10,15 @@ class TableLiveStatistics public: bool isDataAvailable() const; - uint64_t getCreatedCells() const; - uint64_t getCreatedCellsPerSecond() const; + float getCreatedCellsPerSecond() const; + float getReplicatorsPerSecond() const; void update(TimelineStatistics const& data); private: + std::optional _currentData; + std::optional _currentDataTimepoint; + std::optional _lastData; - std::optional _lastSecondData; - std::optional _lastSecondTimepoint; + std::optional _lastDataTimepoint; };