summaryrefslogtreecommitdiffstats
path: root/Include/pydtrace.h
diff options
context:
space:
mode:
Diffstat (limited to 'Include/pydtrace.h')
-rw-r--r--Include/pydtrace.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Include/pydtrace.h b/Include/pydtrace.h
new file mode 100644
index 0000000..4c06d0e
--- /dev/null
+++ b/Include/pydtrace.h
@@ -0,0 +1,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 */