Document Samsung surface ACK deadlock and hardware regression results
This commit is contained in:
1 parent
dd5dee2767
commit
bea8f1f901
2 files changed
+55
No files matched your search
@@ -1391,3 +1391,46 @@ encode/decode фазы 640x480/480x640 при 30/50/60; более высоки
|
||||
/tmp/video60-android-final-build.log, /tmp/video60-desktop-cross.log; артефакты Samsung /tmp/video60-sm-results/.
|
||||
Живой звонок новой камеры на Windows не проверен. Установленные приложения не заменялись;
|
||||
аппаратные проверки выполнялись отдельным app_process. Обе стороны нужно обновить для новых режимов.
|
||||
|
||||
Android Surface ACK: устранение фризов 1–2 fps на Samsung, 20.10.2026
|
||||
Свежий logcat /tmp/video-freeze-sm.log, звонок 8563820959416855278, 01:31:23–01:32:39:
|
||||
77 playout сводок, медиана 1.99 показанных fps, медиана dispatch-to-ACK 538мс, максимум 1019мс.
|
||||
Очередь ready=2, awaiting=1; decode останавливается за ожидающим Surface ACK. Смена размера/FPS
|
||||
не устраняет паузы. Это конкретное ожидание подтверждения GUI, не доказательство медленного decoder.
|
||||
|
||||
ViewRootImpl в performDraw захватывает список frame commit callbacks ДО draw TextureView.
|
||||
Прежний onSurfaceTextureUpdated вызывался уже во время draw и регистрировал callback слишком поздно.
|
||||
Он оставался до следующего постороннего UI draw (статистика каждые 500мс). RX ждал ACK,
|
||||
не отправлял следующий кадр на Surface, а без нового кадра TextureView сам не создавал следующий draw.
|
||||
Отсюда цикл ожидания и накопление задержки; пропуск decoded presentation не мог устранить причину.
|
||||
|
||||
CallVideoTexture теперь регистрирует frame commit в OnPreDrawListener, до захвата списка ViewRoot.
|
||||
Timestamp SurfaceTexture читается после commit того же кадра и сверяется с единственным ожидающим PTS.
|
||||
Посторонний draw со старым timestamp не подтверждает новый кадр: настоящий TextureView update сам
|
||||
назначит следующий draw/commit. На API<29 сохраняется postOnAnimation с ожиданием правильного timestamp.
|
||||
Listener снимается при detach; старые callback проверяют закрытие и идентичность Surface.
|
||||
Нет постоянного invalidate-цикла, дополнительного draw после каждого кадра и ACK по таймауту.
|
||||
Encoded порядок, три decoded места, playout/rate/protocol не менялись.
|
||||
Диагностика call=debug: video surface updates/commits/updateToCommitMaxUs/pts и
|
||||
video playback acknowledged/surfaceAckMaxUs/surfaceWaitMs разделяют texture update, commit и RX ACK.
|
||||
Документация API: https://developer.android.com/reference/android/view/ViewTreeObserver#registerFrameCommitCallback(java.lang.Runnable)
|
||||
|
||||
VideoSurfaceProbeActivity в отдельном audio-probe APK проверяет настоящий TextureView/EGL:
|
||||
один EGL-кадр до ACK, точные presentation timestamps, посторонний UI draw раз в 500мс.
|
||||
Команда: adb shell am start -n com.utun.audioprobe/.VideoSurfaceProbeActivity --ei fps 60 --ez legacy false
|
||||
legacy=true воспроизводит прежнюю регистрацию в onSurfaceTextureUpdated.
|
||||
На Samsung старая схема: 15 ACK /8.028с, максимальное ожидание 516414мкс — дефект воспроизведён.
|
||||
Исправленная схема 60fps: 483 ACK /8.050с, максимум 21391мкс; все ACK соответствуют ожидающим PTS.
|
||||
30fps: 241 ACK /8.033с, максимум 31071мкс. Три посторонних draw увидели старый timestamp
|
||||
и правильно дождались настоящего обновления; это не потеря кадра и не неверный ACK.
|
||||
Тест проверяет FPS и число подтверждений/входов, а не отсутствие законных промежуточных UI draw.
|
||||
Лог: /tmp/video-surface-sm-probe.log. Проба второго телефона не получила Surface при Dozing;
|
||||
её остановили, устройство не разблокировали, результатом проверки показа это не считается.
|
||||
|
||||
C-сборка, Android assembleDebug и 114 unit — PASS. Полный check.sh: 162/164, прежние сбои:
|
||||
local_transport peers():95 после TTL age_ms=30335 (отдельный повтор PASS), encrypted_attachment
|
||||
phase=5/heartbeats=12001, артефакт /tmp/utun_encrypted_attachment_3XZGxj.
|
||||
Логи: /tmp/video-surface-freeze-core-build.log, /tmp/video-surface-freeze-android-final.log,
|
||||
/tmp/video-surface-freeze-full-check.log, /tmp/video-surface-freeze-local-retry.log.
|
||||
Основное приложение на телефонах в этой проверке не заменялось; готовый исправленный APK —
|
||||
tools/chatgui-android/app/build/outputs/apk/debug/app-debug.apk. Сетевой звонок с новым APK ещё не проверен.
|
||||
@@ -4,6 +4,16 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[+] **Samsung RX: фризы из-за поздней регистрации Surface ACK** — 20.10.2026:
|
||||
В живом логе 1.99 fps, ожидание ACK 538мс в медиане/1019мс максимум. Callback регистрировался
|
||||
в onSurfaceTextureUpdated после захвата списка текущего draw и ждал постороннего обновления окна.
|
||||
Регистрация перенесена в onPreDraw, timestamp проверяется после commit того же кадра.
|
||||
Отдельный TextureView/EGL тест на Samsung воспроизвёл 15 кадров за 8с до исправления;
|
||||
после — 483/8с при 60fps и 241/8с при 30fps. Основной чат не заменялся, сеть/камера не использовались.
|
||||
Добавлены диагностика texture/commit/ACK и аппаратный regression probe. APK и 114 unit PASS;
|
||||
check.sh 162/164: прежние local_transport TTL (повтор PASS), encrypted_attachment phase=5.
|
||||
Исправленный APK собран, живой сетевой звонок на нём ещё не проверен. Подробности: doc/call_video.txt.
|
||||
|
||||
[+] **Режимы камеры до 60 fps и восстановление задержки без потери encoded кадров** — 20.10.2026:
|
||||
Исправлен фильтр Windows камер 50/100/330 fps; размер/FPS передаются через изолированный camera IPC.
|
||||
Desktop и Android выбирают пары размер/FPS, проверяют encoder/decoder 30/50/60 в обеих ориентациях.
|
||||
@@ -27,6 +37,8 @@
|
||||
В check.sh для HEVC: 162/164, кроме прежнего encrypted_attachment упал peers():95 failed: found;
|
||||
перед отказом endpoint peer=2 удалён по TTL (age_ms=30331). Отдельный повтор прошёл.
|
||||
Логи: /tmp/hevc-high-core-check.log, /tmp/hevc-high-local-transport-retry.log; код local_transport не менялся.
|
||||
Повторилось при исправлении Android Surface ACK: age_ms=30335, тот же peers():95;
|
||||
отдельный повтор PASS. Логи /tmp/video-surface-freeze-full-check.log, /tmp/video-surface-freeze-local-retry.log.
|
||||
|
||||
[ ] **Разобрать ожидание запросов ключей после перезапуска автора в test_encrypted_attachment** — 19.10.2026:
|
||||
При проверке настроек входящих звонков общий check.sh: 160/162; test_encrypted_attachment остановился в phase=5,
|
||||
|
||||
Reference in new issue
Block a user