Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
pycore_tracemalloc.h168 linesDownload Raw Back to internal
1#ifndef Py_INTERNAL_TRACEMALLOC_H2#define Py_INTERNAL_TRACEMALLOC_H3#ifdef __cplusplus4extern "C" {5#endif6 7#ifndef Py_BUILD_CORE8#  error "this header requires Py_BUILD_CORE define"9#endif10 11#include "pycore_hashtable.h"     // _Py_hashtable_t12 13 14struct _PyTraceMalloc_Config {15    /* Module initialized?16       Variable protected by the GIL */17    enum {18        TRACEMALLOC_NOT_INITIALIZED,19        TRACEMALLOC_INITIALIZED,20        TRACEMALLOC_FINALIZED21    } initialized;22 23    /* Is tracemalloc tracing memory allocations?24       Variable protected by the TABLES_LOCK() and stored atomically.25       Atomic store is used so that it can read without locking for the26       general case of checking if tracemalloc is enabled.27       */28    int tracing;29 30    /* limit of the number of frames in a traceback, 1 by default.31       Variable protected by the GIL. */32    int max_nframe;33};34 35 36/* Pack the frame_t structure to reduce the memory footprint on 64-bit37   architectures: 12 bytes instead of 16. */38#if defined(_MSC_VER)39#pragma pack(push, 4)40#endif41 42struct43#ifdef __GNUC__44__attribute__((packed))45#endif46tracemalloc_frame {47    /* filename cannot be NULL: "<unknown>" is used if the Python frame48       filename is NULL */49    PyObject *filename;50    unsigned int lineno;51};52#ifdef _MSC_VER53#pragma pack(pop)54#endif55 56struct tracemalloc_traceback {57    Py_uhash_t hash;58    /* Number of frames stored */59    uint16_t nframe;60    /* Total number of frames the traceback had */61    uint16_t total_nframe;62    struct tracemalloc_frame frames[1];63};64 65 66struct _tracemalloc_runtime_state {67    struct _PyTraceMalloc_Config config;68 69    /* Protected by the GIL */70    struct {71        PyMemAllocatorEx mem;72        PyMemAllocatorEx raw;73        PyMemAllocatorEx obj;74    } allocators;75 76    PyMutex tables_lock;77    /* Size in bytes of currently traced memory.78       Protected by TABLES_LOCK(). */79    size_t traced_memory;80    /* Peak size in bytes of traced memory.81       Protected by TABLES_LOCK(). */82    size_t peak_traced_memory;83    /* Hash table used as a set to intern filenames:84       PyObject* => PyObject*.85       Protected by the TABLES_LOCK(). */86    _Py_hashtable_t *filenames;87    /* Buffer to store a new traceback in traceback_new().88       Protected by the TABLES_LOCK(). */89    struct tracemalloc_traceback *traceback;90    /* Hash table used as a set to intern tracebacks:91       traceback_t* => traceback_t*92       Protected by the TABLES_LOCK(). */93    _Py_hashtable_t *tracebacks;94    /* pointer (void*) => trace (trace_t*).95       Protected by TABLES_LOCK(). */96    _Py_hashtable_t *traces;97    /* domain (unsigned int) => traces (_Py_hashtable_t).98       Protected by TABLES_LOCK(). */99    _Py_hashtable_t *domains;100 101    struct tracemalloc_traceback empty_traceback;102 103    Py_tss_t reentrant_key;104};105 106#define _tracemalloc_runtime_state_INIT \107    { \108        .config = { \109            .initialized = TRACEMALLOC_NOT_INITIALIZED, \110            .tracing = 0, \111            .max_nframe = 1, \112        }, \113        .reentrant_key = Py_tss_NEEDS_INIT, \114    }115 116 117// Get the traceback where a memory block was allocated.118//119// Return a tuple of (filename: str, lineno: int) tuples.120//121// Return None if the tracemalloc module is disabled or if the memory block122// is not tracked by tracemalloc.123//124// Raise an exception and return NULL on error.125//126// Export for '_testinternalcapi' shared extension.127PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback(128    unsigned int domain,129    uintptr_t ptr);130 131/* Return non-zero if tracemalloc is tracing */132extern int _PyTraceMalloc_IsTracing(void);133 134/* Clear the tracemalloc traces */135extern void _PyTraceMalloc_ClearTraces(void);136 137/* Clear the tracemalloc traces */138extern PyObject* _PyTraceMalloc_GetTraces(void);139 140/* Clear tracemalloc traceback for an object */141extern PyObject* _PyTraceMalloc_GetObjectTraceback(PyObject *obj);142 143/* Initialize tracemalloc */144extern PyStatus _PyTraceMalloc_Init(void);145 146/* Start tracemalloc */147extern int _PyTraceMalloc_Start(int max_nframe);148 149/* Stop tracemalloc */150extern void _PyTraceMalloc_Stop(void);151 152/* Get the tracemalloc traceback limit */153extern int _PyTraceMalloc_GetTracebackLimit(void);154 155/* Get the memory usage of tracemalloc in bytes */156extern size_t _PyTraceMalloc_GetMemory(void);157 158/* Get the current size and peak size of traced memory blocks as a 2-tuple */159extern PyObject* _PyTraceMalloc_GetTracedMemory(void);160 161/* Set the peak size of traced memory blocks to the current size */162extern void _PyTraceMalloc_ResetPeak(void);163 164#ifdef __cplusplus165}166#endif167#endif  // !Py_INTERNAL_TRACEMALLOC_H168 
codekingpro/portable-devtools · Team Ai