Create BufferStats class

This commit is contained in:
2020-09-24 12:42:35 +02:00
parent 29652e0a25
commit 92ebbde330
2 changed files with 78 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
#include <cstddef>
#include <formats.hpp>
#include <chrono>
#ifndef SF_DAQ_BUFFER_FRAMESTATS_HPP
#define SF_DAQ_BUFFER_FRAMESTATS_HPP
class BufferStats {
const std::string source_name_;
size_t stats_modulo_;
int frames_counter_;
uint32_t total_buffer_write_us_;
uint32_t max_buffer_write_us_;
std::chrono::time_point<std::chrono::steady_clock> stats_interval_start_;
void reset_counters();
void print_stats();
public:
BufferStats(const std::string &source_name, const size_t stats_modulo);
void start_frame_write();
void end_frame_write();
};
#endif //SF_DAQ_BUFFER_FRAMESTATS_HPP
+50
View File
@@ -0,0 +1,50 @@
#include <iostream>
#include "BufferStats.hpp"
using namespace std;
using namespace chrono;
BufferStats::BufferStats(const string& source_name, const size_t stats_modulo) :
source_name_(source_name),
stats_modulo_(stats_modulo)
{
reset_counters();
}
void BufferStats::reset_counters()
{
frames_counter_ = 0;
total_buffer_write_us_ = 0;
max_buffer_write_us_ = 0;
}
void BufferStats::start_frame_write()
{
stats_interval_start_ = steady_clock::now();
}
void BufferStats::end_frame_write()
{
frames_counter_++;
uint32_t write_us_duration = duration_cast<microseconds>(
steady_clock::now()-stats_interval_start_).count();
total_buffer_write_us_ += write_us_duration;
max_buffer_write_us_ = max(max_buffer_write_us_, write_us_duration);
if (frames_counter_ == stats_modulo_) {
print_stats();
reset_counters();
}
}
void BufferStats::print_stats()
{
float avg_buffer_write_us = total_buffer_write_us_ / frames_counter_;
cout << "sf_buffer:device_name " << source_name_;
cout << " sf_buffer:avg_buffer_write_us " << avg_buffer_write_us;
cout << " sf_buffer:max_buffer_write_us " << max_buffer_write_us_;
cout << endl;
}