From 5a1568ef2f39f6ec0912f9bdfe0bbf52fffe02cf Mon Sep 17 00:00:00 2001 From: Sylvain Date: Sun, 31 May 2026 12:05:27 +0200 Subject: [PATCH] =?UTF-8?q?perf(watchos-live):=20FC=20pouss=C3=A9e=20en=20?= =?UTF-8?q?temps=20r=C3=A9el=20=C3=A0=20chaque=20=C3=A9chantillon=20(throt?= =?UTF-8?q?tle=202s=20->=20envoi=20imm=C3=A9diat)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- ios/App/CoachWatch/WorkoutManager.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ios/App/CoachWatch/WorkoutManager.swift b/ios/App/CoachWatch/WorkoutManager.swift index d8dd147..67af0bb 100644 --- a/ios/App/CoachWatch/WorkoutManager.swift +++ b/ios/App/CoachWatch/WorkoutManager.swift @@ -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? 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,