Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
mortenvp committed Feb 3, 2025
1 parent f7e28c2 commit b34b2d6
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 24 deletions.
47 changes: 29 additions & 18 deletions benchmark/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
#include <map>
#include <string>

enum class test_enum
{
value0 = 0,
value1 = 1,
value2 = 2,
value3 = 3
};

// Helper function to create metric definitions
std::map<abacus::name, abacus::info> create_metric_infos()
{
Expand All @@ -17,10 +25,11 @@ std::map<abacus::name, abacus::info> create_metric_infos()
{abacus::name{"4"}, abacus::boolean{abacus::description{""}}},
{abacus::name{"5"},
abacus::float64{abacus::kind::gauge, abacus::description{""}}},
{abacus::name{"6"},
abacus::enum8{
abacus::description{""},
{{0, {"", ""}}, {1, {"", ""}}, {2, {"", ""}}, {3, {"", ""}}}}}};
{abacus::name{"6"}, abacus::enum8{abacus::description{""},
{{test_enum::value0, {"", ""}},
{test_enum::value1, {"", ""}},
{test_enum::value2, {"", ""}},
{test_enum::value3, {"", ""}}}}}};
}

// Benchmark for metric initialization
Expand All @@ -30,13 +39,14 @@ static void BM_MetricInitialization(benchmark::State& state)
for (auto _ : state)
{
abacus::metrics metrics(create_metric_infos());
auto m0 = metrics.initialize<abacus::boolean>("0");
auto m1 = metrics.initialize<abacus::uint64>("1");
auto m2 = metrics.initialize<abacus::int64>("2");
auto m3 = metrics.initialize<abacus::float64>("3");
auto m4 = metrics.initialize<abacus::boolean>("4");
auto m5 = metrics.initialize<abacus::float64>("5");
auto m6 = metrics.initialize<abacus::enum8>("6");
auto m0 = metrics.initialize<abacus::boolean>("0").set_value(false);
auto m1 = metrics.initialize<abacus::uint64>("1").set_value(0);
auto m2 = metrics.initialize<abacus::int64>("2").set_value(0);
auto m3 = metrics.initialize<abacus::float64>("3").set_value(0.0);
auto m4 = metrics.initialize<abacus::boolean>("4").set_value(true);
auto m5 = metrics.initialize<abacus::float64>("5").set_value(3.14);
auto m6 =
metrics.initialize<abacus::enum8>("6").set_value(test_enum::value1);

(void)m0;
(void)m1;
Expand All @@ -54,13 +64,14 @@ static void BM_AssignMetrics(benchmark::State& state)
{
state.SetLabel("Assign Metrics");
abacus::metrics metrics(create_metric_infos());
auto m0 = metrics.initialize<abacus::boolean>("0");
auto m1 = metrics.initialize<abacus::uint64>("1");
auto m2 = metrics.initialize<abacus::int64>("2");
auto m3 = metrics.initialize<abacus::float64>("3");
auto m4 = metrics.initialize<abacus::boolean>("4");
auto m5 = metrics.initialize<abacus::float64>("5");
auto m6 = metrics.initialize<abacus::enum8>("6");
auto m0 = metrics.initialize<abacus::boolean>("0").set_value(false);
auto m1 = metrics.initialize<abacus::uint64>("1").set_value(0);
auto m2 = metrics.initialize<abacus::int64>("2").set_value(0);
auto m3 = metrics.initialize<abacus::float64>("3").set_value(0.0);
auto m4 = metrics.initialize<abacus::boolean>("4").set_value(true);
auto m5 = metrics.initialize<abacus::float64>("5").set_value(3.14);
auto m6 =
metrics.initialize<abacus::enum8>("6").set_value(test_enum::value1);

for (auto _ : state)
{
Expand Down
17 changes: 16 additions & 1 deletion src/abacus/enum8.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@ inline namespace STEINWURF_ABACUS_VERSION
/// A enumeration metric
struct enum8
{
struct enum_value
{
template <typename T>
enum_value(T v) : value(static_cast<uint8_t>(v))
{
}

auto operator<(const enum_value& other) const -> bool
{
return value < other.value;
}

uint8_t value;
};

/// The primitive type of the metric
using type = uint8_t;

Expand All @@ -39,7 +54,7 @@ struct enum8
abacus::description description;

/// The enumeration value information
std::map<uint32_t, value_info> values;
std::map<enum_value, value_info> values;

/// The unit of the metric
abacus::unit unit{};
Expand Down
2 changes: 1 addition & 1 deletion src/abacus/metrics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ metrics::metrics(const std::map<name, abacus::info>& infos)
}

typed_metric->mutable_values()->insert(
{key, enum_value});
{key.value, enum_value});
}
m_value_bytes += sizeof(enum8::type);

Expand Down
8 changes: 4 additions & 4 deletions test/src/test_metrics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ TEST(test_metrics, api)
abacus::unit{"ms"}}},
{abacus::name{name6},
abacus::enum8{abacus::description{"An enum metric"},
{{0, {"value0", "The value for 0"}},
{1, {"value1", "The value for 1"}},
{2, {"value2", "The value for 2"}},
{3, {"value3", "The value for 3"}}}}},
{{test_enum::value0, {"value0", "The value for 0"}},
{test_enum::value1, {"value1", "The value for 1"}},
{test_enum::value2, {"value2", "The value for 2"}},
{test_enum::value3, {"value3", "The value for 3"}}}}},
{abacus::name{name7},
abacus::constant{abacus::constant::str{"hello"},
abacus::description{"A string metric"}}}};
Expand Down

0 comments on commit b34b2d6

Please sign in to comment.