summaryrefslogtreecommitdiffstats
path: root/Include/pydtrace.h
blob: 48886061417daf418831db0aa7fa0261f7e6212a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* Static DTrace probes interface */

#ifndef Py_DTRACE_H
#define Py_DTRACE_H

#ifdef WITH_DTRACE

#include "pydtrace_probes.h"

/* pydtrace_probes.h, on systems with DTrace, is auto-generated to include
   `PyDTrace_{PROBE}` and `PyDTrace_{PROBE}_ENABLED()` macros for every probe
   defined in pydtrace_provider.d.

   Calling these functions must be guarded by a `PyDTrace_{PROBE}_ENABLED()`
   check to minimize performance impact when probing is off. For example:

       if (PyDTrace_FUNCTION_ENTRY_ENABLED())
           PyDTrace_FUNCTION_ENTRY(f);
*/

#else

/* Without DTrace, compile to nothing. */

inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2) {}
inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2)  {}
inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2) {}
inline void PyDTrace_GC_START(int arg0) {}
inline void PyDTrace_GC_DONE(int arg0) {}
inline void PyDTrace_INSTANCE_NEW_START(int arg0) {}
inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {}
inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {}
inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {}

inline int PyDTrace_LINE_ENABLED(void) { return 0; }
inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; }
inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; }
inline int PyDTrace_GC_START_ENABLED(void) { return 0; }
inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; }
inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; }
inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; }
inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return 0; }
inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; }

#endif /* !WITH_DTRACE */

#endif /* !Py_DTRACE_H */