added benchmark test suite

This commit is contained in:
2026-05-07 14:29:35 +02:00
parent 3d4a61749b
commit 5e6ba3666e
9 changed files with 261 additions and 173 deletions
+51
View File
@@ -0,0 +1,51 @@
#include "MetricsObserver.hpp"
namespace matador::test {
MetricsObserver::MetricsObserver(utils::message_bus& bus) {
subscriptions.push_back(bus.subscribe<sql::statement_lock_failed_event>([this](const sql::statement_lock_failed_event &ev) {
std::lock_guard lock(mutex_);
lock_failure_count_++;
total_lock_wait_time_ += ev.duration;
}));
subscriptions.push_back(bus.subscribe<sql::statement_execution_event>([this](const sql::statement_execution_event &ev) {
std::lock_guard lock(mutex_);
execution_count_++;
total_execution_time_ += ev.duration;
}));
}
std::chrono::milliseconds MetricsObserver::get_average_lock_wait_time() const {
std::lock_guard lock(mutex_);
if (lock_failure_count_ == 0) {
return std::chrono::milliseconds{0};
}
const auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(total_lock_wait_time_);
return std::chrono::milliseconds(millis.count() / lock_failure_count_);
}
std::chrono::milliseconds MetricsObserver::get_average_execution_time() const {
std::lock_guard lock(mutex_);
if (execution_count_ == 0) {
return std::chrono::milliseconds{0};
}
const auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(total_execution_time_);
return std::chrono::milliseconds(millis.count() / execution_count_);
}
std::chrono::milliseconds MetricsObserver::get_total_lock_wait_time() const {
std::lock_guard lock(mutex_);
return std::chrono::duration_cast<std::chrono::milliseconds>(total_lock_wait_time_);
}
std::chrono::milliseconds MetricsObserver::get_total_execution_time() const {
std::lock_guard lock(mutex_);
return std::chrono::duration_cast<std::chrono::milliseconds>(total_execution_time_);
}
size_t MetricsObserver::get_lock_failure_count() const {
std::lock_guard lock(mutex_);
return lock_failure_count_;
}
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef MATADOR_METRICS_OBSERVER_HPP
#define MATADOR_METRICS_OBSERVER_HPP
#include "matador/utils/message_bus.hpp"
#include "matador/sql/statement_cache.hpp"
namespace matador::test {
class MetricsObserver {
public:
explicit MetricsObserver(utils::message_bus &bus);
std::chrono::milliseconds get_average_lock_wait_time() const;
std::chrono::milliseconds get_average_execution_time() const;
std::chrono::milliseconds get_total_lock_wait_time() const;
std::chrono::milliseconds get_total_execution_time() const;
size_t get_lock_failure_count() const;
private:
std::vector<utils::subscription> subscriptions;
mutable std::mutex mutex_;
size_t lock_failure_count_{0};
size_t execution_count_{0};
std::chrono::nanoseconds total_lock_wait_time_{0};
std::chrono::nanoseconds total_execution_time_{0};
};
}
#endif //MATADOR_METRICS_OBSERVER_HPP
+28
View File
@@ -0,0 +1,28 @@
#include "RecordingObserver.hpp"
namespace matador::test {
RecordingObserver::RecordingObserver(utils::message_bus& bus) {
subscriptions.push_back(bus.subscribe<sql::statement_accessed_event>([this](const sql::statement_accessed_event &ev) {
std::lock_guard lock(mutex);
events.push(utils::message::from_ref(ev));
}));
subscriptions.push_back(bus.subscribe<sql::statement_added_event>([this](const sql::statement_added_event &ev) {
std::lock_guard lock(mutex);
events.push(utils::message::from_ref(ev));
}));
subscriptions.push_back(bus.subscribe<sql::statement_evicted_event>([this](const sql::statement_evicted_event &ev) {
std::lock_guard lock(mutex);
events.push(utils::message::from_ref(ev));
}));
}
std::optional<utils::message> RecordingObserver::poll() {
std::lock_guard lock(mutex);
if (events.empty()) {
return std::nullopt;
}
auto evt = events.front();
events.pop();
return evt;
}
}
+24
View File
@@ -0,0 +1,24 @@
#ifndef MATADOR_RECORDING_OBSERVER_HPP
#define MATADOR_RECORDING_OBSERVER_HPP
#include "matador/utils/message_bus.hpp"
#include "matador/sql/statement_cache.hpp"
#include <queue>
namespace matador::test {
class RecordingObserver final {
public:
explicit RecordingObserver(utils::message_bus &bus);
std::optional<utils::message> poll();
private:
std::vector<utils::subscription> subscriptions;
std::mutex mutex;
std::queue<utils::message> events;
};
}
#endif //MATADOR_RECORDING_OBSERVER_HPP