perf(watchos-live): FC poussée en temps réel à chaque échantillon (throttle 2s -> envoi immédiat)
Le throttle fixe de 2s ajoutait jusqu'à 2s de latence sur /live vs l'app Exercice native d'Apple (instantanée). Désormais chaque nouvel échantillon FC est envoyé immédiatement ; throttle léger 0.5s conservé uniquement pour calories/distance (anti-saturation BLE). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,10 @@ final class WorkoutManager: NSObject, ObservableObject {
|
||||
private var builder: HKLiveWorkoutBuilder?
|
||||
|
||||
private var lastSentAt = Date.distantPast
|
||||
private let sendInterval: TimeInterval = 2
|
||||
// Throttle léger anti-saturation BLE pour les metrics à haute fréquence
|
||||
// (calories/distance). La FC, elle, est poussée immédiatement à chaque
|
||||
// nouvel échantillon — comme l'app Exercice native d'Apple.
|
||||
private let minSendInterval: TimeInterval = 0.5
|
||||
private var simTask: Task<Void, Never>?
|
||||
|
||||
private override init() { super.init() }
|
||||
@@ -137,7 +140,10 @@ final class WorkoutManager: NSObject, ObservableObject {
|
||||
elapsedSec = elapsed
|
||||
|
||||
let now = Date()
|
||||
guard now.timeIntervalSince(lastSentAt) >= sendInterval else { return }
|
||||
// Nouvelle FC -> envoi immédiat (temps réel, comme Apple). Sinon (mise à
|
||||
// jour calories/distance seule), on applique le throttle anti-saturation.
|
||||
let heartRateUpdated = hr != nil
|
||||
guard heartRateUpdated || now.timeIntervalSince(lastSentAt) >= minSendInterval else { return }
|
||||
lastSentAt = now
|
||||
ConnectivityManager.shared.sendSample([
|
||||
"heartRate": heartRate,
|
||||
|
||||
Reference in New Issue
Block a user