fix(wake): kein setTimeout zwischen wake.detect und Callback — JS-Timer im Doze unzuverlaessig
Bridge-Log-Analyse zeigte: setTimeout(200ms) in onWakeDetected feuert im Hintergrund (Display aus) entweder gar nicht oder erst nach 8+ Sekunden, auch mit aktivem PARTIAL_WAKE_LOCK + Foreground-Service. Hermes parkt den JS-Thread sobald er idle ist und wartet auf Native-Wake-Events; die Bridge-Queue fuer Timer kommt erst dran wenn irgendein Native-Event (z.B. Audio-Sample) den Thread weckt. Drei Wake-Events live mitgelesen: - Vordergrund: Timer feuert +209ms (ok) - Hintergrund: Timer feuert +8061ms (wake-callback verspaetet) - Hintergrund: Timer feuert nie (>5 min, gong-Sound bleibt aus) OpenWakeWord.stop() ist davor awaited → Mikro ist garantiert frei. Der 200ms-Sicherheitsabstand war Belt-and-Suspenders, jetzt entbehrlich. Callback wird direkt synchron gefeuert.
This commit is contained in:
@@ -263,15 +263,16 @@ class WakeWordService {
|
||||
return;
|
||||
}
|
||||
this.setState('conversing');
|
||||
// Direkt feuern — KEIN setTimeout. Im Hintergrund (Display aus) parkt
|
||||
// Android den JS-Thread; ein setTimeout(200ms) kann dann Minuten lang
|
||||
// nicht zuendekommen, weil Hermes auf einen Native-Wake-Event wartet.
|
||||
// OpenWakeWord.stop() oben ist awaited → Mikro ist schon frei, kein
|
||||
// 200ms-Sicherheitsabstand noetig.
|
||||
import('./logger').then(m => m.reportAppDebug('wake.detect',
|
||||
`state→conversing, wakeCallbacks.length=${this.wakeCallbacks.length}, scheduling 200ms timeout`)).catch(()=>{});
|
||||
setTimeout(() => {
|
||||
import('./logger').then(m => m.reportAppDebug('wake.detect',
|
||||
`timeout fired, state=${this.state}, cbs=${this.wakeCallbacks.length}`)).catch(()=>{});
|
||||
if (this.state === 'conversing') {
|
||||
this.wakeCallbacks.forEach(cb => cb());
|
||||
}
|
||||
}, 200);
|
||||
`state→conversing, firing ${this.wakeCallbacks.length} callback(s) directly`)).catch(()=>{});
|
||||
this.wakeCallbacks.forEach(cb => {
|
||||
try { cb(); } catch (e) { console.warn('[WakeWord] wake cb err:', e); }
|
||||
});
|
||||
}
|
||||
|
||||
/** Wake-Word PARALLEL zur TTS-Wiedergabe lauschen lassen — User kann
|
||||
|
||||
Reference in New Issue
Block a user