-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
1 parent
1583c6e
commit 8790d4d
Showing
9 changed files
with
143 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
#ifndef Py_INTERNAL_TRACEMALLOC_H | ||
#define Py_INTERNAL_TRACEMALLOC_H | ||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
#ifndef Py_BUILD_CORE | ||
# error "this header requires Py_BUILD_CORE define" | ||
#endif | ||
|
||
#include "pycore_hashtable.h" // _Py_hashtable_t | ||
|
||
|
||
/* Trace memory blocks allocated by PyMem_RawMalloc() */ | ||
#define TRACE_RAW_MALLOC | ||
|
||
|
||
struct _PyTraceMalloc_Config { | ||
/* Module initialized? | ||
Variable protected by the GIL */ | ||
enum { | ||
TRACEMALLOC_NOT_INITIALIZED, | ||
TRACEMALLOC_INITIALIZED, | ||
TRACEMALLOC_FINALIZED | ||
} initialized; | ||
|
||
/* Is tracemalloc tracing memory allocations? | ||
Variable protected by the GIL */ | ||
int tracing; | ||
|
||
/* limit of the number of frames in a traceback, 1 by default. | ||
Variable protected by the GIL. */ | ||
int max_nframe; | ||
}; | ||
|
||
|
||
/* Pack the frame_t structure to reduce the memory footprint on 64-bit | ||
architectures: 12 bytes instead of 16. */ | ||
struct | ||
#ifdef __GNUC__ | ||
__attribute__((packed)) | ||
#elif defined(_MSC_VER) | ||
#pragma pack(push, 4) | ||
#endif | ||
tracemalloc_frame { | ||
/* filename cannot be NULL: "<unknown>" is used if the Python frame | ||
filename is NULL */ | ||
PyObject *filename; | ||
unsigned int lineno; | ||
}; | ||
#ifdef _MSC_VER | ||
#pragma pack(pop) | ||
#endif | ||
|
||
struct tracemalloc_traceback { | ||
Py_uhash_t hash; | ||
/* Number of frames stored */ | ||
uint16_t nframe; | ||
/* Total number of frames the traceback had */ | ||
uint16_t total_nframe; | ||
struct tracemalloc_frame frames[1]; | ||
}; | ||
|
||
|
||
struct _tracemalloc_runtime_state { | ||
struct _PyTraceMalloc_Config config; | ||
|
||
/* Protected by the GIL */ | ||
struct { | ||
PyMemAllocatorEx mem; | ||
PyMemAllocatorEx raw; | ||
PyMemAllocatorEx obj; | ||
} allocators; | ||
|
||
#if defined(TRACE_RAW_MALLOC) | ||
PyThread_type_lock tables_lock; | ||
#endif | ||
/* Size in bytes of currently traced memory. | ||
Protected by TABLES_LOCK(). */ | ||
size_t traced_memory; | ||
/* Peak size in bytes of traced memory. | ||
Protected by TABLES_LOCK(). */ | ||
size_t peak_traced_memory; | ||
/* Hash table used as a set to intern filenames: | ||
PyObject* => PyObject*. | ||
Protected by the GIL */ | ||
_Py_hashtable_t *filenames; | ||
/* Buffer to store a new traceback in traceback_new(). | ||
Protected by the GIL. */ | ||
struct tracemalloc_traceback *traceback; | ||
/* Hash table used as a set to intern tracebacks: | ||
traceback_t* => traceback_t* | ||
Protected by the GIL */ | ||
_Py_hashtable_t *tracebacks; | ||
/* pointer (void*) => trace (trace_t*). | ||
Protected by TABLES_LOCK(). */ | ||
_Py_hashtable_t *traces; | ||
/* domain (unsigned int) => traces (_Py_hashtable_t). | ||
Protected by TABLES_LOCK(). */ | ||
_Py_hashtable_t *domains; | ||
|
||
struct tracemalloc_traceback empty_traceback; | ||
|
||
Py_tss_t reentrant_key; | ||
}; | ||
|
||
#define _tracemalloc_runtime_state_INIT \ | ||
{ \ | ||
.config = { \ | ||
.initialized = TRACEMALLOC_NOT_INITIALIZED, \ | ||
.tracing = 0, \ | ||
.max_nframe = 1, \ | ||
}, \ | ||
.reentrant_key = Py_tss_NEEDS_INIT, \ | ||
} | ||
|
||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
#endif // !Py_INTERNAL_TRACEMALLOC_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters