Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-111997: C-API for signalling monitoring events #116413

Merged
merged 102 commits into from May 4, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
b2d19c3
gh-111997: C-API for signalling monitoring events
iritkatriel Mar 6, 2024
1b9487c
remove unnecessary events and add a basic test
iritkatriel Mar 6, 2024
150011a
enhance test
iritkatriel Mar 6, 2024
ebc36b5
enable disable tests. api test functions return the new 'active' value
iritkatriel Mar 7, 2024
1ad872c
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 7, 2024
34179c1
update PCbuild
iritkatriel Mar 7, 2024
3c9f8bb
use int
iritkatriel Mar 7, 2024
344fd26
implement _PyMonitoringScopeBegin and add CodeLike type
iritkatriel Mar 11, 2024
ecaee5e
more tests
iritkatriel Mar 11, 2024
5c68095
make functions public
iritkatriel Mar 12, 2024
7661865
move tests from testinternalcapi to testcapi
iritkatriel Mar 13, 2024
580a9f3
add include
iritkatriel Mar 13, 2024
19a1f90
PyMonitoringScopeBegin --> PyMonitoring_BeginScope
iritkatriel Mar 13, 2024
745a2b3
IF_ACTIVE --> _PyMonitoring_IF_ACTIVE
iritkatriel Mar 13, 2024
ba5e7e0
upate tests
iritkatriel Mar 13, 2024
aa19675
offset is int, event_types is const, remove "opaque"
iritkatriel Mar 13, 2024
68aa352
PyMonitoring_FireLineEvent takes lineno as int
iritkatriel Mar 13, 2024
db4e3b8
add news
iritkatriel Mar 13, 2024
99722f8
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 13, 2024
445b19f
remove debug stuff
iritkatriel Mar 13, 2024
33ce7aa
not static
iritkatriel Mar 13, 2024
cf6e20d
Revert "not static"
iritkatriel Mar 13, 2024
89b05f1
ignore PyCodeLike_Type
iritkatriel Mar 14, 2024
5f72725
typo
iritkatriel Mar 14, 2024
6368b42
space to tab
iritkatriel Mar 14, 2024
e6d7c6a
skip test if no _testcapi
iritkatriel Mar 18, 2024
58f2bcf
Code review comments
iritkatriel Mar 19, 2024
db5a286
remove unused
iritkatriel Mar 19, 2024
0f329ae
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 19, 2024
38346e8
add test with two events
iritkatriel Mar 19, 2024
738921d
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 19, 2024
f5c40fc
add _PyMonitoring_EndScope
iritkatriel Mar 19, 2024
95c5275
Begin/End --> Enter/Exit
iritkatriel Mar 19, 2024
427e116
error checking
iritkatriel Mar 19, 2024
3bc47df
review comments
iritkatriel Mar 19, 2024
5f11cda
uint32_t --> int
iritkatriel Mar 19, 2024
e719e38
put ifdef back
iritkatriel Mar 19, 2024
be236b1
add opaque
iritkatriel Mar 20, 2024
8c1eacf
always define the private versions. PyUnstable_ for the inlined
iritkatriel Mar 20, 2024
23f579b
add tests for the Unstable version of the API
iritkatriel Mar 21, 2024
eee637e
tidy up declarations
iritkatriel Mar 21, 2024
24cd7c4
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 21, 2024
29c01e3
private versions are not in limited API
iritkatriel Mar 21, 2024
0df7473
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Mar 25, 2024
ef9a4a1
rename macro
iritkatriel Mar 25, 2024
dea138e
Merge branch 'main' into monitoring-capi
iritkatriel Mar 26, 2024
c0bcc22
update limited API
iritkatriel Mar 26, 2024
48176fc
no need for two versions of EnterScope/ExitScope
iritkatriel Mar 27, 2024
c52dddc
Revert "update limited API"
iritkatriel Mar 28, 2024
69cfe88
remove stable version. Rename Unstable functions
iritkatriel Mar 28, 2024
20ce59f
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Apr 1, 2024
811402a
Delete Modules/_sqlite/connection-dd92fcfb.o.tmp
iritkatriel Apr 1, 2024
86d2f67
Delete Modules/_testcapi/monitoring.c
iritkatriel Apr 1, 2024
e60f83f
Revert "Delete Modules/_testcapi/monitoring.c"
iritkatriel Apr 1, 2024
8c052d3
Delete Modules/_sqlite/cursor-8e377591.o.tmp
iritkatriel Apr 1, 2024
e2f9f2f
Delete Python/pylifecycle-c98da669.o.tmp
iritkatriel Apr 1, 2024
7b02a82
Delete Python/pystate-0cb7e25d.o.tmp
iritkatriel Apr 1, 2024
c605827
Merge branch 'main' into monitoring-capi
iritkatriel Apr 1, 2024
a6d45c4
Merge branch 'main' into monitoring-capi
iritkatriel Apr 2, 2024
e98827c
Merge branch 'main' into monitoring-capi
iritkatriel Apr 2, 2024
5fdce63
remove a few bits
iritkatriel Apr 4, 2024
21537da
Move non-limited API to Include/cpython/ (#56)
encukou Apr 4, 2024
8eac91d
Merge branch 'main' into monitoring-capi
iritkatriel Apr 4, 2024
1956867
Merge branch 'main' into monitoring-capi
iritkatriel Apr 5, 2024
882a205
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Apr 9, 2024
aaea28e
Petr's comments
iritkatriel Apr 10, 2024
2f0a4d1
int -> int32_t for offset
iritkatriel Apr 10, 2024
88e770f
give EnterScope/ExitScope a return value
iritkatriel Apr 10, 2024
2bed2e3
add doc
iritkatriel Apr 10, 2024
573fbf8
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Apr 10, 2024
85e9033
fix typo
iritkatriel Apr 11, 2024
5162a03
update doc conf
iritkatriel Apr 11, 2024
0438389
document PyMonitoringState
iritkatriel Apr 11, 2024
f53ceed
Merge branch 'main' into monitoring-capi
iritkatriel Apr 11, 2024
75e5103
Update Doc/c-api/monitoring.rst
iritkatriel Apr 11, 2024
c7bd7f4
Petr's comments
iritkatriel Apr 11, 2024
2c09788
update docs
iritkatriel Apr 11, 2024
5936200
fix doc
iritkatriel Apr 11, 2024
3f924e4
whitespace
iritkatriel Apr 11, 2024
d42b7c8
fix doc ref
iritkatriel Apr 11, 2024
d3a5dd5
fix ref
iritkatriel Apr 11, 2024
0c4e65d
add title
iritkatriel Apr 11, 2024
a59568b
doc update
iritkatriel Apr 12, 2024
71e6bd3
Merge branch 'main' into monitoring-capi
iritkatriel Apr 12, 2024
1ed891d
Merge remote-tracking branch 'upstream/main' into monitoring-capi
iritkatriel Apr 18, 2024
262977f
update doc per Petr's comments
iritkatriel Apr 18, 2024
7d530b1
reentered
iritkatriel Apr 19, 2024
45a7895
Apply suggestions from code review
iritkatriel Apr 19, 2024
cf9dfd0
whitespace
iritkatriel Apr 19, 2024
03382bc
Merge branch 'main' into monitoring-capi
iritkatriel Apr 22, 2024
3a6e583
add exceptions and disabling to doc
iritkatriel Apr 22, 2024
a704c4a
VM takes care of exception state for exception-related events
iritkatriel Apr 26, 2024
c7de609
bool -> int
iritkatriel Apr 26, 2024
e673b5a
exception events use 'current exception'
iritkatriel Apr 28, 2024
5f00efb
update doc
iritkatriel Apr 28, 2024
69e900e
raise on missing exception
iritkatriel Apr 29, 2024
841eb6c
typo in doc
iritkatriel Apr 29, 2024
2840f12
Petr's comments
iritkatriel Apr 29, 2024
c8499e5
Merge branch 'main' into monitoring-capi
iritkatriel May 1, 2024
aa6aa8a
Merge branch 'main' into monitoring-capi
iritkatriel May 3, 2024
6c65373
Merge branch 'main' into monitoring-capi
iritkatriel May 3, 2024
bf84396
Merge branch 'main' into monitoring-capi
iritkatriel May 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
83 changes: 83 additions & 0 deletions Include/internal/pycore_instruments.h
scoder marked this conversation as resolved.
Show resolved Hide resolved
Expand Up @@ -101,6 +101,89 @@ _Py_Instrumentation_GetLine(PyCodeObject *code, int index);
extern PyObject _PyInstrumentation_MISSING;
extern PyObject _PyInstrumentation_DISABLE;

typedef struct _PyMonitoringState {
uint8_t active;
uint8_t opaque;
} PyMonitoringState;


/*** C API ***/

PyAPI_FUNC(void)
_PyMonitoringScopeBegin(PyMonitoringState *state_array, uint64_t *version,
uint8_t *event_types, uint32_t length);

PyAPI_FUNC(int)
_PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);

