Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bac7bfa
gh-141645: Add a TUI mode to the new tachyon profiler
pablogsal Nov 16, 2025
757ce0a
use sampling rate in progress bar
pablogsal Nov 17, 2025
85bada1
Fix failed samples calculation
pablogsal Nov 17, 2025
4a7df35
Add GIL flags
pablogsal Nov 17, 2025
d45f012
fix sample rate
pablogsal Nov 17, 2025
b1b9614
Update Lib/profiling/sampling/live_collector.py
pablogsal Nov 17, 2025
af9dd77
Update Lib/profiling/sampling/live_collector.py
pablogsal Nov 17, 2025
0e70587
Update Lib/profiling/sampling/sample.py
pablogsal Nov 17, 2025
7a43706
refactor live mode
pablogsal Nov 18, 2025
f597f8e
Implement color management and and S
pablogsal Nov 18, 2025
9f12a5c
Remove exception arg
pablogsal Nov 18, 2025
e2ff9fc
Fix tests
pablogsal Nov 18, 2025
6b21c9a
Remove pass
pablogsal Nov 18, 2025
4473aa9
Small refactor
pablogsal Nov 18, 2025
20c4d27
Split tests
pablogsal Nov 18, 2025
142b116
Implement per-thread switcher
pablogsal Nov 18, 2025
1543ce5
Supress stdin to not leave things hanging
pablogsal Nov 18, 2025
00dc8e7
Simplify
pablogsal Nov 18, 2025
5035156
Fix HZ update
pablogsal Nov 18, 2025
b69ebdd
Merge remote-tracking branch 'upstream/main' into live-tui
pablogsal Nov 18, 2025
1034708
Reorder tests
pablogsal Nov 18, 2025
1864e17
Fix tests
pablogsal Nov 18, 2025
c160d8d
Implement color diffing
pablogsal Nov 18, 2025
985680c
Change default sorting
pablogsal Nov 18, 2025
b5550f5
Fix tests
pablogsal Nov 18, 2025
5ef23e3
Check for curses
pablogsal Nov 18, 2025
99b19e0
UX improvements
pablogsal Nov 18, 2025
a51766a
Address feedback and ensuring the TUI works at the end
pablogsal Nov 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions Lib/profiling/sampling/collector.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
from abc import ABC, abstractmethod

# Thread status flags
try:
from _remote_debugging import THREAD_STATUS_HAS_GIL, THREAD_STATUS_ON_CPU, THREAD_STATUS_UNKNOWN, THREAD_STATUS_GIL_REQUESTED
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)
from .constants import (
THREAD_STATUS_HAS_GIL,
THREAD_STATUS_ON_CPU,
THREAD_STATUS_UNKNOWN,
THREAD_STATUS_GIL_REQUESTED,
)

class Collector(ABC):
@abstractmethod
def collect(self, stack_frames):
"""Collect profiling data from stack frames."""

def collect_failed_sample(self, exeption):
Comment thread
pablogsal marked this conversation as resolved.
Outdated
"""Collect data about a failed sample attempt."""
pass
Comment thread
pablogsal marked this conversation as resolved.
Outdated

@abstractmethod
def export(self, filename):
"""Export collected data to a file."""
Expand Down
30 changes: 30 additions & 0 deletions Lib/profiling/sampling/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""Constants for the sampling profiler."""

# Profiling mode constants
PROFILING_MODE_WALL = 0
PROFILING_MODE_CPU = 1
PROFILING_MODE_GIL = 2
PROFILING_MODE_ALL = 3 # Combines GIL + CPU checks

# 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

# Thread status flags
try:
from _remote_debugging import (
THREAD_STATUS_HAS_GIL,
THREAD_STATUS_ON_CPU,
THREAD_STATUS_UNKNOWN,
THREAD_STATUS_GIL_REQUESTED,
)
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)
Loading
Loading