From 92ce2d84e91f09f9914894a5d6f247eccdf079ff Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 00:38:43 +0100 Subject: [PATCH] Describe preview lease transfer, callback cancellation and physical cleanup retries --- doc/service_lifecycle.md | 5 +++++ tools/chatgui-android/doc/ARCHITECTURE.md | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/doc/service_lifecycle.md b/doc/service_lifecycle.md index 4ae32305..1e4a0ac4 100644 --- a/doc/service_lifecycle.md +++ b/doc/service_lifecycle.md @@ -531,6 +531,11 @@ Router сохраняет callback/proxy до успешного unregister/clos отказ post сохраняет владельца для явного stop/start. Поздние Bluetooth proxy после stop получают тот же контракт освобождения, не меняя новый активный маршрут. До доставки callback принятый getProfileProxy не даёт router объект, который можно закрыть. +Прямое превью использует отдельные идемпотентные ссылки UI/команды/camera session +на один Surface/texture. Последний release передаёт физическую очистку process-владельцу; +ошибки Surface и texture повторяются независимо без пропуска другой операции. +Предложенная listener ссылка отменяется при исключении, queued receiver игнорирует +released target. Закрытие preview не допускает последующей активации через update. Общая MediaAudioSession при close блокирует новых потребителей и оставляет executor до подтверждённой очистки hardware/router; отказ допускает повторный close. Перед `NativeLib.stop/restart/destroy` проверяется подтверждение очистки сервиса и diff --git a/tools/chatgui-android/doc/ARCHITECTURE.md b/tools/chatgui-android/doc/ARCHITECTURE.md index 9054bc6c..8b23e38c 100644 --- a/tools/chatgui-android/doc/ARCHITECTURE.md +++ b/tools/chatgui-android/doc/ARCHITECTURE.md @@ -235,6 +235,15 @@ feed/pull workers и маршрутом Android Telecom; DSP и сетевой Вызовы lifecycle DSP выполняются после остановки его внешних feed/pull callers. Контракты PCM/PTS: `src/call/call_audio.h`, `src/radio/radio_audio.h`, `jni_bridge/android_jni_bridge.h`. +Прямое превью Camera2 передаёт UI, ожидающей команде и каждой camera session отдельный +`StreamPreviewTarget` на общий Surface/SurfaceTexture. retain создаёт новую ссылку, +release одной ссылки идемпотентен; идентичность источника проверяется через sameSource. +Ошибка listener отменяет предложенную ссылку, queued receiver пропускает released +target. Detach/close продолжают освобождение независимо от ошибки доставки команды; +поздний update не активирует закрытое превью. Последняя ссылка передаёт физическую +очистку process-владельцу: Surface и texture подтверждаются независимо, retry идёт +через 250 мс..30 с. При отказе Handler повторный release завершает её явно. + `CallAudioRouter` сохраняет device callback и каждый полученный Bluetooth proxy до успешного unregister/close. stop инвалидирует callbacks и снимки устройств сразу, очищает независимые ресурсы и бросает ошибку при неподтверждённом результате. @@ -660,6 +669,9 @@ Android hardware и DSP моделируются; AAudio/OEM поведение configure/start/stop/release, Surface callback, playout destroy, join и retry Handler. Проверяются независимое освобождение, запрет release Surface до codec, старый detach, ACK показа/PTS и EOS drain без смены Surface. OEM/реальное декодирование остаются вне модели. +StreamPreviewLifecycleTest проверяет реальные preview/leases: потерю/частичный эффект +callback, отменённые команды, независимые и конкурентные владельцы, физические +отказы release до/после эффекта, retry Handler, detach/visibility и поздние update. RadioCallLifecycleTest использует настоящие RadioCallController, IncomingCallManager, CoreActivity и гудки. Управляемые Android/JNI/repository-границы проверяют все команды сигналинга, pending START, валидацию событий/полной identity, активацию,