22#define MEASUREMENT_H
33
44#include < string>
5+ #ifdef _WIN32
6+ #include < process.h>
7+ #else
8+ #include < unistd.h>
9+ #endif
510
611#ifdef CODSPEED_INSTRUMENTATION
712#include " callgrind.h"
813#endif
914
15+ extern " C" {
16+ #include " core.h"
17+ }
18+
19+ inline InstrumentHooks* get_hooks () {
20+ static InstrumentHooks* g_hooks = nullptr ;
21+ if (!g_hooks) {
22+ g_hooks = instrument_hooks_init ();
23+ }
24+ return g_hooks;
25+ }
26+
1027inline std::string get_version () {
1128#ifdef CODSPEED_VERSION
1229 return {CODSPEED_VERSION};
@@ -16,29 +33,37 @@ inline std::string get_version() {
1633}
1734
1835#ifdef CODSPEED_INSTRUMENTATION
19- inline bool measurement_is_instrumented () { return RUNNING_ON_VALGRIND; }
36+ inline bool measurement_is_instrumented () {
37+ return instrument_hooks_is_instrumented (get_hooks ());
38+ }
2039
2140inline void measurement_set_metadata () {
22- std::string metadata = " Metadata: codspeed-cpp " + get_version ();
23- CALLGRIND_DUMP_STATS_AT (metadata.c_str ());
41+ std::string version = get_version ();
42+ instrument_hooks_set_integration (get_hooks (), " codspeed-cpp" ,
43+ version.c_str ());
2444}
2545
2646__attribute__ ((always_inline)) inline void measurement_start() {
27- CALLGRIND_ZERO_STATS;
28- CALLGRIND_START_INSTRUMENTATION;
47+ instrument_hooks_start_benchmark (get_hooks ());
2948}
3049
3150__attribute__ ((always_inline)) inline void measurement_stop(
32- const std::string &name) {
33- CALLGRIND_STOP_INSTRUMENTATION;
34- CALLGRIND_DUMP_STATS_AT (name.c_str ());
51+ const std::string& name) {
52+ instrument_hooks_stop_benchmark (get_hooks ());
53+
54+ #ifdef _WIN32
55+ auto current_pid = _getpid ();
56+ #else
57+ auto current_pid = getpid ();
58+ #endif
59+ instrument_hooks_executed_benchmark (get_hooks (), current_pid, name.c_str ());
3560};
3661#else
3762// Stub implementations for non-instrumentation builds
3863inline bool measurement_is_instrumented () { return false ; }
3964inline void measurement_set_metadata () {}
4065inline void measurement_start () {}
41- inline void measurement_stop (const std::string & name) { (void )name; }
66+ inline void measurement_stop (const std::string& name) { (void )name; }
4267#endif
4368
4469#endif // MEASUREMENT_H
0 commit comments