| """Constants for the sampling profiler.""" | |
| # Time unit conversion constants | |
| MICROSECONDS_PER_SECOND = 1_000_000 | |
| MILLISECONDS_PER_SECOND = 1_000 | |
| # Profiling mode constants | |
| PROFILING_MODE_WALL = 0 | |
| PROFILING_MODE_CPU = 1 | |
| PROFILING_MODE_GIL = 2 | |
| PROFILING_MODE_ALL = 3 # Combines GIL + CPU checks | |
| PROFILING_MODE_EXCEPTION = 4 # Only samples when thread has an active exception | |
| PROFILING_MODE_NAMES = { | |
| PROFILING_MODE_WALL: "wall", | |
| PROFILING_MODE_CPU: "cpu", | |
| PROFILING_MODE_GIL: "gil", | |
| PROFILING_MODE_ALL: "all", | |
| PROFILING_MODE_EXCEPTION: "exception", | |
| } | |
| # Sort mode constants | |
| SORT_MODE_NSAMPLES = 0 | |
| SORT_MODE_TOTTIME = 1 | |
| SORT_MODE_CUMTIME = 2 | |
| SORT_MODE_SAMPLE_PCT = 3 | |
| SORT_MODE_CUMUL_PCT = 4 | |
| SORT_MODE_NSAMPLES_CUMUL = 5 | |
| # Default location for synthetic frames (native, GC) that have no source location | |
| # Format: (lineno, end_lineno, col_offset, end_col_offset) | |
| DEFAULT_LOCATION = (0, 0, -1, -1) | |
| # Internal frame path suffixes to filter from profiling output | |
| # These are internal profiler modules that should not appear in user-facing output | |
| _INTERNAL_FRAME_SUFFIXES = ( | |
| "_sync_coordinator.py", | |
| ) | |
| # Thread status flags | |
| try: | |
| from _remote_debugging import ( | |
| THREAD_STATUS_HAS_GIL, | |
| THREAD_STATUS_ON_CPU, | |
| THREAD_STATUS_UNKNOWN, | |
| THREAD_STATUS_GIL_REQUESTED, | |
| THREAD_STATUS_HAS_EXCEPTION, | |
| THREAD_STATUS_MAIN_THREAD, | |
| ) | |
| except ImportError: | |
| # Fallback for tests or when module is not available | |
| THREAD_STATUS_HAS_GIL = (1 << 0) | |
| THREAD_STATUS_ON_CPU = (1 << 1) | |
| THREAD_STATUS_UNKNOWN = (1 << 2) | |
| THREAD_STATUS_GIL_REQUESTED = (1 << 3) | |
| THREAD_STATUS_HAS_EXCEPTION = (1 << 4) | |
| THREAD_STATUS_MAIN_THREAD = (1 << 5) |