summaryrefslogtreecommitdiffstats
path: root/Include/pydtrace.h
blob: 4c06d0ef79ca0fb1b3e66572ecc8d5401006d8b3 (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. */

#define PyDTrace_LINE(arg0, arg1, arg2, arg3) do ; while (0)
#define PyDTrace_FUNCTION_ENTRY(arg0, arg1, arg2)  do ; while (0)
#define PyDTrace_FUNCTION_RETURN(arg0, arg1, arg2) do ; while (0)
#define PyDTrace_GC_START(arg0)               do ; while (0)
#define PyDTrace_GC_DONE(arg0)                do ; while (0)
#define PyDTrace_INSTANCE_NEW_START(arg0)     do ; while (0)
#define PyDTrace_INSTANCE_NEW_DONE(arg0)      do ; while (0)
#define PyDTrace_INSTANCE_DELETE_START(arg0)  do ; while (0)
#define PyDTrace_INSTANCE_DELETE_DONE(arg0)   do ; while (0)

#define PyDTrace_LINE_ENABLED()                  (0)
#define PyDTrace_FUNCTION_ENTRY_ENABLED()        (0)
#define PyDTrace_FUNCTION_RETURN_ENABLED()       (0)
#define PyDTrace_GC_START_ENABLED()              (0)
#define PyDTrace_GC_DONE_ENABLED()               (0)
#define PyDTrace_INSTANCE_NEW_START_ENABLED()    (0)
#define PyDTrace_INSTANCE_NEW_DONE_ENABLED()     (0)
#define PyDTrace_INSTANCE_DELETE_START_ENABLED() (0)
#define PyDTrace_INSTANCE_DELETE_DONE_ENABLED()  (0)

#endif /* !WITH_DTRACE */

#endif /* !Py_DTRACE_H */