https://github.com/web-platform-tests/wpt
Revision c1df8c29879917e2602bfb32a292e3c450452e27 authored by Henrik Boström on 04 April 2018, 19:14:49 UTC, committed by Chromium WPT Sync on 04 April 2018, 19:14:49 UTC
Implements the RTCPeerConnection.getStats(MediaStreamTrack) version[1]
of the stats selection algorithm behind flag. This is the equivalent of
doing RTCRtpSender.getStats() or RTCRtpReceiver.getStats() for the
track's sender or receiver. This is tested in external/wpt/.

Due to limitations of the generated V8 bindings it is not possible to
express all versions of RTCPeerConnection.getStats() at the same time
in IDL. Thus this CL introduces a version of getStats() taking
"optional any callbacksOrSelector" as argument, with custom binding
logic performed in RTCPeerConnection.cpp. A fast/peerconnection/
LayoutTest is added to test all combinations.

[1] https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getstats

Bug: 680172
Change-Id: I8c64fc64c708d266c926dfa3eb3587c4cbb31210
Reviewed-on: https://chromium-review.googlesource.com/978128
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548149}
1 parent 148f026
Raw File
Tip revision: c1df8c29879917e2602bfb32a292e3c450452e27 authored by Henrik Boström on 04 April 2018, 19:14:49 UTC
RTCPeerConnection.getStats(MediaStreamTrack? selector = null) added.
Tip revision: c1df8c2
idlharness.https.html
<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAudio IDL tests</title>
<link rel="help" href="https://webaudio.github.io/web-audio-api/"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
'use strict';

promise_test(async t => {
  const [html, dom, mediacapture, webaudio] = await Promise.all([
    // Needed for EventTarget, HTMLMediaElement
    '/interfaces/html.idl',

    // Needed for Event, EventListener
    '/interfaces/dom.idl',

    // Needed for MediaStream, MediaStreamTrack
    '/interfaces/mediacapture-main.idl',

    '/interfaces/web-audio-api.idl'
  ].map(url => fetch(url).then(response => response.text())));

  const idl_array = new IdlArray();

  // Dependencies of HTML
  idl_array.add_untested_idls('interface LinkStyle {};');
  idl_array.add_untested_idls('interface SVGElement {};');
  idl_array.add_untested_idls(html);

  idl_array.add_untested_idls(dom);
  idl_array.add_untested_idls(mediacapture);
  idl_array.add_untested_idls('interface Worklet {};');

  idl_array.add_idls(webaudio);

  const sample_rate = 44100;
  const context = new AudioContext;
  const buffer = new AudioBuffer({length: 1, sampleRate: sample_rate});
  await context.audioWorklet.addModule(
    'the-audio-api/the-audioworklet-interface/processors/dummy-processor.js');
  const worklet_node = new AudioWorkletNode(context, 'dummy');

  idl_array.add_objects({
    BaseAudioContext: [],
    AudioContext: [context],
    OfflineAudioContext: [new OfflineAudioContext(1, 1, sample_rate)],
    OfflineAudioCompletionEvent: [
      new OfflineAudioCompletionEvent('', {renderedBuffer: buffer})],
    AudioBuffer: [buffer],
    AudioNode: [],
    AudioParam: [new AudioBufferSourceNode(context).playbackRate],
    AudioScheduledSourceNode: [],
    AnalyserNode: [new AnalyserNode(context)],
    AudioBufferSourceNode: [new AudioBufferSourceNode(context)],
    AudioDestinationNode: [context.destination],
    AudioListener: [context.listener],
    AudioProcessingEvent: [new AudioProcessingEvent('', {
      playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer
    })],
    BiquadFilterNode: [new BiquadFilterNode(context)],
    ChannelMergerNode: [new ChannelMergerNode(context)],
    ChannelSplitterNode: [new ChannelSplitterNode(context)],
    ConstantSourceNode: [new ConstantSourceNode(context)],
    ConvolverNode: [new ConvolverNode(context)],
    DelayNode: [new DelayNode(context)],
    DynamicsCompressorNode: [new DynamicsCompressorNode(context)],
    GainNode: [new GainNode(context)],
    IIRFilterNode: [
      new IIRFilterNode(context, {feedforward: [1], feedback: [1]})],
    MediaElementAudioSourceNode: [
      new MediaElementAudioSourceNode(context, {mediaElement: new Audio})],
    MediaStreamAudioDestinationNode: [
      new MediaStreamAudioDestinationNode(context)],
    MediaStreamAudioSourceNode: [],
    MediaStreamTrackAudioSourceNode: [],
    OscillatorNode: [new OscillatorNode(context)],
    PannerNode: [new PannerNode(context)],
    PeriodicWave: [new PeriodicWave(context)],
    ScriptProcessorNode: [context.createScriptProcessor()],
    StereoPannerNode: [new StereoPannerNode(context)],
    WaveShaperNode: [new WaveShaperNode(context)],
    AudioWorklet: [context.audioWorklet],
    AudioWorkletGlobalScope: [],
    AudioParamMap: [worklet_node.parameters],
    AudioWorkletNode: [worklet_node],
    AudioWorkletProcessor: [],
  });
  idl_array.test();

}, 'Test driver');
</script>
back to top