Source/ThirdParty/libwebrtc:
[WebKit-https.git] / Source / WebCore / Modules / mediastream / RTCStatsReport.idl
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  * Copyright (C) 2017 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 [
27     Conditional=WEB_RTC,
28     EnabledAtRuntime=PeerConnection,
29     ImplementationLacksVTable,
30 ] interface RTCStatsReport {
31     readonly maplike<DOMString, object>;
32 };
33
34 enum RTCStatsType {
35     "candidate-pair",
36     "certificate",
37     "codec",
38     "data-channel",
39     "inbound-rtp",
40     "local-candidate",
41     "media-source",
42     "outbound-rtp",
43     "peer-connection",
44     "remote-candidate",
45     "track",
46     "transport"
47 };
48
49 typedef double DOMHighResTimeStamp;
50
51 dictionary RTCStats {
52     DOMHighResTimeStamp timestamp;
53     RTCStatsType type;
54     DOMString id;
55
56 };
57
58 dictionary RTCRTPStreamStats : RTCStats {
59     unsigned long ssrc;
60     boolean isRemote = false;
61     DOMString mediaType;
62     DOMString trackId;
63     DOMString transportId;
64     DOMString codecId;
65     unsigned long firCount;
66     unsigned long pliCount;
67     unsigned long nackCount;
68     unsigned long sliCount;
69     unsigned long long qpSum;
70 };
71
72 [ JSGenerateToJSObject ]
73 dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats {
74     unsigned long packetsReceived;
75     unsigned long long bytesReceived;
76     unsigned long packetsLost;
77     double jitter;
78     double fractionLost;
79     unsigned long packetsDiscarded;
80     unsigned long packetsRepaired;
81     unsigned long burstPacketsLost;
82     unsigned long burstPacketsDiscarded;
83     unsigned long burstLossCount;
84     unsigned long burstDiscardCount;
85     double burstLossRate;
86     double burstDiscardRate;
87     double gapLossRate;
88     double gapDiscardRate;
89     unsigned long framesDecoded;
90 };
91
92 [ JSGenerateToJSObject ]
93 dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats {
94     unsigned long packetsSent;
95     unsigned long long bytesSent;
96     double targetBitrate;
97     // FIXME 169662: missing roundTripTime
98     unsigned long framesEncoded;
99     DOMString mediaSourceId;
100 };
101
102 [ JSGenerateToJSObject ]
103 dictionary RTCMediaStreamTrackStats : RTCStats {
104     DOMString trackIdentifier;
105     boolean remoteSource;
106     boolean ended;
107     boolean detached;
108     // FIXME: Add sequence<DOMString> ssrcIds;
109     unsigned long frameWidth;
110     unsigned long frameHeight;
111     double framesPerSecond;
112     unsigned long framesSent;
113     unsigned long framesReceived;
114     unsigned long framesDecoded;
115     unsigned long framesDropped;
116     unsigned long framesCorrupted;
117     unsigned long partialFramesLost;
118     unsigned long fullFramesLost;
119     double audioLevel;
120     double echoReturnLoss;
121     double echoReturnLossEnhancement;
122 };
123
124 [ JSGenerateToJSObject ]
125 dictionary RTCDataChannelStats : RTCStats {
126     DOMString label;
127     DOMString protocol;
128     long datachannelid;
129     // FIXME: Switch state to RTCDataChannelState
130     DOMString state;
131     unsigned long messagesSent;
132     unsigned long long bytesSent;
133     unsigned long messagesReceived;
134     unsigned long long bytesReceived;
135 };
136
137 enum RTCStatsIceCandidatePairState {
138     "frozen",
139     "waiting",
140     "inprogress",
141     "failed",
142     "succeeded",
143     "cancelled"
144 };
145
146 [ JSGenerateToJSObject ]
147 dictionary RTCIceCandidatePairStats : RTCStats {
148     DOMString transportId;
149     DOMString localCandidateId;
150     DOMString remoteCandidateId;
151     RTCStatsIceCandidatePairState state;
152     unsigned long long priority;
153     boolean nominated;
154     boolean writable;
155     boolean readable;
156     unsigned long long bytesSent;
157     unsigned long long bytesReceived;
158     double totalRoundTripTime;
159     double currentRoundTripTime;
160     double availableOutgoingBitrate;
161     double availableIncomingBitrate;
162     unsigned long long requestsReceived;
163     unsigned long long requestsSent;
164     unsigned long long responsesReceived;
165     unsigned long long responsesSent;
166     // FIXME: Expose other fields once libwebrtc support them.
167 };
168
169 enum RTCIceCandidateType {
170     "host",
171     "srflx",
172     "prflx",
173     "relay"
174 };
175
176 [ JSGenerateToJSObject ]
177 dictionary RTCIceCandidateStats : RTCStats {
178     DOMString transportId;
179     // FIXME: decide whether to expose networkType
180     // FIXME: Expose relayProtocol
181     DOMString address;
182     long port;
183     DOMString protocol;
184     RTCIceCandidateType candidateType;
185     long priority;
186     DOMString url;
187     boolean deleted = false;
188 };
189
190 [ JSGenerateToJSObject ]
191 dictionary RTCCertificateStats : RTCStats {
192     DOMString fingerprint;
193     DOMString fingerprintAlgorithm;
194     DOMString base64Certificate;
195     DOMString issuerCertificateId;
196 };
197
198 enum RTCCodecType {
199     "encode",
200     "decode"
201 };
202
203 [ JSGenerateToJSObject ]
204 dictionary RTCCodecStats : RTCStats {
205     unsigned long payloadType;
206     RTCCodecType codecType;
207     DOMString transportId;
208     DOMString mimeType;
209     unsigned long clockRate;
210     unsigned long channels;
211     DOMString sdpFmtpLine;
212 };
213
214 [ JSGenerateToJSObject ]
215 dictionary RTCTransportStats : RTCStats {
216     // FIXME 169662: Support more fields.
217     // unsigned long packetsSent;
218     // unsigned long packetsReceived;
219     unsigned long long bytesSent;
220     unsigned long long bytesReceived;
221     DOMString rtcpTransportStatsId;
222     // RTCIceRole iceRole;
223     // RTCDtlsTransportState dtlsState;
224     DOMString selectedCandidatePairId;
225     DOMString localCertificateId;
226     DOMString remoteCertificateId;
227     // DOMString tlsVersion;
228     // DOMString dtlsCipher;
229     // DOMString srtpCipher;
230     // DOMString tlsGroup;
231 };
232
233 [ JSGenerateToJSObject ]
234 dictionary RTCPeerConnectionStats : RTCStats {
235     // FIXME 169662: Support more fields.
236     unsigned long dataChannelsOpened;
237     unsigned long dataChannelsClosed;
238     // unsigned long dataChannelsRequested;
239     // unsigned long dataChannelsAccepted;
240 };
241
242 [ JSGenerateToJSObject ]
243 dictionary RTCMediaSourceStats : RTCStats {
244     required DOMString  trackIdentifier;
245     required DOMString  kind;
246     boolean relayedSource;
247 };
248
249 dictionary RTCAudioSourceStats : RTCMediaSourceStats {
250     double audioLevel;
251     double totalAudioEnergy;
252     double totalSamplesDuration;
253     double echoReturnLoss;
254     double echoReturnLossEnhancement;
255 };
256
257 dictionary RTCVideoSourceStats : RTCMediaSourceStats {
258     unsigned long width;
259     unsigned long height;
260     unsigned long bitDepth;
261     unsigned long frames;
262     double framesPerSecond;
263 };
264
265 // FIXME 169662: missing RTCMediaStreamStats