blob: 68fafdc3833d2e3a3da6921849159725d264e1a7 [file] [log] [blame]
Serhiy Storchakab451f912017-02-04 12:18:38 +02001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_tracemalloc_is_tracing__doc__,
6"is_tracing($module, /)\n"
7"--\n"
8"\n"
Serhiy Storchaka97353842017-02-05 22:58:46 +02009"Return True if the tracemalloc module is tracing Python memory allocations.");
Serhiy Storchakab451f912017-02-04 12:18:38 +020010
11#define _TRACEMALLOC_IS_TRACING_METHODDEF \
12 {"is_tracing", (PyCFunction)_tracemalloc_is_tracing, METH_NOARGS, _tracemalloc_is_tracing__doc__},
13
14static PyObject *
15_tracemalloc_is_tracing_impl(PyObject *module);
16
17static PyObject *
18_tracemalloc_is_tracing(PyObject *module, PyObject *Py_UNUSED(ignored))
19{
20 return _tracemalloc_is_tracing_impl(module);
21}
22
23PyDoc_STRVAR(_tracemalloc_clear_traces__doc__,
24"clear_traces($module, /)\n"
25"--\n"
26"\n"
27"Clear traces of memory blocks allocated by Python.");
28
29#define _TRACEMALLOC_CLEAR_TRACES_METHODDEF \
30 {"clear_traces", (PyCFunction)_tracemalloc_clear_traces, METH_NOARGS, _tracemalloc_clear_traces__doc__},
31
32static PyObject *
33_tracemalloc_clear_traces_impl(PyObject *module);
34
35static PyObject *
36_tracemalloc_clear_traces(PyObject *module, PyObject *Py_UNUSED(ignored))
37{
38 return _tracemalloc_clear_traces_impl(module);
39}
40
41PyDoc_STRVAR(_tracemalloc__get_traces__doc__,
42"_get_traces($module, /)\n"
43"--\n"
44"\n"
45"Get traces of all memory blocks allocated by Python.\n"
46"\n"
47"Return a list of (size: int, traceback: tuple) tuples.\n"
48"traceback is a tuple of (filename: str, lineno: int) tuples.\n"
49"\n"
50"Return an empty list if the tracemalloc module is disabled.");
51
52#define _TRACEMALLOC__GET_TRACES_METHODDEF \
53 {"_get_traces", (PyCFunction)_tracemalloc__get_traces, METH_NOARGS, _tracemalloc__get_traces__doc__},
54
55static PyObject *
56_tracemalloc__get_traces_impl(PyObject *module);
57
58static PyObject *
59_tracemalloc__get_traces(PyObject *module, PyObject *Py_UNUSED(ignored))
60{
61 return _tracemalloc__get_traces_impl(module);
62}
63
64PyDoc_STRVAR(_tracemalloc__get_object_traceback__doc__,
65"_get_object_traceback($module, obj, /)\n"
66"--\n"
67"\n"
68"Get the traceback where the Python object obj was allocated.\n"
69"\n"
70"Return a tuple of (filename: str, lineno: int) tuples.\n"
71"Return None if the tracemalloc module is disabled or did not\n"
72"trace the allocation of the object.");
73
74#define _TRACEMALLOC__GET_OBJECT_TRACEBACK_METHODDEF \
75 {"_get_object_traceback", (PyCFunction)_tracemalloc__get_object_traceback, METH_O, _tracemalloc__get_object_traceback__doc__},
76
77PyDoc_STRVAR(_tracemalloc_start__doc__,
78"start($module, nframe=1, /)\n"
79"--\n"
80"\n"
81"Start tracing Python memory allocations.\n"
82"\n"
83"Also set the maximum number of frames stored in the traceback of a\n"
84"trace to nframe.");
85
86#define _TRACEMALLOC_START_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +020087 {"start", (PyCFunction)(void(*)(void))_tracemalloc_start, METH_FASTCALL, _tracemalloc_start__doc__},
Serhiy Storchakab451f912017-02-04 12:18:38 +020088
89static PyObject *
Victor Stinnera7368ac2017-11-15 18:11:45 -080090_tracemalloc_start_impl(PyObject *module, int nframe);
Serhiy Storchakab451f912017-02-04 12:18:38 +020091
92static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +020093_tracemalloc_start(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Serhiy Storchakab451f912017-02-04 12:18:38 +020094{
95 PyObject *return_value = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -080096 int nframe = 1;
Serhiy Storchakab451f912017-02-04 12:18:38 +020097
Serhiy Storchaka4fa95912019-01-11 16:01:14 +020098 if (!_PyArg_CheckPositional("start", nargs, 0, 1)) {
Serhiy Storchakab451f912017-02-04 12:18:38 +020099 goto exit;
100 }
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200101 if (nargs < 1) {
102 goto skip_optional;
103 }
104 if (PyFloat_Check(args[0])) {
105 PyErr_SetString(PyExc_TypeError,
106 "integer argument expected, got float" );
107 goto exit;
108 }
109 nframe = _PyLong_AsInt(args[0]);
110 if (nframe == -1 && PyErr_Occurred()) {
111 goto exit;
112 }
113skip_optional:
Serhiy Storchakab451f912017-02-04 12:18:38 +0200114 return_value = _tracemalloc_start_impl(module, nframe);
115
116exit:
117 return return_value;
118}
119
120PyDoc_STRVAR(_tracemalloc_stop__doc__,
121"stop($module, /)\n"
122"--\n"
123"\n"
124"Stop tracing Python memory allocations.\n"
125"\n"
126"Also clear traces of memory blocks allocated by Python.");
127
128#define _TRACEMALLOC_STOP_METHODDEF \
129 {"stop", (PyCFunction)_tracemalloc_stop, METH_NOARGS, _tracemalloc_stop__doc__},
130
131static PyObject *
132_tracemalloc_stop_impl(PyObject *module);
133
134static PyObject *
135_tracemalloc_stop(PyObject *module, PyObject *Py_UNUSED(ignored))
136{
137 return _tracemalloc_stop_impl(module);
138}
139
140PyDoc_STRVAR(_tracemalloc_get_traceback_limit__doc__,
141"get_traceback_limit($module, /)\n"
142"--\n"
143"\n"
144"Get the maximum number of frames stored in the traceback of a trace.\n"
145"\n"
146"By default, a trace of an allocated memory block only stores\n"
147"the most recent frame: the limit is 1.");
148
149#define _TRACEMALLOC_GET_TRACEBACK_LIMIT_METHODDEF \
150 {"get_traceback_limit", (PyCFunction)_tracemalloc_get_traceback_limit, METH_NOARGS, _tracemalloc_get_traceback_limit__doc__},
151
152static PyObject *
153_tracemalloc_get_traceback_limit_impl(PyObject *module);
154
155static PyObject *
156_tracemalloc_get_traceback_limit(PyObject *module, PyObject *Py_UNUSED(ignored))
157{
158 return _tracemalloc_get_traceback_limit_impl(module);
159}
160
161PyDoc_STRVAR(_tracemalloc_get_tracemalloc_memory__doc__,
162"get_tracemalloc_memory($module, /)\n"
163"--\n"
164"\n"
165"Get the memory usage in bytes of the tracemalloc module.\n"
166"\n"
167"This memory is used internally to trace memory allocations.");
168
169#define _TRACEMALLOC_GET_TRACEMALLOC_MEMORY_METHODDEF \
170 {"get_tracemalloc_memory", (PyCFunction)_tracemalloc_get_tracemalloc_memory, METH_NOARGS, _tracemalloc_get_tracemalloc_memory__doc__},
171
172static PyObject *
173_tracemalloc_get_tracemalloc_memory_impl(PyObject *module);
174
175static PyObject *
176_tracemalloc_get_tracemalloc_memory(PyObject *module, PyObject *Py_UNUSED(ignored))
177{
178 return _tracemalloc_get_tracemalloc_memory_impl(module);
179}
180
181PyDoc_STRVAR(_tracemalloc_get_traced_memory__doc__,
182"get_traced_memory($module, /)\n"
183"--\n"
184"\n"
185"Get the current size and peak size of memory blocks traced by tracemalloc.\n"
186"\n"
187"Returns a tuple: (current: int, peak: int).");
188
189#define _TRACEMALLOC_GET_TRACED_MEMORY_METHODDEF \
190 {"get_traced_memory", (PyCFunction)_tracemalloc_get_traced_memory, METH_NOARGS, _tracemalloc_get_traced_memory__doc__},
191
192static PyObject *
193_tracemalloc_get_traced_memory_impl(PyObject *module);
194
195static PyObject *
196_tracemalloc_get_traced_memory(PyObject *module, PyObject *Py_UNUSED(ignored))
197{
198 return _tracemalloc_get_traced_memory_impl(module);
199}
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200200/*[clinic end generated code: output=1bc96dc569706afa input=a9049054013a1b77]*/