completeCallTracking method
Completes call tracking and emits the final metrics. Call this when the call reaches ACTIVE state. Returns generated CallTimings log entries before removing tracking state.
Implementation
List<Map<String, dynamic>> completeCallTracking(String callId) {
final state = _callTrackers[callId];
if (state == null) return [];
markCallMilestone(callId, milestoneCallActive);
final timingsLogs = generateCallTimingsLogs(callId);
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);
return timingsLogs;
}