DolphinAnalytics: Extract report generation

Move generation of completed performance sample report to
PerformanceSampleAggregator.
This commit is contained in:
Dentomologist 2021-01-30 10:55:25 -08:00 committed by Dr. Dystopia
commit 4138d691ae
3 changed files with 38 additions and 12 deletions

View file

@ -296,23 +296,16 @@ void DolphinAnalytics::ReportPerformanceInfo(PerformanceSample&& sample)
if (m_performance_samples.size() >= NUM_PERFORMANCE_SAMPLES_PER_REPORT)
{
std::vector<u32> speed_times_1000(m_performance_samples.size());
std::vector<u32> num_prims(m_performance_samples.size());
std::vector<u32> num_draw_calls(m_performance_samples.size());
for (size_t i = 0; i < m_performance_samples.size(); ++i)
{
speed_times_1000[i] = static_cast<u32>(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);

View file

@ -42,3 +42,22 @@ std::chrono::microseconds PerformanceSampleAggregator::GetCurrentMicroseconds()
std::chrono::high_resolution_clock::now().time_since_epoch();
return std::chrono::duration_cast<std::chrono::microseconds>(time_since_epoch);
}
PerformanceSampleAggregator::CompletedReport
PerformanceSampleAggregator::GetReportFromSamples(const std::vector<PerformanceSample>& 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<u32>(sample.speed_ratio * 1'000);
report.primitives[i] = sample.num_prims;
report.draw_calls[i] = sample.num_draw_calls;
}
return report;
}

View file

@ -5,6 +5,11 @@
#pragma once
#include <chrono>
#include <vector>
#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<u32> speed;
std::vector<u32> primitives;
std::vector<u32> draw_calls;
};
static CompletedReport GetReportFromSamples(const std::vector<PerformanceSample>& samples);
};