mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-06 17:49:47 +00:00
36 lines
1.3 KiB
C
36 lines
1.3 KiB
C
#include "stats.h"
|
|
#include <stddef.h>
|
|
|
|
static _Thread_local cbm_resolve_stats_t *current_stats;
|
|
|
|
void cbm_resolve_stats_reset(cbm_resolve_stats_t *stats) {
|
|
if (stats)
|
|
for (unsigned i = 0; i < CBM_RESOLVE_STAT_COUNT; i++)
|
|
atomic_init(&stats->values[i], 0);
|
|
}
|
|
|
|
cbm_resolve_stats_t *cbm_resolve_stats_bind(cbm_resolve_stats_t *stats) {
|
|
cbm_resolve_stats_t *previous = current_stats;
|
|
current_stats = stats;
|
|
return previous;
|
|
}
|
|
|
|
void cbm_resolve_stats_add(cbm_resolve_stat_t event, uint64_t amount) {
|
|
if (current_stats && (unsigned)event < CBM_RESOLVE_STAT_COUNT)
|
|
atomic_fetch_add_explicit(¤t_stats->values[event], amount, memory_order_relaxed);
|
|
}
|
|
|
|
cbm_resolve_stats_snapshot_t cbm_resolve_stats_snapshot(const cbm_resolve_stats_t *stats) {
|
|
cbm_resolve_stats_snapshot_t result = {0};
|
|
if (stats)
|
|
for (unsigned i = 0; i < CBM_RESOLVE_STAT_COUNT; i++)
|
|
result.values[i] = atomic_load_explicit(&stats->values[i], memory_order_relaxed);
|
|
return result;
|
|
}
|
|
|
|
const char *cbm_resolve_stat_name(cbm_resolve_stat_t event) {
|
|
static const char *const names[] = {"lookup_probes", "candidate_visits", "propagated_facts",
|
|
"invalidations", "stored_records"};
|
|
return (unsigned)event < CBM_RESOLVE_STAT_COUNT ? names[event] : "unknown";
|
|
}
|