diff --git a/api/uma_metrics.h b/api/uma_metrics.h index 5edb1f48e8..3e0deb0093 100644 --- a/api/uma_metrics.h +++ b/api/uma_metrics.h @@ -191,6 +191,17 @@ enum BundleUsage { kBundleUsageMax }; +// Metrics for reporting configured BUNDLE policy, mapping directly to +// https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum BundlePolicyUsage { + kBundlePolicyUsageBalanced = 0, + kBundlePolicyUsageMaxBundle = 1, + kBundlePolicyUsageMaxCompat = 2, + kBundlePolicyUsageMax +}; + // When adding new metrics please consider using the style described in // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#usage // instead of the legacy enums used above. diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc index 2cb43bf408..406c44de54 100644 --- a/pc/peer_connection.cc +++ b/pc/peer_connection.cc @@ -1738,6 +1738,27 @@ void PeerConnection::SetConnectionState( return; connection_state_ = new_state; Observer()->OnConnectionChange(new_state); + + // The connection state change to connected usually happens once per + // connection which makes it a good point to report metrics. + if (new_state == PeerConnectionState::kConnected) { + // Record bundle-policy from configuration. Done here from + // connectionStateChange to limit to actually established connections. + BundlePolicyUsage policy = kBundlePolicyUsageMax; + switch (configuration_.bundle_policy) { + case kBundlePolicyBalanced: + policy = kBundlePolicyUsageBalanced; + break; + case kBundlePolicyMaxBundle: + policy = kBundlePolicyUsageMaxBundle; + break; + case kBundlePolicyMaxCompat: + policy = kBundlePolicyUsageMaxCompat; + break; + } + RTC_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.BundlePolicy", policy, + kBundlePolicyUsageMax); + } } void PeerConnection::OnIceGatheringChange(