From 92ebbde3307d7bee5f8fd82794e4c8b115a1fa00 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Thu, 24 Sep 2020 12:42:35 +0200 Subject: [PATCH] Create BufferStats class --- sf-buffer-writer/include/BufferStats.hpp | 28 +++++++++++++ sf-buffer-writer/src/BufferStats.cpp | 50 ++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 sf-buffer-writer/include/BufferStats.hpp create mode 100644 sf-buffer-writer/src/BufferStats.cpp diff --git a/sf-buffer-writer/include/BufferStats.hpp b/sf-buffer-writer/include/BufferStats.hpp new file mode 100644 index 0000000..62f238e --- /dev/null +++ b/sf-buffer-writer/include/BufferStats.hpp @@ -0,0 +1,28 @@ +#include +#include +#include + +#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 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 diff --git a/sf-buffer-writer/src/BufferStats.cpp b/sf-buffer-writer/src/BufferStats.cpp new file mode 100644 index 0000000..5e297e2 --- /dev/null +++ b/sf-buffer-writer/src/BufferStats.cpp @@ -0,0 +1,50 @@ +#include +#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( + 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; +}