8000 gh-111997: C-API for signalling monitoring events · iritkatriel/cpython@b2d19c3 · GitHub
[go: up one dir, main page]

Skip to content

Commit b2d19c3

Browse files
committed
pythongh-111997: C-API for signalling monitoring events
1 parent 9b7f253 commit b2d19c3

File tree

6 files changed

+665
-1
lines changed

6 files changed

+665
-1
lines changed

Include/internal/pycore_instruments.h

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,89 @@ _Py_Instrumentation_GetLine(PyCodeObject *code, int index);
101101
extern PyObject _PyInstrumentation_MISSING;
102102
extern PyObject _PyInstrumentation_DISABLE;
103103

104+
typedef struct _PyMonitoringState {
105+
uint8_t active;
106+
uint8_t opaque;
107+
} PyMonitoringState;
108+
109+
110+
/*** C API ***/
111+
112+
PyAPI_FUNC(void)
113+
_PyMonitoringScopeBegin(PyMonitoringState *state_array, uint64_t *version,
114+
uint8_t *event_types, uint32_t length);
115+
116+
PyAPI_FUNC(int)
117+
_PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);
118+
119+
PyAPI_FUNC(int)
120+
_PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);
121+
122+
PyAPI_FUNC(int)
123+
_PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
124+
PyObject *retval);
125+
126+
PyAPI_FUNC(int)
127+
_PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
128+
PyObject *retval);
129+
130+
PyAPI_FUNC(int)
131+
_PyMonitoring_FirePyCallEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
132+
PyObject* callable, PyObject *arg0);
133+
134+
PyAPI_FUNC(int)
135+
_PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
136+
PyObject* callable, PyObject *arg0);
137+
138+
139+
PyAPI_FUNC(int)
140+
_PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
141+
PyObject *lineno);
142+
143+
PyAPI_FUNC(int)
144+
_PyMonitoring_FireInstructionEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);
145+
146+
PyAPI_FUNC(int)
147+
_PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
148+
PyObject *target_offset);
149+
150+
PyAPI_FUNC(int)
151+
_PyMonitoring_FireBranchEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
152+
PyObject *target_offset);
153+
154+
PyAPI_FUNC(int)
155+
_PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
156+
PyObject *callable, PyObject *arg0);
157+
158+
PyAPI_FUNC(int)
159+
_PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
160+
PyObject *exception);
161+
162+
163+
PyAPI_FUNC(int)
164+
_PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
165+
PyObject *exception);
166+
167+
PyAPI_FUNC(int)
168+
_PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
169+
PyObject *exception);
170+
171+
PyAPI_FUNC(int)
172+
_PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
173+
PyObject *exception);
174+
175+
PyAPI_FUNC(int)
176+
_PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
177+
PyObject *callable, PyObject *arg0);
178+
179+
PyAPI_FUNC(int)
180+
_PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
181+
PyObject *exception);
182+
183+
PyAPI_FUNC(int)
184+
_PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
185+
PyObject *exception);
186+
104187
#ifdef __cplusplus
105188
}
106189
#endif

Modules/Setup.stdlib.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
@MODULE_XXSUBTYPE_TRUE@xxsubtype xxsubtype.c
162162
@MODULE__XXTESTFUZZ_TRUE@_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c
163163
@MODULE__TESTBUFFER_TRUE@_testbuffer _testbuffer.c
164-
@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c _testinternalcapi/set.c _testinternalcapi/test_critical_sections.c
164+
@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c _testinternalcapi/set.c _testinternalcapi/test_critical_sections.c _testinternalcapi/monitoring.c
165165
@MODULE__TESTCAPI_TRUE@_testcapi _testcapimodule.c _testcapi/vectorcall.c _testcapi/vectorcall_limited.c _testcapi/heaptype.c _testcapi/abstract.c _testcapi/bytearray.c _testcapi/bytes.c _testcapi/unicode.c _testcapi/dict.c _testcapi/set.c _testcapi/list.c _testcapi/tuple.c _testcapi/getargs.c _testcapi/datetime.c _testcapi/docstring.c _testcapi/mem.c _testcapi/watchers.c _testcapi/long.c _testcapi/float.c _testcapi/complex.c _testcapi/numbers.c _testcapi/structmember.c _te 6D4E stcapi/exceptions.c _testcapi/code.c _testcapi/buffer.c _testcapi/pyatomic.c _testcapi/pyos.c _testcapi/file.c _testcapi/codec.c _testcapi/immortal.c _testcapi/heaptype_relative.c _testcapi/gc.c _testcapi/sys.c _testcapi/hash.c _testcapi/time.c
166166
@MODULE__TESTCLINIC_TRUE@_testclinic _testclinic.c
167167
@MODULE__TESTCLINIC_LIMITED_TRUE@_testclinic_limited _testclinic_limited.c

Modules/_testinternalcapi.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,9 @@ module_exec(PyObject *module)
17691769
if (_PyTestInternalCapi_Init_CriticalSection(module) < 0) {
17701770
return 1;
17711771
}
1772+
if (_PyTestInternalCapi_Init_Monitoring(module) < 0) {
1773+
return 1;
1774+
}
17721775

17731776
Py_ssize_t sizeof_gc_head = 0;
17741777
#ifndef Py_GIL_DISABLED

0 commit comments

Comments
 (0)
0