mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 06:10:40 +01:00

This reverts commit f9f71b91ae
.
Reason for revert: Looks like it's breaking WebRtcBrowserTest.RunsAudioVideoWebRTCCallInTwoTabsGetStatsPromise, see https://ci.chromium.org/buildbot/chromium.webrtc.fyi/Mac%20Tester/48322 (win and lin testers are also failing on the same test).
[ RUN ] WebRtcBrowserTest.RunsAudioVideoWebRTCCallInTwoTabsGetStatsPromise
[12743:4099:0305/082149.300326:WARNING:notification_platform_bridge_mac.mm(510)] AlertNotificationService: XPC connection invalidated.
[12743:88323:0305/082150.773242:WARNING:embedded_test_server.cc(228)] Request not handled. Returning 404: /favicon.ico
[12743:775:0305/082150.774044:INFO:CONSOLE(13)] "Requesting doGetUserMedia: constraints: {"audio":true,"video":true}", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082150.969262:INFO:CONSOLE(13)] "Returning request-callback-granted to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082150.983959:INFO:CONSOLE(13)] "Returning ok-got-stream to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.741587:INFO:CONSOLE(13)] "Requesting doGetUserMedia: constraints: {"audio":true,"video":true}", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.749225:INFO:CONSOLE(13)] "Returning request-callback-granted to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.754982:INFO:CONSOLE(13)] "Returning ok-got-stream to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.761516:INFO:CONSOLE(13)] "Returning ok-peerconnection-created to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12752:775:0305/082151.762047:WARNING:RTCPeerConnection.cpp(1151)] mediaConstraints is not a supported argument to addStream.
[12752:775:0305/082151.762096:WARNING:RTCPeerConnection.cpp(1153)] mediaConstraints was
[12743:775:0305/082151.762953:INFO:CONSOLE(13)] "Added local stream.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.763010:INFO:CONSOLE(13)] "Returning ok-added to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.767078:INFO:CONSOLE(13)] "Returning ok-peerconnection-created to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12755:775:0305/082151.767614:WARNING:RTCPeerConnection.cpp(1151)] mediaConstraints is not a supported argument to addStream.
[12755:775:0305/082151.767660:WARNING:RTCPeerConnection.cpp(1153)] mediaConstraints was
[12743:775:0305/082151.768452:INFO:CONSOLE(13)] "Added local stream.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.768523:INFO:CONSOLE(13)] "Returning ok-added to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.776171:INFO:CONSOLE(13)] "Returning ok-created to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.777197:INFO:CONSOLE(13)] "Returning ok-created to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12752:42755:0305/082151.777736:WARNING:mediasession.cc(353)] Duplicate id found. Reassigning from 104 to 127
[12752:42755:0305/082151.777766:WARNING:mediasession.cc(353)] Duplicate id found. Reassigning from 106 to 125
[12752:42755:0305/082151.777829:WARNING:mediasession.cc(353)] Duplicate id found. Reassigning from 103 to 124
[12752:42755:0305/082151.777850:WARNING:mediasession.cc(353)] Duplicate id found. Reassigning from 105 to 123
[12743:775:0305/082151.778835:INFO:CONSOLE(13)] "createOffer(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.779780:INFO:CONSOLE(13)] "Returning ok-{"type":"offer","sdp":"v=0\r\no=- 3491235150284933882 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video data\r\na=msid-semantic: WMS Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:ySYi\r\na=ice-pwd:5E4b4cjl+QFLqPoIgvleZ4m4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 94:ED:E9:BB:45:FF:BE:85:C2:98:E5:45:3A:AB:A9:4B:3B:F0:04:D7:B1:05:45:E9:6D:14:3C:FE:62:5C:23:03\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:3632917417 cname:J9N+OjIJeArKjXXh\r\na=ssrc:3632917417 msid:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU 6e608085-751b-4945-8982-6f4aedf7bef6\r\na=ssrc:3632917417 mslabel:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU\r\na=ssrc:3632917417 label:6e608085-751b-4945-8982-6f4aedf7bef6\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 124 127 123 125 107 108\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:ySYi\r\na=ice-pwd:5E4b4cjl+QFLqPoIgvleZ4m4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 94:ED:E9:BB:45:FF:BE:85:C2:98:E5:45:3A:AB:A9:4B:3B:F0:04:D7:B1:05:45:E9:6D:14:3C:FE:62:5C:23:03\r\na=setup:actpass\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=sendrecv\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=420032\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:124 rtx/90000\r\na=fmtp:124 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=127\r\na=rtpmap:125 red/90000\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 ulpfec/90000\r\na=ssrc-group:FID 1955312265 3021315394\r\na=ssrc:1955312265 cname:J9N+OjIJeArKjXXh\r\na=ssrc:1955312265 msid:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU 7cd84f82-8fa1-42ca-b0ac-326aa0925f05\r\na=ssrc:1955312265 mslabel:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU\r\na=ssrc:1955312265 label:7cd84f82-8fa1-42ca-b0ac-326aa0925f05\r\na=ssrc:3021315394 cname:J9N+OjIJeArKjXXh\r\na=ssrc:3021315394 msid:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU 7cd84f82-8fa1-42ca-b0ac-326aa0925f05\r\na=ssrc:3021315394 mslabel:Nb7epCcAUJwMKKzTV36r1RGOlNSIxBooVpgU\r\na=ssrc:3021315394 label:7cd84f82-8fa1-42ca-b0ac-326aa0925f05\r\nm=application 9 DTLS/SCTP 5000\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:ySYi\r\na=ice-pwd:5E4b4cjl+QFLqPoIgvleZ4m4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 94:ED:E9:BB:45:FF:BE:85:C2:98:E5:45:3A:AB:A9:4B:3B:F0:04:D7:B1:05:45:E9:6D:14:3C:FE:62:5C:23:03\r\na=setup:actpass\r\na=mid:data\r\na=sctpmap:5000 webrtc-datachannel 1024\r\n"} to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.781514:INFO:CONSOLE(13)] "setLocalDescription(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12755:41731:0305/082151.782411:WARNING:channel.cc(1039)] Trying to cache the Absolute Send Time extension id but the SRTP is not active.
[12752:43011:0305/082151.884258:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7fab620da600:audio:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(5, 0) failed: 0
[12752:43011:0305/082151.884438:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7fab620dd000:video:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(1, 65536) failed: 0
[12752:43011:0305/082151.884481:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7fab620dd000:video:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(2, 65536) failed: 0
[12752:43011:0305/082151.884513:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7fab620dd000:video:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(5, 0) failed: 0
[12755:41731:0305/082151.922410:WARNING:channel.cc(1039)] Trying to cache the Absolute Send Time extension id but the SRTP is not active.
[12743:775:0305/082151.924626:INFO:CONSOLE(13)] "createAnswer(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.925506:INFO:CONSOLE(13)] "Returning ok-{"type":"answer","sdp":"v=0\r\no=- 6096510228474213355 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video data\r\na=msid-semantic: WMS 7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:X54X\r\na=ice-pwd:VsLK5tJ8so82vOn1y+R72WBi\r\na=ice-options:trickle\r\na=fingerprint:sha-256 EC:A9:2D:A2:D9:44:F0:A4:EE:58:FC:32:DF:C4:8C:B0:FC:25:C3:08:BE:7E:D7:59:B8:A0:20:16:DA:5A:A5:7F\r\na=setup:active\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:3234277340 cname:PfS0qqt1exijuETX\r\na=ssrc:3234277340 msid:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN 9ddb9a77-20aa-42ba-8540-9e32f3dbb0af\r\na=ssrc:3234277340 mslabel:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN\r\na=ssrc:3234277340 label:9ddb9a77-20aa-42ba-8540-9e32f3dbb0af\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 124 127 123 125 107 108\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:X54X\r\na=ice-pwd:VsLK5tJ8so82vOn1y+R72WBi\r\na=ice-options:trickle\r\na=fingerprint:sha-256 EC:A9:2D:A2:D9:44:F0:A4:EE:58:FC:32:DF:C4:8C:B0:FC:25:C3:08:BE:7E:D7:59:B8:A0:20:16:DA:5A:A5:7F\r\na=setup:active\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=sendrecv\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=420032\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:124 rtx/90000\r\na=fmtp:124 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=127\r\na=rtpmap:125 red/90000\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 ulpfec/90000\r\na=ssrc-group:FID 3517790794 302440277\r\na=ssrc:3517790794 cname:PfS0qqt1exijuETX\r\na=ssrc:3517790794 msid:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN 2ffa90e8-b71e-463b-a105-d5a65e0ac205\r\na=ssrc:3517790794 mslabel:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN\r\na=ssrc:3517790794 label:2ffa90e8-b71e-463b-a105-d5a65e0ac205\r\na=ssrc:302440277 cname:PfS0qqt1exijuETX\r\na=ssrc:302440277 msid:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN 2ffa90e8-b71e-463b-a105-d5a65e0ac205\r\na=ssrc:302440277 mslabel:7RUsJxsD5w2UmR1xiHiKSWHyYY8RVKSGT8hN\r\na=ssrc:302440277 label:2ffa90e8-b71e-463b-a105-d5a65e0ac205\r\nm=application 9 DTLS/SCTP 5000\r\nc=IN IP4 0.0.0.0\r\nb=AS:30\r\na=ice-ufrag:X54X\r\na=ice-pwd:VsLK5tJ8so82vOn1y+R72WBi\r\na=ice-options:trickle\r\na=fingerprint:sha-256 EC:A9:2D:A2:D9:44:F0:A4:EE:58:FC:32:DF:C4:8C:B0:FC:25:C3:08:BE:7E:D7:59:B8:A0:20:16:DA:5A:A5:7F\r\na=setup:active\r\na=mid:data\r\na=sctpmap:5000 webrtc-datachannel 1024\r\n"} to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.925954:INFO:CONSOLE(13)] "Receiving remote stream...", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.926204:INFO:CONSOLE(13)] "setRemoteDescription(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.939935:INFO:CONSOLE(13)] "Returning ok-verified to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.940232:INFO:CONSOLE(13)] "setLocalDescription(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12752:43011:0305/082151.942049:WARNING:p2ptransportchannel.cc(1093)] SetOption(1, 65536) failed: 0
[12752:43011:0305/082151.942084:WARNING:p2ptransportchannel.cc(1093)] SetOption(2, 65536) failed: 0
[12743:775:0305/082151.946009:INFO:CONSOLE(13)] "Receiving remote stream...", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.946327:INFO:CONSOLE(13)] "setRemoteDescription(): success.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.946367:INFO:CONSOLE(13)] "Returning ok-accepted-answer to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082151.950048:INFO:CONSOLE(368)] "Still ICE gathering - waiting...", source: http://127.0.0.1:50666/webrtc/peerconnection.js (368)
[12755:41731:0305/082152.030690:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7f8a9c809a00:audio:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(1, 65536) failed: 0
[12755:41731:0305/082152.030759:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7f8a9c809a00:audio:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(2, 65536) failed: 0
[12755:41731:0305/082152.030785:WARNING:p2ptransportchannel.cc(638)] Jingle:Port[0x7f8a9c809a00:audio:1:0:local:Net[en0:192.168.195.x/24:Ethernet]]: SetOption(5, 0) failed: 0
[12743:775:0305/082152.048464:INFO:CONSOLE(13)] "Returning [{"candidate":"candidate:2504140996 1 udp 2122260223 192.168.195.156 65179 typ host generation 0 ufrag X54X network-id 1","sdpMid":"audio","sdpMLineIndex":0},{"candidate":"candidate:3686913076 1 tcp 1518280447 192.168.195.156 9 typ host tcptype active generation 0 ufrag X54X network-id 1","sdpMid":"audio","sdpMLineIndex":0}] to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082152.049868:INFO:CONSOLE(13)] "Returning ok-received-candidates to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082152.050468:INFO:CONSOLE(13)] "Returning [{"candidate":"candidate:2504140996 1 udp 2122260223 192.168.195.156 60484 typ host generation 0 ufrag ySYi network-id 1","sdpMid":"audio","sdpMLineIndex":0},{"candidate":"candidate:2504140996 1 udp 2122260223 192.168.195.156 62030 typ host generation 0 ufrag ySYi network-id 1","sdpMid":"video","sdpMLineIndex":1},{"candidate":"candidate:2504140996 1 udp 2122260223 192.168.195.156 50175 typ host generation 0 ufrag ySYi network-id 1","sdpMid":"data","sdpMLineIndex":2},{"candidate":"candidate:3686913076 1 tcp 1518280447 192.168.195.156 9 typ host tcptype active generation 0 ufrag ySYi network-id 1","sdpMid":"audio","sdpMLineIndex":0},{"candidate":"candidate:3686913076 1 tcp 1518280447 192.168.195.156 9 typ host tcptype active generation 0 ufrag ySYi network-id 1","sdpMid":"video","sdpMLineIndex":1},{"candidate":"candidate:3686913076 1 tcp 1518280447 192.168.195.156 9 typ host tcptype active generation 0 ufrag ySYi network-id 1","sdpMid":"data","sdpMLineIndex":2}] to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082152.052841:INFO:CONSOLE(13)] "Returning ok-received-candidates to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082152.053385:INFO:CONSOLE(13)] "Returning ["codec","inbound-rtp","outbound-rtp","peer-connection","stream","track","data-channel","transport","local-candidate","remote-candidate","candidate-pair","certificate"] to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
[12743:775:0305/082152.061797:INFO:CONSOLE(13)] "Returning Test failed: Error: stats.hugeFramesSent is not a whitelisted member: 0
at failTest (http://127.0.0.1:50666/webrtc/test_functions.js:46:15)
at verifyStatsIsWhitelisted_ (http://127.0.0.1:50666/webrtc/peerconnection_getstats.js:386:13)
at http://127.0.0.1:50666/webrtc/peerconnection_getstats.js:273:9 to test.", source: http://127.0.0.1:50666/webrtc/test_functions.js (13)
../../chrome/browser/media/webrtc/webrtc_browsertest_base.cc:533: Failure
Value of: base::StartsWith(result, "ok-", base::CompareCase::SENSITIVE)
Actual: false
Expected: true
../../chrome/browser/media/webrtc/webrtc_browsertest_base.cc:138: Failure
Value of: value
Actual: false
Expected: true
BrowserTestBase received signal: Segmentation fault: 11. Backtrace:
0 browser_tests 0x0000000105c700cc base::debug::StackTrace::StackTrace(unsigned long) + 28
1 browser_tests 0x0000000106271902 content::(anonymous namespace)::DumpStackTraceSignalHandler(int) + 226
2 libsystem_platform.dylib 0x00007fffa63ccb3a _sigtramp + 26
3 ??? 0x0000000000000000 0x0 + 0
4 browser_tests 0x0000000102ee29e3 WebRtcTestBase::VerifyStatsGeneratedPromise(content::WebContents*) const + 467
5 browser_tests 0x0000000102edb4d1 WebRtcBrowserTest_RunsAudioVideoWebRTCCallInTwoTabsGetStatsPromise_Test::RunTestOnMainThread() + 817
6 browser_tests 0x000000010627162d content::BrowserTestBase::ProxyRunTestOnMainThreadLoop() + 557
7 browser_tests 0x0000000105da0d23 ChromeBrowserMainParts::PreMainMessageLoopRunImpl() + 4227
8 browser_tests 0x0000000105d9fb9e ChromeBrowserMainParts::PreMainMessageLoopRun() + 62
9 browser_tests 0x0000000104a3a3d3 content::BrowserMainLoop::PreMainMessageLoopRun() + 67
10 browser_tests 0x0000000104df0dc7 content::StartupTaskRunner::RunAllTasksNow() + 39
11 browser_tests 0x0000000104a38d35 content::BrowserMainLoop::CreateStartupTasks() + 661
12 browser_tests 0x0000000104a3c8f0 content::BrowserMainRunnerImpl::Initialize(content::MainFunctionParams const&) + 96
13 browser_tests 0x0000000104a36c94 content::BrowserMain(content::MainFunctionParams const&) + 180
14 browser_tests 0x0000000105c3ebb9 content::ContentMainRunnerImpl::Run() + 377
15 browser_tests 0x000000010784a8f4 service_manager::Main(service_manager::MainParams const&) + 2324
16 browser_tests 0x0000000105c3e094 content::ContentMain(content::ContentMainParams const&) + 68
17 browser_tests 0x0000000106271216 content::BrowserTestBase::SetUp() + 2550
18 browser_tests 0x0000000105d2993e InProcessBrowserTest::SetUp() + 398
19 browser_tests 0x0000000104032b51 testing::Test::Run() + 97
20 browser_tests 0x0000000104033770 testing::TestInfo::Run() + 288
21 browser_tests 0x0000000104033cd7 testing::TestCase::Run() + 263
22 browser_tests 0x000000010403b167 testing::internal::UnitTestImpl::RunAllTests() + 903
23 browser_tests 0x000000010403adb3 testing::UnitTest::Run() + 163
24 browser_tests 0x0000000105d41c67 base::TestSuite::Run() + 167
25 browser_tests 0x0000000105c63755 ChromeTestSuiteRunner::RunTestSuite(int, char**) + 37
26 browser_tests 0x00000001062b6597 content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) + 391
27 browser_tests 0x0000000105c63c3c LaunchChromeTests(unsigned long, content::TestLauncherDelegate*, int, char**) + 348
28 browser_tests 0x0000000105c636ce main + 94
29 libdyld.dylib 0x00007fffa61bd235 start + 1
30 ??? 0x000000000000000a 0x0 + 10
Original change's description:
> Add hugeFramesSent GetStats metric
>
> Bug: webrtc:8901
> Change-Id: I36021c1160c3426d3bfa0f37ff0adaa35710b93e
> Reviewed-on: https://webrtc-review.googlesource.com/54420
> Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22290}
TBR=solenberg@webrtc.org,ilnik@webrtc.org,hbos@webrtc.org,sprang@webrtc.org,stefan@webrtc.org,hta@webrtc.org
Change-Id: I6a7501c46f928281d357da37f9232bb92c5a4f19
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8901
Reviewed-on: https://webrtc-review.googlesource.com/60120
Reviewed-by: Max Morin <maxmorin@webrtc.org>
Commit-Queue: Max Morin <maxmorin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22303}
450 lines
16 KiB
C++
450 lines
16 KiB
C++
/*
|
|
* Copyright 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// This file contains structures used for retrieving statistics from an ongoing
|
|
// libjingle session.
|
|
|
|
#ifndef API_STATSTYPES_H_
|
|
#define API_STATSTYPES_H_
|
|
|
|
#include <algorithm>
|
|
#include <list>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "rtc_base/basictypes.h"
|
|
#include "rtc_base/constructormagic.h"
|
|
#include "rtc_base/refcount.h"
|
|
#include "rtc_base/scoped_ref_ptr.h"
|
|
#include "rtc_base/stringencode.h"
|
|
#include "rtc_base/thread_checker.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class StatsReport {
|
|
public:
|
|
// Indicates whether a track is for sending or receiving.
|
|
// Used in reports for audio/video tracks.
|
|
enum Direction {
|
|
kSend = 0,
|
|
kReceive,
|
|
};
|
|
|
|
enum StatsType {
|
|
// StatsReport types.
|
|
// A StatsReport of |type| = "googSession" contains overall information
|
|
// about the thing libjingle calls a session (which may contain one
|
|
// or more RTP sessions.
|
|
kStatsReportTypeSession,
|
|
|
|
// A StatsReport of |type| = "googTransport" contains information
|
|
// about a libjingle "transport".
|
|
kStatsReportTypeTransport,
|
|
|
|
// A StatsReport of |type| = "googComponent" contains information
|
|
// about a libjingle "channel" (typically, RTP or RTCP for a transport).
|
|
// This is intended to be the same thing as an ICE "Component".
|
|
kStatsReportTypeComponent,
|
|
|
|
// A StatsReport of |type| = "googCandidatePair" contains information
|
|
// about a libjingle "connection" - a single source/destination port pair.
|
|
// This is intended to be the same thing as an ICE "candidate pair".
|
|
kStatsReportTypeCandidatePair,
|
|
|
|
// A StatsReport of |type| = "VideoBWE" is statistics for video Bandwidth
|
|
// Estimation, which is global per-session. The |id| field is "bweforvideo"
|
|
// (will probably change in the future).
|
|
kStatsReportTypeBwe,
|
|
|
|
// A StatsReport of |type| = "ssrc" is statistics for a specific rtp stream.
|
|
// The |id| field is the SSRC in decimal form of the rtp stream.
|
|
kStatsReportTypeSsrc,
|
|
|
|
// A StatsReport of |type| = "remoteSsrc" is statistics for a specific
|
|
// rtp stream, generated by the remote end of the connection.
|
|
kStatsReportTypeRemoteSsrc,
|
|
|
|
// A StatsReport of |type| = "googTrack" is statistics for a specific media
|
|
// track. The |id| field is the track id.
|
|
kStatsReportTypeTrack,
|
|
|
|
// A StatsReport of |type| = "localcandidate" or "remotecandidate" is
|
|
// attributes on a specific ICE Candidate. It links to its connection pair
|
|
// by candidate id. The string value is taken from
|
|
// http://w3c.github.io/webrtc-stats/#rtcstatstype-enum*.
|
|
kStatsReportTypeIceLocalCandidate,
|
|
kStatsReportTypeIceRemoteCandidate,
|
|
|
|
// A StatsReport of |type| = "googCertificate" contains an SSL certificate
|
|
// transmitted by one of the endpoints of this connection. The |id| is
|
|
// controlled by the fingerprint, and is used to identify the certificate in
|
|
// the Channel stats (as "googLocalCertificateId" or
|
|
// "googRemoteCertificateId") and in any child certificates (as
|
|
// "googIssuerId").
|
|
kStatsReportTypeCertificate,
|
|
|
|
// A StatsReport of |type| = "datachannel" with statistics for a
|
|
// particular DataChannel.
|
|
kStatsReportTypeDataChannel,
|
|
};
|
|
|
|
enum StatsValueName {
|
|
kStatsValueNameActiveConnection,
|
|
kStatsValueNameAecDivergentFilterFraction,
|
|
kStatsValueNameAudioInputLevel,
|
|
kStatsValueNameAudioOutputLevel,
|
|
kStatsValueNameBytesReceived,
|
|
kStatsValueNameBytesSent,
|
|
kStatsValueNameCodecImplementationName,
|
|
kStatsValueNameConcealedSamples,
|
|
kStatsValueNameConcealmentEvents,
|
|
kStatsValueNameDataChannelId,
|
|
kStatsValueNameFramesDecoded,
|
|
kStatsValueNameFramesEncoded,
|
|
kStatsValueNameJitterBufferDelay,
|
|
kStatsValueNameMediaType,
|
|
kStatsValueNamePacketsLost,
|
|
kStatsValueNamePacketsReceived,
|
|
kStatsValueNamePacketsSent,
|
|
kStatsValueNameProtocol,
|
|
kStatsValueNameQpSum,
|
|
kStatsValueNameReceiving,
|
|
kStatsValueNameSelectedCandidatePairId,
|
|
kStatsValueNameSsrc,
|
|
kStatsValueNameState,
|
|
kStatsValueNameTotalAudioEnergy,
|
|
kStatsValueNameTotalSamplesDuration,
|
|
kStatsValueNameTotalSamplesReceived,
|
|
kStatsValueNameTransportId,
|
|
kStatsValueNameSentPingRequestsTotal,
|
|
kStatsValueNameSentPingRequestsBeforeFirstResponse,
|
|
kStatsValueNameSentPingResponses,
|
|
kStatsValueNameRecvPingRequests,
|
|
kStatsValueNameRecvPingResponses,
|
|
kStatsValueNameSentStunKeepaliveRequests,
|
|
kStatsValueNameRecvStunKeepaliveResponses,
|
|
kStatsValueNameStunKeepaliveRttTotal,
|
|
kStatsValueNameStunKeepaliveRttSquaredTotal,
|
|
|
|
// Internal StatsValue names.
|
|
kStatsValueNameAccelerateRate,
|
|
kStatsValueNameActualEncBitrate,
|
|
kStatsValueNameAdaptationChanges,
|
|
kStatsValueNameAvailableReceiveBandwidth,
|
|
kStatsValueNameAvailableSendBandwidth,
|
|
kStatsValueNameAvgEncodeMs,
|
|
kStatsValueNameBandwidthLimitedResolution,
|
|
kStatsValueNameBucketDelay,
|
|
kStatsValueNameCaptureStartNtpTimeMs,
|
|
kStatsValueNameCandidateIPAddress,
|
|
kStatsValueNameCandidateNetworkType,
|
|
kStatsValueNameCandidatePortNumber,
|
|
kStatsValueNameCandidatePriority,
|
|
kStatsValueNameCandidateTransportType,
|
|
kStatsValueNameCandidateType,
|
|
kStatsValueNameChannelId,
|
|
kStatsValueNameCodecName,
|
|
kStatsValueNameComponent,
|
|
kStatsValueNameContentName,
|
|
kStatsValueNameContentType,
|
|
kStatsValueNameCpuLimitedResolution,
|
|
kStatsValueNameCurrentDelayMs,
|
|
kStatsValueNameDecodeMs,
|
|
kStatsValueNameDecodingCNG,
|
|
kStatsValueNameDecodingCTN,
|
|
kStatsValueNameDecodingCTSG,
|
|
kStatsValueNameDecodingMutedOutput,
|
|
kStatsValueNameDecodingNormal,
|
|
kStatsValueNameDecodingPLC,
|
|
kStatsValueNameDecodingPLCCNG,
|
|
kStatsValueNameDer,
|
|
kStatsValueNameDtlsCipher,
|
|
kStatsValueNameEchoDelayMedian,
|
|
kStatsValueNameEchoDelayStdDev,
|
|
kStatsValueNameEchoReturnLoss,
|
|
kStatsValueNameEchoReturnLossEnhancement,
|
|
kStatsValueNameEncodeUsagePercent,
|
|
kStatsValueNameExpandRate,
|
|
kStatsValueNameFingerprint,
|
|
kStatsValueNameFingerprintAlgorithm,
|
|
kStatsValueNameFirsReceived,
|
|
kStatsValueNameFirsSent,
|
|
kStatsValueNameFrameHeightInput,
|
|
kStatsValueNameFrameHeightReceived,
|
|
kStatsValueNameFrameHeightSent,
|
|
kStatsValueNameFrameRateDecoded,
|
|
kStatsValueNameFrameRateInput,
|
|
kStatsValueNameFrameRateOutput,
|
|
kStatsValueNameFrameRateReceived,
|
|
kStatsValueNameFrameRateSent,
|
|
kStatsValueNameFrameWidthInput,
|
|
kStatsValueNameFrameWidthReceived,
|
|
kStatsValueNameFrameWidthSent,
|
|
kStatsValueNameHasEnteredLowResolution,
|
|
kStatsValueNameInitiator,
|
|
kStatsValueNameInterframeDelayMaxMs, // Max over last 10 seconds.
|
|
kStatsValueNameIssuerId,
|
|
kStatsValueNameJitterBufferMs,
|
|
kStatsValueNameJitterReceived,
|
|
kStatsValueNameLabel,
|
|
kStatsValueNameLocalAddress,
|
|
kStatsValueNameLocalCandidateId,
|
|
kStatsValueNameLocalCandidateType,
|
|
kStatsValueNameLocalCertificateId,
|
|
kStatsValueNameMaxDecodeMs,
|
|
kStatsValueNameMinPlayoutDelayMs,
|
|
kStatsValueNameNacksReceived,
|
|
kStatsValueNameNacksSent,
|
|
kStatsValueNamePlisReceived,
|
|
kStatsValueNamePlisSent,
|
|
kStatsValueNamePreemptiveExpandRate,
|
|
kStatsValueNamePreferredJitterBufferMs,
|
|
kStatsValueNameRemoteAddress,
|
|
kStatsValueNameRemoteCandidateId,
|
|
kStatsValueNameRemoteCandidateType,
|
|
kStatsValueNameRemoteCertificateId,
|
|
kStatsValueNameRenderDelayMs,
|
|
kStatsValueNameResidualEchoLikelihood,
|
|
kStatsValueNameResidualEchoLikelihoodRecentMax,
|
|
kStatsValueNameAnaBitrateActionCounter,
|
|
kStatsValueNameAnaChannelActionCounter,
|
|
kStatsValueNameAnaDtxActionCounter,
|
|
kStatsValueNameAnaFecActionCounter,
|
|
kStatsValueNameAnaFrameLengthIncreaseCounter,
|
|
kStatsValueNameAnaFrameLengthDecreaseCounter,
|
|
kStatsValueNameAnaUplinkPacketLossFraction,
|
|
kStatsValueNameRetransmitBitrate,
|
|
kStatsValueNameRtt,
|
|
kStatsValueNameSecondaryDecodedRate,
|
|
kStatsValueNameSecondaryDiscardedRate,
|
|
kStatsValueNameSendPacketsDiscarded,
|
|
kStatsValueNameSpeechExpandRate,
|
|
kStatsValueNameSrtpCipher,
|
|
kStatsValueNameTargetDelayMs,
|
|
kStatsValueNameTargetEncBitrate,
|
|
kStatsValueNameTimingFrameInfo, // Result of |TimingFrameInfo::ToString|
|
|
kStatsValueNameTrackId,
|
|
kStatsValueNameTransmitBitrate,
|
|
kStatsValueNameTransportType,
|
|
kStatsValueNameTypingNoiseState,
|
|
kStatsValueNameWritable,
|
|
};
|
|
|
|
class IdBase : public rtc::RefCountInterface {
|
|
public:
|
|
~IdBase() override;
|
|
StatsType type() const;
|
|
|
|
// Users of IdBase will be using the Id typedef, which is compatible with
|
|
// this Equals() function. It simply calls the protected (and overridden)
|
|
// Equals() method.
|
|
bool Equals(const rtc::scoped_refptr<IdBase>& other) const {
|
|
return Equals(*other.get());
|
|
}
|
|
|
|
virtual std::string ToString() const = 0;
|
|
|
|
protected:
|
|
// Protected since users of the IdBase type will be using the Id typedef.
|
|
virtual bool Equals(const IdBase& other) const;
|
|
|
|
explicit IdBase(StatsType type); // Only meant for derived classes.
|
|
const StatsType type_;
|
|
|
|
static const char kSeparator = '_';
|
|
};
|
|
|
|
typedef rtc::scoped_refptr<IdBase> Id;
|
|
|
|
struct Value {
|
|
enum Type {
|
|
kInt, // int.
|
|
kInt64, // int64_t.
|
|
kFloat, // float.
|
|
kString, // std::string
|
|
kStaticString, // const char*.
|
|
kBool, // bool.
|
|
kId, // Id.
|
|
};
|
|
|
|
Value(StatsValueName name, int64_t value, Type int_type);
|
|
Value(StatsValueName name, float f);
|
|
Value(StatsValueName name, const std::string& value);
|
|
Value(StatsValueName name, const char* value);
|
|
Value(StatsValueName name, bool b);
|
|
Value(StatsValueName name, const Id& value);
|
|
|
|
~Value();
|
|
|
|
// Support ref counting. Note that for performance reasons, we
|
|
// don't use thread safe operations. Therefore, all operations
|
|
// affecting the ref count (in practice, creation and copying of
|
|
// the Values mapping) must occur on webrtc's signalling thread.
|
|
int AddRef() const {
|
|
RTC_DCHECK_RUN_ON(&thread_checker_);
|
|
return ++ref_count_;
|
|
}
|
|
int Release() const {
|
|
RTC_DCHECK_RUN_ON(&thread_checker_);
|
|
int count = --ref_count_;
|
|
if (!count)
|
|
delete this;
|
|
return count;
|
|
}
|
|
|
|
// TODO(tommi): This compares name as well as value...
|
|
// I think we should only need to compare the value part and
|
|
// move the name part into a hash map.
|
|
bool Equals(const Value& other) const;
|
|
|
|
// Comparison operators. Return true iff the current instance is of the
|
|
// correct type and holds the same value. No conversion is performed so
|
|
// a string value of "123" is not equal to an int value of 123 and an int
|
|
// value of 123 is not equal to a float value of 123.0f.
|
|
// One exception to this is that types kInt and kInt64 can be compared and
|
|
// kString and kStaticString too.
|
|
bool operator==(const std::string& value) const;
|
|
bool operator==(const char* value) const;
|
|
bool operator==(int64_t value) const;
|
|
bool operator==(bool value) const;
|
|
bool operator==(float value) const;
|
|
bool operator==(const Id& value) const;
|
|
|
|
// Getters that allow getting the native value directly.
|
|
// The caller must know the type beforehand or else hit a check.
|
|
int int_val() const;
|
|
int64_t int64_val() const;
|
|
float float_val() const;
|
|
const char* static_string_val() const;
|
|
const std::string& string_val() const;
|
|
bool bool_val() const;
|
|
const Id& id_val() const;
|
|
|
|
// Returns the string representation of |name|.
|
|
const char* display_name() const;
|
|
|
|
// Converts the native value to a string representation of the value.
|
|
std::string ToString() const;
|
|
|
|
Type type() const { return type_; }
|
|
|
|
// TODO(tommi): Move |name| and |display_name| out of the Value struct.
|
|
const StatsValueName name;
|
|
|
|
private:
|
|
rtc::ThreadChecker thread_checker_;
|
|
mutable int ref_count_ RTC_GUARDED_BY(thread_checker_) = 0;
|
|
|
|
const Type type_;
|
|
// TODO(tommi): Use C++ 11 union and make value_ const.
|
|
union InternalType {
|
|
int int_;
|
|
int64_t int64_;
|
|
float float_;
|
|
bool bool_;
|
|
std::string* string_;
|
|
const char* static_string_;
|
|
Id* id_;
|
|
} value_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(Value);
|
|
};
|
|
|
|
typedef rtc::scoped_refptr<Value> ValuePtr;
|
|
typedef std::map<StatsValueName, ValuePtr> Values;
|
|
|
|
// Ownership of |id| is passed to |this|.
|
|
explicit StatsReport(const Id& id);
|
|
~StatsReport();
|
|
|
|
// Factory functions for various types of stats IDs.
|
|
static Id NewBandwidthEstimationId();
|
|
static Id NewTypedId(StatsType type, const std::string& id);
|
|
static Id NewTypedIntId(StatsType type, int id);
|
|
static Id NewIdWithDirection(
|
|
StatsType type, const std::string& id, Direction direction);
|
|
static Id NewCandidateId(bool local, const std::string& id);
|
|
static Id NewComponentId(
|
|
const std::string& content_name, int component);
|
|
static Id NewCandidatePairId(
|
|
const std::string& content_name, int component, int index);
|
|
|
|
const Id& id() const { return id_; }
|
|
StatsType type() const { return id_->type(); }
|
|
double timestamp() const { return timestamp_; }
|
|
void set_timestamp(double t) { timestamp_ = t; }
|
|
bool empty() const { return values_.empty(); }
|
|
const Values& values() const { return values_; }
|
|
|
|
const char* TypeToString() const;
|
|
|
|
void AddString(StatsValueName name, const std::string& value);
|
|
void AddString(StatsValueName name, const char* value);
|
|
void AddInt64(StatsValueName name, int64_t value);
|
|
void AddInt(StatsValueName name, int value);
|
|
void AddFloat(StatsValueName name, float value);
|
|
void AddBoolean(StatsValueName name, bool value);
|
|
void AddId(StatsValueName name, const Id& value);
|
|
|
|
const Value* FindValue(StatsValueName name) const;
|
|
|
|
private:
|
|
// The unique identifier for this object.
|
|
// This is used as a key for this report in ordered containers,
|
|
// so it must never be changed.
|
|
const Id id_;
|
|
double timestamp_; // Time since 1970-01-01T00:00:00Z in milliseconds.
|
|
Values values_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(StatsReport);
|
|
};
|
|
|
|
// Typedef for an array of const StatsReport pointers.
|
|
// Ownership of the pointers held by this implementation is assumed to lie
|
|
// elsewhere and lifetime guarantees are made by the implementation that uses
|
|
// this type. In the StatsCollector, object ownership lies with the
|
|
// StatsCollection class.
|
|
typedef std::vector<const StatsReport*> StatsReports;
|
|
|
|
// A map from the report id to the report.
|
|
// This class wraps an STL container and provides a limited set of
|
|
// functionality in order to keep things simple.
|
|
class StatsCollection {
|
|
public:
|
|
StatsCollection();
|
|
~StatsCollection();
|
|
|
|
typedef std::list<StatsReport*> Container;
|
|
typedef Container::iterator iterator;
|
|
typedef Container::const_iterator const_iterator;
|
|
|
|
const_iterator begin() const;
|
|
const_iterator end() const;
|
|
size_t size() const;
|
|
|
|
// Creates a new report object with |id| that does not already
|
|
// exist in the list of reports.
|
|
StatsReport* InsertNew(const StatsReport::Id& id);
|
|
StatsReport* FindOrAddNew(const StatsReport::Id& id);
|
|
StatsReport* ReplaceOrAddNew(const StatsReport::Id& id);
|
|
|
|
// Looks for a report with the given |id|. If one is not found, null
|
|
// will be returned.
|
|
StatsReport* Find(const StatsReport::Id& id);
|
|
|
|
private:
|
|
Container list_;
|
|
rtc::ThreadChecker thread_checker_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // API_STATSTYPES_H_
|