| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * @param {!Object} stats A stats report. |
| */ |
| function generateLabel(key, stats) { |
| let label = ''; |
| if (stats.hasOwnProperty(key)) { |
| label += key + '=' + stats[key]; |
| } |
| return label; |
| } |
| |
| /** |
| * Formats the display text used for a stats type that is shown |
| * in the stats table or the stats graph. |
| * |
| * @param {!Object} rtcStats The RTCStats object. |
| */ |
| export function generateStatsLabel(rtcStats) { |
| let label = rtcStats.type + ' ('; |
| let labels = []; |
| if (['outbound-rtp', 'remote-outbound-rtp', 'inbound-rtp', |
| 'remote-inbound-rtp'].includes(rtcStats.type)) { |
| labels = ['kind', 'mid', 'rid', 'ssrc', 'rtxSsrc', 'fecSsrc', |
| 'frameHeight', 'contentType', |
| 'active', 'scalabilityMode', |
| 'encoderImplementation', 'decoderImplementation', |
| 'powerEfficientEncoder', 'powerEfficientDecoder', |
| '[codec]']; |
| } else if (['local-candidate', 'remote-candidate'].includes(rtcStats.type)) { |
| labels = ['candidateType', 'tcpType', 'relayProtocol']; |
| } else if (rtcStats.type === 'codec') { |
| labels = ['mimeType', 'payloadType']; |
| } else if (['media-playout', 'media-source'].includes(rtcStats.type)) { |
| labels = ['kind']; |
| } else if (rtcStats.type === 'candidate-pair') { |
| labels = ['state']; |
| } else if (rtcStats.type === 'transport') { |
| labels = ['iceState', 'dtlsState']; |
| } else if (rtcStats.type === 'data-channel') { |
| labels = ['label', 'state']; |
| } |
| labels = labels |
| .map(stat => generateLabel(stat, rtcStats)) |
| .filter(label => !!label); |
| if (labels.length) { |
| label += labels.join(', ') + ', '; |
| } |
| label += 'id=' + rtcStats.id + ')'; |
| return label; |
| } |