Skip to content

Commit 7cd03a5

Browse files
committed
perf: get flamegraphs from benchmarks
1 parent ea16527 commit 7cd03a5

9 files changed

Lines changed: 193 additions & 114 deletions

benchmarks/benchmark_main.cpp

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,28 @@
1111
// Custom Qt message handler to filter debug output during benchmarks
1212
static bool g_verbose = false;
1313

14+
namespace {
15+
16+
bool hasCliFlag(int argc, char* argv[], const char* flag) {
17+
for (int i = 1; i < argc; ++i) {
18+
if (std::string(argv[i]) == flag) {
19+
return true;
20+
}
21+
}
22+
return false;
23+
}
24+
25+
bool shouldPrintBenchmarkPreamble(int argc, char* argv[]) {
26+
return !hasCliFlag(argc, argv, "--help")
27+
&& !hasCliFlag(argc, argv, "-?")
28+
&& !hasCliFlag(argc, argv, "--list-tests")
29+
&& !hasCliFlag(argc, argv, "--list-tags")
30+
&& !hasCliFlag(argc, argv, "--list-reporters")
31+
&& !hasCliFlag(argc, argv, "--list-listeners");
32+
}
33+
34+
} // namespace
35+
1436
void benchmarkMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) {
1537
// In non-verbose mode, only show warnings and above
1638
if (!g_verbose) {
@@ -72,31 +94,38 @@ int main(int argc, char* argv[]) {
7294
return returnCode;
7395
}
7496

75-
std::cout << "=================================\n";
76-
std::cout << " DSR Benchmarking Suite\n";
77-
std::cout << "=================================\n\n";
78-
std::cout << "Available benchmark categories:\n";
79-
std::cout << " [BASELINE] - Curated low-noise regression baseline\n";
80-
std::cout << " [EXTENDED] - Slower supplementary baseline coverage\n";
81-
std::cout << " [LATENCY] - Signal emission, CRDT operations\n";
82-
std::cout << " [THROUGHPUT] - Single agent insert/read/update/delete, concurrent writers\n";
83-
std::cout << " [CRDT] - mvreg and dot_context micro-benchmarks\n";
84-
std::cout << " [SCALABILITY] - Thread scaling, graph size impact\n";
85-
std::cout << " [CONSISTENCY] - Convergence time, conflict rates\n";
86-
std::cout << "\n";
87-
std::cout << "Usage examples:\n";
88-
std::cout << " ./dsr_benchmarks # Run all non-hidden benchmarks\n";
89-
std::cout << " ./dsr_benchmarks \"[BASELINE]\" # Run curated baseline benchmarks\n";
90-
std::cout << " ./dsr_benchmarks \"[EXTENDED]\" # Run slower supplementary coverage\n";
91-
std::cout << " ./dsr_benchmarks \"[LATENCY]\" # Run latency benchmarks\n";
92-
std::cout << " ./dsr_benchmarks \"[THROUGHPUT]\" # Run throughput benchmarks\n";
93-
std::cout << " ./dsr_benchmarks \"[CRDT]\" # Run CRDT micro-benchmarks\n";
94-
std::cout << " ./dsr_benchmarks \"[.multi]\" # Run multi-agent tests (may timeout)\n";
95-
std::cout << " ./dsr_benchmarks -r json::out=x.json # Export to JSON\n";
96-
std::cout << " ./dsr_benchmarks --verbose # Show Qt debug messages\n";
97-
std::cout << "\n";
98-
std::cout << "Note: [.multi] and [.extended] tests are hidden by default.\n";
99-
std::cout << "\n";
97+
if (shouldPrintBenchmarkPreamble(argc, argv)) {
98+
std::cout << "=================================\n";
99+
std::cout << " DSR Benchmarking Suite\n";
100+
std::cout << "=================================\n\n";
101+
std::cout << "Available benchmark categories:\n";
102+
std::cout << " [BASELINE] - Curated low-noise regression baseline\n";
103+
std::cout << " [EXTENDED] - Slower supplementary baseline coverage\n";
104+
std::cout << " [LATENCY] - Signal emission, CRDT operations\n";
105+
std::cout << " [THROUGHPUT] - Single agent insert/read/update/delete, concurrent writers\n";
106+
std::cout << " [CRDT] - mvreg and dot_context micro-benchmarks\n";
107+
std::cout << " [SCALABILITY] - Thread scaling, graph size impact\n";
108+
std::cout << " [CONSISTENCY] - Convergence time, conflict rates\n";
109+
std::cout << " [PROFILE] - Expensive profiling-focused cases\n";
110+
std::cout << " [LOAD] - Work-under-load and concurrency-heavy cases\n";
111+
std::cout << " [MULTIAGENT] - Multi-agent synchronization/consistency cases\n";
112+
std::cout << "\n";
113+
std::cout << "Usage examples:\n";
114+
std::cout << " ./dsr_benchmarks # Run all non-hidden benchmarks\n";
115+
std::cout << " ./dsr_benchmarks \"[BASELINE]\" # Run curated baseline benchmarks\n";
116+
std::cout << " ./dsr_benchmarks \"[EXTENDED]\" # Run slower supplementary coverage\n";
117+
std::cout << " ./dsr_benchmarks \"[LATENCY]\" # Run latency benchmarks\n";
118+
std::cout << " ./dsr_benchmarks \"[THROUGHPUT]\" # Run throughput benchmarks\n";
119+
std::cout << " ./dsr_benchmarks \"[CRDT]\" # Run CRDT micro-benchmarks\n";
120+
std::cout << " ./dsr_benchmarks \"[PROFILE][LOAD]\" # Run long load-heavy cases\n";
121+
std::cout << " ./dsr_benchmarks \"[PROFILE][MULTIAGENT]\" # Run multi-agent profiling cases\n";
122+
std::cout << " ./dsr_benchmarks \"[.multi]\" # Run multi-agent tests (may timeout)\n";
123+
std::cout << " ./dsr_benchmarks -r json::out=x.json # Export to JSON\n";
124+
std::cout << " ./dsr_benchmarks --verbose # Show Qt debug messages\n";
125+
std::cout << "\n";
126+
std::cout << "Note: [.multi] and [.extended] tests are hidden by default.\n";
127+
std::cout << "\n";
128+
}
100129

101130
return session.run();
102131
}

benchmarks/consistency/conflict_rate_bench.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
using namespace DSR;
1414
using namespace DSR::Benchmark;
1515

16-
TEST_CASE("Conflict rate benchmarks", "[CONSISTENCY][conflict][.multi]") {
16+
TEST_CASE("Conflict rate benchmarks", "[CONSISTENCY][conflict][.multi][PROFILE][MULTIAGENT]") {
1717
GraphGenerator generator;
1818
MetricsCollector collector("conflict_rate");
1919

@@ -254,7 +254,7 @@ TEST_CASE("Conflict rate benchmarks", "[CONSISTENCY][conflict][.multi]") {
254254
reporter.export_all(result, "conflict_rate");
255255
}
256256

257-
TEST_CASE("CRDT eventual consistency verification", "[CONSISTENCY][eventual][.multi]") {
257+
TEST_CASE("CRDT eventual consistency verification", "[CONSISTENCY][eventual][.multi][PROFILE][MULTIAGENT]") {
258258
GraphGenerator generator;
259259
MetricsCollector collector("eventual_consistency");
260260

benchmarks/consistency/convergence_time_bench.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
using namespace DSR;
1414
using namespace DSR::Benchmark;
1515

16-
TEST_CASE("Convergence time benchmarks", "[CONSISTENCY][convergence][.multi]") {
16+
TEST_CASE("Convergence time benchmarks", "[CONSISTENCY][convergence][.multi][PROFILE][MULTIAGENT]") {
1717
GraphGenerator generator;
1818
MetricsCollector collector("convergence_time");
1919

@@ -189,7 +189,7 @@ TEST_CASE("Convergence time benchmarks", "[CONSISTENCY][convergence][.multi]") {
189189
reporter.export_all(result, "convergence_time");
190190
}
191191

192-
TEST_CASE("Attribute convergence", "[CONSISTENCY][convergence][attributes][.multi]") {
192+
TEST_CASE("Attribute convergence", "[CONSISTENCY][convergence][attributes][.multi][PROFILE][MULTIAGENT]") {
193193
GraphGenerator generator;
194194
MetricsCollector collector("attribute_convergence");
195195

0 commit comments

Comments
 (0)