|
|
|
|
@ -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/равномерность ещё требует повторного звонка. |
|
|
|
|
|