completeCallTracking method
Completes call tracking and emits the final metrics. Call this when the call reaches ACTIVE state.
Implementation
void completeCallTracking(String callId) {
final state = _callTrackers[callId];
if (state == null) return;
markCallMilestone(callId, milestoneCallActive);
final milestones = Map<String, int>.unmodifiable(state.milestones);
final totalTime =
DateTime.now().millisecondsSinceEpoch - state.startTime;
// Calculate derived metrics
final iceGatheringLatency = _calculateIceGatheringLatency(milestones);
final signalingLatency =
_calculateSignalingLatency(milestones, state.isOutbound);
final mediaEstablishmentLatency =
_calculateMediaEstablishmentLatency(milestones);
final timeToFirstRtp = _calculateTimeToFirstRtp(milestones);
final metrics = LatencyMetrics(
callId: callId,
isOutbound: state.isOutbound,
callSetupLatencyMs: totalTime,
timeToFirstRtpMs: timeToFirstRtp,
iceGatheringLatencyMs: iceGatheringLatency,
signalingLatencyMs: signalingLatency,
mediaEstablishmentLatencyMs: mediaEstablishmentLatency,
milestones: milestones,
);
_emitMetrics(metrics);
GlobalLogger().i('Call $callId completed in ${totalTime}ms');
GlobalLogger().d(metrics.toString());
// Clean up
_callTrackers.remove(callId);
}