W3C home > Mailing lists > Public > public-webrtc@w3.org > August 2013

Re: Stats variables - some more input

From: Jan-Ivar Bruaroey <jib@mozilla.com>
Date: Mon, 12 Aug 2013 21:39:27 -0400
Message-ID: <52098E4F.60602@mozilla.com>
To: Harald Alvestrand <harald@alvestrand.no>
CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
On 8/12/13 4:21 AM, Harald Alvestrand wrote:
> The union defeats our purpose, since it limits the legal forms of 
> stats to just those that made it into the union; we want to be able to 
> add new stats at will, including implementation-defined ones. 

Yes, good point, and this union trick didn't work anyway, as I mentioned 
in the followup.

>> The second point was that getters apparently have name collision 
>> issues, and he was wondering if it would be better for our needs to 
>> return a (read-only) "Map-like" object 
>> http://dev.w3.org/2006/webapi/WebIDL/#MapClass like this:
>>
>>   [MapClass(DOMString, AnyRTCStats)]
>>   interface RTCStatsReport {};
>
> This seems like an interesting direction to go - would this be instead 
> of using Dictionary?

It would be instead of the getter. We would still return dictionaries.

> Which interfaces today utilize the [MapClass] extended attribute? (I 
> like to look at examples...)

MapClass is very new. It is discussed here:
- 
http://lists.w3.org/Archives/Public/public-script-coord/2013AprJun/0589.html
- 
http://lists.w3.org/Archives/Public/public-script-coord/2013AprJun/0631.html

The only "use" I found is 
http://dev.w3.org/csswg/css-variables/#the-CSSVariablesMap-interface

My understanding is that any object is "map-like" if it implements the 
mentioned set of methods (or a subset for read-only objects) that let 
users treat the object like a map (associative array).

Without waiting for [MapClass] extended attribute support, here's what 
I'm using:

   // [MapClass(DOMString, object)]
   interface RTCStatsReport {
       void forEach(RTCStatsReportCallback callbackFn, optional any 
thisArg);
       object get(DOMString key);
       boolean has(DOMString key);
   };

Example caller:

       pc2.getStats(null, function(stats) {
         var statsString = '';
         var i = 0;
         stats.forEach(function(res) {
           statsString += '<h3>Report ';
           statsString += i;
           statsString += '</h3>';
           statsString += dumpStats(res);
         }
       });

function dumpStats(obj) {
   var statsString = 'Timestamp:';
   statsString += obj.timestamp;
   if (obj.id) {
      statsString += "<br>id ";
      statsString += obj.id;
   }
   if (obj.type) {
      statsString += " type ";
      statsString += obj.type;
   }
   if (obj.bytesReceived !== undefined) {
     statsString += " bytesReceived: ";
     statsString += obj.bytesReceived;
     statsString += "<br>";
   }
   return statsString;
}

.: Jan-Ivar :.
Received on Tuesday, 13 August 2013 01:39:56 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:35 UTC