completeCallTracking method

List<Map<String, dynamic>> completeCallTracking(
  1. String callId
)

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;
}