value: function()

in monitoring-stack-cdk/resources/frontend/connect-rtc.js [9710:9897]


            value: function () {
                var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
                    var _this11 = this;
    
                    var timestamp, impl, statsResult, rttReducer, audioInputRttMilliseconds, videoInputRttMilliseconds;
                    return _regenerator2.default.wrap(function _callee3$(_context3) {
                        while (1) {
                            switch (_context3.prev = _context3.next) {
                                case 0:
                                    timestamp = new Date();
    
                                    impl = function () {
                                        var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(stream, streamType) {
                                            var tracks;
                                            return _regenerator2.default.wrap(function _callee2$(_context2) {
                                                while (1) {
                                                    switch (_context2.prev = _context2.next) {
                                                        case 0:
                                                            tracks = [];
    
                                                            if (stream) {
                                                                _context2.next = 3;
                                                                break;
                                                            }
    
                                                            return _context2.abrupt('return', []);
    
                                                        case 3:
                                                            _context2.t0 = streamType;
                                                            _context2.next = _context2.t0 === 'audio_input' ? 6 : _context2.t0 === 'audio_output' ? 6 : _context2.t0 === 'video_input' ? 8 : _context2.t0 === 'video_output' ? 8 : 10;
                                                            break;
    
                                                        case 6:
                                                            tracks = stream.getAudioTracks();
                                                            return _context2.abrupt('break', 11);
    
                                                        case 8:
                                                            tracks = stream.getVideoTracks();
                                                            return _context2.abrupt('break', 11);
    
                                                        case 10:
                                                            throw new Error('Unsupported stream type while trying to get stats: ' + streamType);
    
                                                        case 11:
                                                            _context2.next = 13;
                                                            return Promise.all(tracks.map(function () {
                                                                var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(track) {
                                                                    var self;
                                                                    return _regenerator2.default.wrap(function _callee$(_context) {
                                                                        while (1) {
                                                                            switch (_context.prev = _context.next) {
                                                                                case 0:
                                                                                    if (!_this11._legacyStatsReportSupport) {
                                                                                        _context.next = 5;
                                                                                        break;
                                                                                    }
    
                                                                                    self = _this11;
                                                                                    return _context.abrupt('return', new Promise(function (resolve) {
                                                                                        self._pc.getStats(function (rawStats) {
                                                                                            var digestedStats = (0, _rtpStats.extractMediaStatsFromStats)(timestamp, rawStats.result(), streamType);
                                                                                            if (!digestedStats) {
                                                                                                throw new Error('Failed to extract MediaRtpStats from RTCStatsReport for stream type ' + streamType);
                                                                                            }
                                                                                            resolve(digestedStats);
                                                                                        }, track);
                                                                                    }));
    
                                                                                case 5:
                                                                                    return _context.abrupt('return', _this11._pc.getStats().then(function (rawStats) {
                                                                                        var digestedStats = (0, _rtpStats.extractMediaStatsFromStats)(timestamp, rawStats, streamType);
                                                                                        if (!digestedStats) {
                                                                                            throw new Error('Failed to extract MediaRtpStats from RTCStatsReport for stream type ' + streamType);
                                                                                        }
                                                                                        return digestedStats;
                                                                                    }));
    
                                                                                case 6:
                                                                                case 'end':
                                                                                    return _context.stop();
                                                                            }
                                                                        }
                                                                    }, _callee, _this11);
                                                                }));
    
                                                                return function (_x3) {
                                                                    return _ref3.apply(this, arguments);
                                                                };
                                                            }()));
    
                                                        case 13:
                                                            return _context2.abrupt('return', _context2.sent);
    
                                                        case 14:
                                                        case 'end':
                                                            return _context2.stop();
                                                    }
                                                }
                                            }, _callee2, _this11);
                                        }));
    
                                        return function impl(_x, _x2) {
                                            return _ref2.apply(this, arguments);
                                        };
                                    }();
    
                                    if (!(this._pc && this._pc.signalingState === 'stable')) {
                                        _context3.next = 26;
                                        break;
                                    }
    
                                    _context3.next = 5;
                                    return impl(this._remoteAudioStream, 'audio_input');
    
                                case 5:
                                    _context3.t0 = _context3.sent;
                                    _context3.next = 8;
                                    return impl(this._localStream, 'audio_output');
    
                                case 8:
                                    _context3.t1 = _context3.sent;
                                    _context3.t2 = {
                                        input: _context3.t0,
                                        output: _context3.t1
                                    };
                                    _context3.next = 12;
                                    return impl(this._remoteVideoStream, 'video_input');
    
                                case 12:
                                    _context3.t3 = _context3.sent;
                                    _context3.next = 15;
                                    return impl(this._localStream, 'video_output');
    
                                case 15:
                                    _context3.t4 = _context3.sent;
                                    _context3.t5 = {
                                        input: _context3.t3,
                                        output: _context3.t4
                                    };
                                    statsResult = {
                                        audio: _context3.t2,
                                        video: _context3.t5
                                    };
    
                                    // For consistency's sake, coalesce rttMilliseconds into the output for audio and video.
                                    rttReducer = function rttReducer(acc, stats) {
                                        if (stats.rttMilliseconds !== null && (acc === null || stats.rttMilliseconds > acc)) {
                                            acc = stats.rttMilliseconds;
                                        }
                                        stats._rttMilliseconds = null;
                                        return acc;
                                    };
    
                                    audioInputRttMilliseconds = statsResult.audio.input.reduce(rttReducer, null);
                                    videoInputRttMilliseconds = statsResult.video.input.reduce(rttReducer, null);
    
    
                                    if (audioInputRttMilliseconds !== null) {
                                        statsResult.audio.output.forEach(function (stats) {
                                            stats._rttMilliseconds = audioInputRttMilliseconds;
                                        });
                                    }
    
                                    if (videoInputRttMilliseconds !== null) {
                                        statsResult.video.output.forEach(function (stats) {
                                            stats._rttMilliseconds = videoInputRttMilliseconds;
                                        });
                                    }
    
                                    return _context3.abrupt('return', statsResult);
    
                                case 26:
                                    return _context3.abrupt('return', Promise.reject(new _exceptions.IllegalState()));
    
                                case 27:
                                case 'end':
                                    return _context3.stop();
                            }
                        }
                    }, _callee3, this);
                }));
    
                function getStats() {
                    return _ref.apply(this, arguments);
                }
    
                return getStats;
            }()