From 4138d691ae00740559c264d89dc516173fdb1c72 Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Sat, 30 Jan 2021 10:55:25 -0800 Subject: [PATCH] DolphinAnalytics: Extract report generation Move generation of completed performance sample report to PerformanceSampleAggregator. --- Source/Core/Core/DolphinAnalytics.cpp | 17 +++++------------ .../Core/Core/PerformanceSampleAggregator.cpp | 19 +++++++++++++++++++ .../Core/Core/PerformanceSampleAggregator.h | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp index 54e3f5f7fc..18e6261671 100644 --- a/Source/Core/Core/DolphinAnalytics.cpp +++ b/Source/Core/Core/DolphinAnalytics.cpp @@ -296,23 +296,16 @@ void DolphinAnalytics::ReportPerformanceInfo(PerformanceSample&& sample) if (m_performance_samples.size() >= NUM_PERFORMANCE_SAMPLES_PER_REPORT) { - std::vector speed_times_1000(m_performance_samples.size()); - std::vector num_prims(m_performance_samples.size()); - std::vector num_draw_calls(m_performance_samples.size()); - for (size_t i = 0; i < m_performance_samples.size(); ++i) - { - speed_times_1000[i] = static_cast(m_performance_samples[i].speed_ratio * 1000); - num_prims[i] = m_performance_samples[i].num_prims; - num_draw_calls[i] = m_performance_samples[i].num_draw_calls; - } + PerformanceSampleAggregator::CompletedReport report = + PerformanceSampleAggregator::GetReportFromSamples(m_performance_samples); // The per game builder should already exist -- there is no way we can be reporting performance // info without a game start event having been generated. Common::AnalyticsReportBuilder builder(m_per_game_builder); builder.AddData("type", "performance"); - builder.AddData("speed", speed_times_1000); - builder.AddData("prims", num_prims); - builder.AddData("draw-calls", num_draw_calls); + builder.AddData("speed", report.speed); + builder.AddData("prims", report.primitives); + builder.AddData("draw-calls", report.draw_calls); Send(builder); diff --git a/Source/Core/Core/PerformanceSampleAggregator.cpp b/Source/Core/Core/PerformanceSampleAggregator.cpp index f4ec11924a..7d59a2cd75 100644 --- a/Source/Core/Core/PerformanceSampleAggregator.cpp +++ b/Source/Core/Core/PerformanceSampleAggregator.cpp @@ -42,3 +42,22 @@ std::chrono::microseconds PerformanceSampleAggregator::GetCurrentMicroseconds() std::chrono::high_resolution_clock::now().time_since_epoch(); return std::chrono::duration_cast(time_since_epoch); } + +PerformanceSampleAggregator::CompletedReport +PerformanceSampleAggregator::GetReportFromSamples(const std::vector& samples) +{ + CompletedReport report; + const size_t num_samples = samples.size(); + report.speed.resize(num_samples); + report.primitives.resize(num_samples); + report.draw_calls.resize(num_samples); + + for (size_t i = 0; i < num_samples; ++i) + { + const PerformanceSample& sample = samples[i]; + report.speed[i] = static_cast(sample.speed_ratio * 1'000); + report.primitives[i] = sample.num_prims; + report.draw_calls[i] = sample.num_draw_calls; + } + return report; +} diff --git a/Source/Core/Core/PerformanceSampleAggregator.h b/Source/Core/Core/PerformanceSampleAggregator.h index a3a8bc4e4a..7b50d6e171 100644 --- a/Source/Core/Core/PerformanceSampleAggregator.h +++ b/Source/Core/Core/PerformanceSampleAggregator.h @@ -5,6 +5,11 @@ #pragma once #include +#include + +#include "Common/CommonTypes.h" + +#include "Core/PerformanceSample.h" class PerformanceSampleAggregator { @@ -14,4 +19,13 @@ public: static std::chrono::microseconds GetInitialSamplingStartTimestamp(); static std::chrono::microseconds GetRepeatSamplingStartTimestamp(); static std::chrono::microseconds GetCurrentMicroseconds(); + + struct CompletedReport + { + std::vector speed; + std::vector primitives; + std::vector draw_calls; + }; + + static CompletedReport GetReportFromSamples(const std::vector& samples); };