Browse Source

docs: record bounded video flush lifecycle and validation

master
evgeny 3 days ago
parent
commit
612fb7816d
  1. 28
      doc/call_video.txt
  2. 10
      doc/tasks.md

28
doc/call_video.txt

@ -771,3 +771,31 @@ release->commit 23.29мс по имеющимся совпавшим выбор
подтверждено кодом. Следующее исправление: ограниченное отменяемое продолжение отправки при
исчерпании budget и готовых данных, с сохранением проверок аудиопозиции, сетевого долга и fairness uasync.
Не увеличивать очереди/допуск A/V для маскировки этой паузы. В этом диагностическом проходе код не менялся.
Продолжение TX после исчерпания budget, 15.10.2026
После успешной порции из 16 фрагментов flush ставит один uasync_call_soon, если остался кадр,
разрешённый audio_end_pts и подтверждёнными CAPS. Новый callback выдаёт следующую ограниченную порцию.
uasync обрабатывает только исходный batch очереди immediate, поэтому самопостановка не захватывает
цикл целиком; между batch остаётся обработка сокетов/таймеров. Новый поток или периодический таймер не нужен.
Каждый фрагмент по-прежнему проверяет capabilities, deadline, media debt и место в router send_q.
Выход по backpressure не ставит новое immediate-продолжение; возобновление остаётся за штатными событиями/tick.
Другой flush (например, новый audio block) отменяет прежнее ожидающее продолжение. Callback перед работой
снимает собственный handle; stop/discard отменяют pending до освобождения v/данных. Все операции в uasync-потоке.
Без новых покадровых логов: секундный video TX flow содержит flush_yields (постановки), flush_runs
(выполненные callback), flush_wait_max_us (наибольшее ожидание продолжения, включая опережающий audio flush),
flush_net_wait (выходы по debt/send_q), flush_audio_wait (выходы по audio/CAPS-барьеру).
Выборочный stage=send дополнен budget_yields текущего кадра; queue_age_us сохраняет полный срок в TX.
Эти счётчики различают исчерпание порции, задержку исполнения и ограничение транспорта; они не являются
отдельным измерением физической сети и не должны складываться с queue_age.
test_call_video_flush использует настоящий transport, сериализацию фрагментов и uasync, управляемый router.
45001 байт отправляются тремя порциями (16/16/6), без audio/50мс tick, с проверкой каждого байта и offset.
Проверены остановка при отсутствии места/большом inflight, возобновление без дублей, audio/CAPS-барьеры,
опережающий audio flush, stop/discard с pending callback, равенство alloc/free immediate handles.
Тест прошёл; test_call_video/rate/playout, сетевой test_call (2/2), Qt encoder (13/13), Qt clock
(90/90 ровный вход, 87/90 с задержками, ноль key requests/rejections) также прошли.
Ядро, ChatGUI, APK собраны; Gradle unit-задача актуальна, 103 теста без ошибок (up-to-date).
Артефакты проверки: /tmp/video-flush-*-build.log, /tmp/video-flush-*-test.log,
/tmp/video-flush-regression.log. APK установлен на Samsung и Q8, ChatGUI перезапущен.
Непрерывные журналы пишутся; эффект на живой queue_age/равномерность ещё требует повторного звонка.

10
doc/tasks.md

@ -16,8 +16,14 @@
Финальная сборка, звонок 9002196988226353494: последнее окно SM 29.94fps без drops,
desktop 29.61fps и 8 late drops/20с. Длинные интервалы видны уже при поступлении кадров.
Обнаружено ожидание внешнего события после лимита TX flush 16x1200 байт; крупный SM-кадр
имел queue_age=39.9мс. Следующий шаг — отменяемое продолжение bounded flush без ожидания audio/tick,
с сохранением сетевого backpressure и A/V-барьера; полностью ровный показ пока не подтверждён.
имел queue_age=39.9мс. Добавлено отменяемое продолжение через uasync_call_soon после исчерпания
лимита 16 фрагментов, с сохранением сетевого backpressure и A/V-барьера; закрытие/discard отменяют callback.
test_call_video_flush проверяет целостность 45001 байта без audio/tick, порционность, сетевые ограничения,
audio/CAPS, конкурирующий flush и отмену перед освобождением. Он, video/rate/playout, test_call (2/2)
и Qt clock/encoder (13/13) прошли; Android unit-результаты 103/103 актуальны (Gradle up-to-date).
Ядро/ChatGUI/APK собраны, оба телефона обновлены, ChatGUI перезапущен. В секундной сводке TX появились
flush_yields/runs/wait_max_us/net_wait/audio_wait, в выборочном send — budget_yields.
Следующий шаг — живой замер queue_age и gap_* после исправления; полностью ровный показ пока не подтверждён.
[+] **Измерить задержку видео desktop -> Samsung по этапам** — 15.10.2026:
Добавлена выборочная трассировка по одному окну исходного PTS в секунду: encode/send/receive,

Loading…
Cancel
Save