2
2
#define MEASUREMENT_H
3
3
4
4
#include < string>
5
+ #ifdef _WIN32
6
+ #include < process.h>
7
+ #else
8
+ #include < unistd.h>
9
+ #endif
5
10
6
11
#ifdef CODSPEED_INSTRUMENTATION
7
12
#include " callgrind.h"
8
13
#endif
9
14
15
+ extern " C" {
16
+ #include " core.h"
17
+ }
18
+
19
+ static InstrumentHooks* g_hooks = nullptr ;
20
+
21
+ inline void measurement_init () {
22
+ if (!g_hooks) {
23
+ g_hooks = instrument_hooks_init ();
24
+ }
25
+ }
26
+
10
27
inline std::string get_version () {
11
28
#ifdef CODSPEED_VERSION
12
29
return {CODSPEED_VERSION};
@@ -16,29 +33,41 @@ inline std::string get_version() {
16
33
}
17
34
18
35
#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 (g_hooks);
38
+ }
20
39
21
40
inline 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 (g_hooks, " codspeed-cpp " , version .c_str ());
24
43
}
25
44
26
45
__attribute__ ((always_inline)) inline void measurement_start() {
27
- CALLGRIND_ZERO_STATS;
28
- CALLGRIND_START_INSTRUMENTATION;
46
+ instrument_hooks_start_benchmark_inline (g_hooks);
47
+ }
48
+
49
+ __attribute__ ((always_inline)) inline void measurement_stop() {
50
+ instrument_hooks_stop_benchmark_inline (g_hooks);
29
51
}
30
52
31
- __attribute__ ((always_inline)) inline void measurement_stop(
32
- const std::string &name) {
33
- CALLGRIND_STOP_INSTRUMENTATION;
34
- CALLGRIND_DUMP_STATS_AT (name.c_str ());
35
- };
53
+ __attribute__ ((always_inline)) inline void measurement_executed_benchmark(
54
+ const std::string& name) {
55
+ #ifdef _WIN32
56
+ auto current_pid = _getpid ();
57
+ #else
58
+ auto current_pid = getpid ();
59
+ #endif
60
+ instrument_hooks_executed_benchmark (g_hooks, current_pid, name.c_str ());
61
+ }
36
62
#else
37
63
// Stub implementations for non-instrumentation builds
38
64
inline bool measurement_is_instrumented () { return false ; }
39
65
inline void measurement_set_metadata () {}
40
66
inline void measurement_start () {}
41
- inline void measurement_stop (const std::string &name) { (void )name; }
67
+ inline void measurement_stop () {}
68
+ inline void measurement_executed_benchmark (const std::string& name) {
69
+ (void )name;
70
+ }
42
71
#endif
43
72
44
73
#endif // MEASUREMENT_H
0 commit comments