From 612fb7816d3c20f9e3d1eb84486963c4f151e1c0 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 15 Oct 2026 16:44:57 +0200 Subject: [PATCH] docs: record bounded video flush lifecycle and validation --- doc/call_video.txt | 28 ++++++++++++++++++++++++++++ doc/tasks.md | 10 ++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/doc/call_video.txt b/doc/call_video.txt index 253c2ae0..c4d8ccf3 100644 --- a/doc/call_video.txt +++ b/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/равномерность ещё требует повторного звонка. diff --git a/doc/tasks.md b/doc/tasks.md index ebc1aa52..604608ff 100644 --- a/doc/tasks.md +++ b/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,