28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
from PyQt6.QtCore import QObject, QTimer, QElapsedTimer, pyqtSignal
|
|
|
|
class EventLoopJitterMonitor(QObject):
|
|
long_pause_detected = pyqtSignal(float) # pause length in ms
|
|
|
|
def __init__(self, parent=None, interval_ms: int = 20, threshold_ms: int = 80):
|
|
super().__init__(parent)
|
|
self._interval = interval_ms
|
|
self._threshold = threshold_ms
|
|
self._timer = QTimer(self)
|
|
self._timer.setInterval(self._interval)
|
|
self._timer.timeout.connect(self._on_timeout)
|
|
self._elapsed = QElapsedTimer()
|
|
self._elapsed.start()
|
|
self._last = self._elapsed.elapsed()
|
|
|
|
def start(self) -> None:
|
|
self._timer.start()
|
|
|
|
def _on_timeout(self) -> None:
|
|
now = self._elapsed.elapsed()
|
|
delta = now - self._last # ms since last timeout
|
|
self._last = now
|
|
if delta > self._interval + self._threshold:
|
|
# log somewhere with timestamp + current track + position
|
|
print(f"[JITTER] {delta} ms gap in event loop")
|
|
self.long_pause_detected.emit(delta)
|