246ec3c1e0ee4c8c4d670ce9bfb133a3e8fa4ac8
[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     "codec",
36     "inbound-rtp",
37     "outbound-rtp",
38     "peer-connection",
39     "data-channel",
40     "track",
41     "transport",
42     "candidate-pair",
43     "local-candidate",
44     "remote-candidate",
45     "certificate"
46 };
47
48 typedef double DOMHighResTimeStamp;
49
50 dictionary RTCStats {
51     DOMHighResTimeStamp timestamp;
52     RTCStatsType type;
53     DOMString id;
54
55 };
56
57 dictionary RTCRTPStreamStats : RTCStats {
58     unsigned long ssrc;
59     boolean isRemote = false;
60     DOMString mediaType;
61     DOMString trackId;
62     DOMString transportId;
63     DOMString codecId;
64     unsigned long firCount;
65     unsigned long pliCount;
66     unsigned long nackCount;
67     unsigned long sliCount;
68     unsigned long long qpSum;
69 };
70
71 [ JSGenerateToJSObject ]
72 dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats {
73     unsigned long packetsReceived;
74     unsigned long long bytesReceived;
75     unsigned long packetsLost;
76     double jitter;
77     double fractionLost;
78     unsigned long packetsDiscarded;
79     unsigned long packetsRepaired;
80     unsigned long burstPacketsLost;
81     unsigned long burstPacketsDiscarded;
82     unsigned long burstLossCount;
83     unsigned long burstDiscardCount;
84     double burstLossRate;
85     double burstDiscardRate;
86     double gapLossRate;
87     double gapDiscardRate;
88     unsigned long framesDecoded;
89 };
90
91 [ JSGenerateToJSObject ]
92 dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats {
93     unsigned long packetsSent;
94     unsigned long long bytesSent;
95     double targetBitrate;
96     // FIXME 169662: missing roundTripTime
97     unsigned long framesEncoded;
98 };
99
100 [ JSGenerateToJSObject ]
101 dictionary RTCMediaStreamTrackStats : RTCStats {
102     DOMString trackIdentifier;
103     boolean remoteSource;
104     boolean ended;
105     boolean detached;
106     // FIXME: Add sequence<DOMString> ssrcIds;
107     unsigned long frameWidth;
108     unsigned long frameHeight;
109     double framesPerSecond;
110     unsigned long framesSent;
111     unsigned long framesReceived;
112     unsigned long framesDecoded;
113     unsigned long framesDropped;
114     unsigned long framesCorrupted;
115     unsigned long partialFramesLost;
116     unsigned long fullFramesLost;
117     double audioLevel;
118     double echoReturnLoss;
119     double echoReturnLossEnhancement;
120 };
121
122 [ JSGenerateToJSObject ]
123 dictionary RTCDataChannelStats : RTCStats {
124     DOMString label;
125     DOMString protocol;
126     long datachannelid;
127     // FIXME: Switch state to RTCDataChannelState
128     DOMString state;
129     unsigned long messagesSent;
130     unsigned long long bytesSent;
131     unsigned long messagesReceived;
132     unsigned long long bytesReceived;
133 };
134
135 enum RTCStatsIceCandidatePairState {
136     "frozen",
137     "waiting",
138     "inprogress",
139     "failed",
140     "succeeded",
141     "cancelled"
142 };
143
144 [ JSGenerateToJSObject ]
145 dictionary RTCIceCandidatePairStats : RTCStats {
146     DOMString transportId;
147     DOMString localCandidateId;
148     DOMString remoteCandidateId;
149     RTCStatsIceCandidatePairState state;
150     unsigned long long priority;
151     boolean nominated;
152     boolean writable;
153     boolean readable;
154     unsigned long long bytesSent;
155     unsigned long long bytesReceived;
156     double totalRoundTripTime;
157     double currentRoundTripTime;
158     double availableOutgoingBitrate;
159     double availableIncomingBitrate;
160     unsigned long long requestsReceived;
161     unsigned long long requestsSent;
162     unsigned long long responsesReceived;
163     unsigned long long responsesSent;
164     // FIXME: Expose other fields once libwebrtc support them.
165 };
166
167 enum RTCIceCandidateType {
168     "host",
169     "srflx",
170     "prflx",
171     "relay"
172 };
173
174 [ JSGenerateToJSObject ]
175 dictionary RTCIceCandidateStats : RTCStats {
176     DOMString transportId;
177     // FIXME: decide whether to expose networkType
178     // FIXME: Expose relayProtocol
179     DOMString address;
180     long port;
181     DOMString protocol;
182     RTCIceCandidateType candidateType;
183     long priority;
184     DOMString url;
185     boolean deleted = false;
186 };
187
188 [ JSGenerateToJSObject ]
189 dictionary RTCCertificateStats : RTCStats {
190     DOMString fingerprint;
191     DOMString fingerprintAlgorithm;
192     DOMString base64Certificate;
193     DOMString issuerCertificateId;
194 };
195
196 enum RTCCodecType {
197     "encode",
198     "decode"
199 };
200
201 [ JSGenerateToJSObject ]
202 dictionary RTCCodecStats : RTCStats {
203     unsigned long payloadType;
204     RTCCodecType codecType;
205     DOMString transportId;
206     DOMString mimeType;
207     unsigned long clockRate;
208     unsigned long channels;
209     DOMString sdpFmtpLine;
210 };
211
212 [ JSGenerateToJSObject ]
213 dictionary RTCTransportStats : RTCStats {
214     // FIXME 169662: Support more fields.
215     // unsigned long packetsSent;
216     // unsigned long packetsReceived;
217     unsigned long long bytesSent;
218     unsigned long long bytesReceived;
219     DOMString rtcpTransportStatsId;
220     // RTCIceRole iceRole;
221     // RTCDtlsTransportState dtlsState;
222     DOMString selectedCandidatePairId;
223     DOMString localCertificateId;
224     DOMString remoteCertificateId;
225     // DOMString tlsVersion;
226     // DOMString dtlsCipher;
227     // DOMString srtpCipher;
228     // DOMString tlsGroup;
229 };
230
231 [ JSGenerateToJSObject ]
232 dictionary RTCPeerConnectionStats : RTCStats {
233     // FIXME 169662: Support more fields.
234     unsigned long dataChannelsOpened;
235     unsigned long dataChannelsClosed;
236     // unsigned long dataChannelsRequested;
237     // unsigned long dataChannelsAccepted;
238 };
239
240 // FIXME 169662: missing RTCMediaStreamStats