PyAPI_FUNC(int)
_PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);

PyAPI_FUNC(int)
_PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *retval);

PyAPI_FUNC(int)
_PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *retval);

PyAPI_FUNC(int)
_PyMonitoring_FirePyCallEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject* callable, PyObject *arg0);

PyAPI_FUNC(int)
_PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject* callable, PyObject *arg0);


PyAPI_FUNC(int)
_PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *lineno);

PyAPI_FUNC(int)
_PyMonitoring_FireInstructionEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset);

PyAPI_FUNC(int)
_PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *target_offset);

PyAPI_FUNC(int)
_PyMonitoring_FireBranchEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *target_offset);

PyAPI_FUNC(int)
_PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *callable, PyObject *arg0);

PyAPI_FUNC(int)
_PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);


PyAPI_FUNC(int)
_PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);

PyAPI_FUNC(int)
_PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);

PyAPI_FUNC(int)
_PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);

PyAPI_FUNC(int)
_PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *callable, PyObject *arg0);

PyAPI_FUNC(int)
_PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);

PyAPI_FUNC(int)
_PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, uint32_t offset,
PyObject *exception);

#ifdef __cplusplus
}
#endif
Expand Down
2 changes: 1 addition & 1 deletion Modules/Setup.stdlib.in
Expand Up @@ -161,7 +161,7 @@
@MODULE_XXSUBTYPE_TRUE@xxsubtype xxsubtype.c
@MODULE__XXTESTFUZZ_TRUE@_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c
@MODULE__TESTBUFFER_TRUE@_testbuffer _testbuffer.c
@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c _testinternalcapi/set.c _testinternalcapi/test_critical_sections.c
@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c _testinternalcapi/set.c _testinternalcapi/test_critical_sections.c _testinternalcapi/monitoring.c
@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 _testcapi/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
@MODULE__TESTCLINIC_TRUE@_testclinic _testclinic.c
@MODULE__TESTCLINIC_LIMITED_TRUE@_testclinic_limited _testclinic_limited.c
Expand Down
3 changes: 3 additions & 0 deletions Modules/_testinternalcapi.c
Expand Up @@ -1769,6 +1769,9 @@ module_exec(PyObject *module)
if (_PyTestInternalCapi_Init_CriticalSection(module) < 0) {
return 1;
}
if (_PyTestInternalCapi_Init_Monitoring(module) < 0) {
return 1;
}

Py_ssize_t sizeof_gc_head = 0;
#ifndef Py_GIL_DISABLED
Expand Down