Record Windows startup GUI stalls and capture-gap scheduling correction
This commit is contained in:
1 parent
40dcc76adb
commit
c92f7991ec
1 file changed
+26
-1
+26
-1
@@ -950,7 +950,7 @@ Decoder получает кадры строго последовательно,
|
||||
Playout больше не содержит DROP_LATE/DROP_SCHEDULE. Invalid/order остаётся диагностируемой ошибкой.
|
||||
CallTimeline публикует rate_ppm из фактического SourceSpan SoundTouch -> PCM на текущей позиции устройства.
|
||||
База темпа видео max(1x, audio rate), коррекция 2 * max(0, audioPTS-framePTS) ppm, предел 1.6x.
|
||||
После показа следующий интервал равен deltaPTS/speed; после опоздания отсчитывается от фактической
|
||||
После показа следующий интервал равен min(deltaPTS, 1000000/format.fps)/speed; после опоздания отсчитывается от фактической
|
||||
выдачи, поэтому очередь не выдаётся мгновенной пачкой. После отсутствия готовых кадров привязка снимается:
|
||||
прошедшее ожидание данных не добавляется второй раз. Дополнительный стартовый резерв не создаётся.
|
||||
Видео может временно отставать от звука более 50мс, затем догоняет; опережение ограничено 40мс.
|
||||
@@ -973,3 +973,28 @@ test_call_video_port проверяет частично принятую пач
|
||||
test_call_video_flush проверяет bounded burst, событие send_ready, аудиогейт и отмену callbacks.
|
||||
Qt clock требует 90/90 при RX/GUI-паузах; GPU-тест проверяет каждый исходный PTS через смену bitrate
|
||||
и равенство decoded + pending входам, без настоящего Windows драйвера.
|
||||
|
||||
Windows 1.log, повторный прогон 19.10.2026
|
||||
В 19:16:31–19:16:41 decoder занимает 1.7–4.4мс, но notification ждёт до 113мс,
|
||||
а подтверждение paint — до 227мс. Показ падает до 3–6fps, RX FIFO заполняется,
|
||||
ожидание уже принятого кадра до decode достигает 2.66с. Аудио в этот период работает:
|
||||
WASAPI padding 20мс, callback около 10мс, аудиочасы valid=1. Это локальное ограничение GUI;
|
||||
длительность самого paint и причина задержки event loop в старой диагностике не различались.
|
||||
После 19:16:41 notification обычно <1.8мс, paint acknowledgement <9мс, показ 29–32fps.
|
||||
Остаточное опоздание RX sleep достигает 19.2мс; точность Windows timer отдельно не исправлялась.
|
||||
Отсутствие кадров около 19:17:04–19:17:10 заканчивается generation=2; пользователь подтвердил один перезапуск.
|
||||
|
||||
Выявлена дополнительная искусственная пауза playout: gap_pts_us=2264933 при готовом lookahead
|
||||
превращался в cadence_us=1424602 из-за deltaPTS/1.6. Захват мог быть приостановлен upstream
|
||||
backpressure, но эта пауза проходилась второй раз на показе. Теперь интервал ограничен FPS текущего
|
||||
формата, реальное опережение по-прежнему удерживается audio PTS. Encoded/decoded кадры не удаляются.
|
||||
source_gaps/source_gap_max_us и первый video source gap за секунду показывают устранённый лишний интервал.
|
||||
Тест queued_capture_gap моделирует готовые соседние кадры с разрывом 0.5/2.265/10с на 15/30/60fps;
|
||||
следующий кадр выходит за один обычный интервал, а граница опережения аудио 40мс сохраняется.
|
||||
|
||||
Для установления причины стартовой задержки GUI добавлены call=debug сводки:
|
||||
- video GUI loop: частота timer 20мс и максимальный разрыв event loop, первая задержка >50мс — WARN;
|
||||
- video GUI delivery image_slot_max_us: время синхронных slots imageChanged, отдельно от notification wait;
|
||||
- video GUI paint: ожидание UpdateRequest -> paintEvent, prepare/draw/overlay/painter.end,
|
||||
размеры изображения/окна, DPR при первом замедлении, число move/resize событий.
|
||||
Замена renderer или изменение Windows system timer без этих измерений не выполнялись.
|
||||
Reference in new issue
Block a user