From deebd779a9d40307dbd3cfb10414d564613e3c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 10 Jan 2021 13:33:53 +0100 Subject: [PATCH] Address review comments for benchsimulate --- src/openrct2/GameState.cpp | 2 +- src/openrct2/GameState.h | 7 ++++--- src/openrct2/cmdline/BenchUpdate.cpp | 11 ++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/openrct2/GameState.cpp b/src/openrct2/GameState.cpp index e61d81035a..595c31aa4b 100644 --- a/src/openrct2/GameState.cpp +++ b/src/openrct2/GameState.cpp @@ -369,7 +369,7 @@ void GameState::UpdateLogic(LogicTimings* timings) if (timings != nullptr) { - timings->CurrentIdx = (timings->CurrentIdx + 1) % LOGIC_UPDATE_MEASURMENTS_COUNT; + timings->CurrentIdx = (timings->CurrentIdx + 1) % LOGIC_UPDATE_MEASUREMENTS_COUNT; } } diff --git a/src/openrct2/GameState.h b/src/openrct2/GameState.h index a5844696c2..c4db3cf35c 100644 --- a/src/openrct2/GameState.h +++ b/src/openrct2/GameState.h @@ -13,8 +13,8 @@ #include #include -#include #include +#include namespace OpenRCT2 { @@ -48,10 +48,11 @@ namespace OpenRCT2 }; // ~6.5s at 40Hz - constexpr size_t LOGIC_UPDATE_MEASURMENTS_COUNT = 256; + constexpr size_t LOGIC_UPDATE_MEASUREMENTS_COUNT = 256; // In order not to cause allocations, collect multiple samples into single pre-allocated struct - using LogicTimingInfo = std::map, LOGIC_UPDATE_MEASURMENTS_COUNT>>; + using LogicTimingInfo = std::unordered_map< + LogicTimePart, std::array, LOGIC_UPDATE_MEASUREMENTS_COUNT>>; struct LogicTimings { diff --git a/src/openrct2/cmdline/BenchUpdate.cpp b/src/openrct2/cmdline/BenchUpdate.cpp index db8cbbb371..aa9f982bff 100644 --- a/src/openrct2/cmdline/BenchUpdate.cpp +++ b/src/openrct2/cmdline/BenchUpdate.cpp @@ -20,6 +20,7 @@ # include # include # include +# include # include using namespace OpenRCT2; @@ -39,7 +40,7 @@ static void BM_update(benchmark::State& state, const std::string& filename) int currentTimingIdx = 0; for (auto _ : state) { - if (timings[currentTimingIdx].CurrentIdx == (LOGIC_UPDATE_MEASURMENTS_COUNT - 1)) + if (timings[currentTimingIdx].CurrentIdx == (LOGIC_UPDATE_MEASUREMENTS_COUNT - 1)) { timings.resize(timings.size() + 1); currentTimingIdx++; @@ -52,8 +53,8 @@ static void BM_update(benchmark::State& state, const std::string& filename) std::chrono::duration timesum; for (const auto& timing : timings) { - for (const auto& PartTime : timing.TimingInfo.at(part)) - timesum += PartTime; + timesum = std::accumulate( + timing.TimingInfo.at(part).begin(), timing.TimingInfo.at(part).end(), std::chrono::duration()); } return std::chrono::duration_cast(timesum).count(); }; @@ -86,7 +87,7 @@ static void BM_update(benchmark::State& state, const std::string& filename) } } -static int cmdline_for_bench_sprite_sort(int argc, const char* const* argv) +static int CmdlineForBenchSpriteSort(int argc, const char* const* argv) { // Add a baseline test on an empty park benchmark::RegisterBenchmark("baseline", BM_update, std::string{}); @@ -128,7 +129,7 @@ static exitcode_t HandleBenchUpdate(CommandLineArgEnumerator* argEnumerator) { const char* const* argv = static_cast(argEnumerator->GetArguments()) + argEnumerator->GetIndex(); int32_t argc = argEnumerator->GetCount() - argEnumerator->GetIndex(); - int32_t result = cmdline_for_bench_sprite_sort(argc, argv); + int32_t result = CmdlineForBenchSpriteSort(argc, argv); if (result < 0) { return EXITCODE_FAIL;