mochitest stress screensharing

by jib1

HTML

<video id="video1" width="160" height="120" autoplay muted></video><br>
<div id="div"></div>

JavaScript

var console = { log: msg => div.innerHTML += msg + "<br>",
                error: e => console.log(e) };
var getUserMedia = c => navigator.mediaDevices.getUserMedia(c);
var runTest = f => f().catch(e => console.log(e));
var info = msg => console.log(msg);
var ok = (ok, msg) => info((ok ? "OK " : "UNEXPECTED ") + msg);
var is = (a, b, msg) => info(((a == b)? "OK " : ("UNEXPECTED (got "+a+") ")) + msg);
var haveGumOn = () => navigator.mediaDevices.enumerateDevices()
  .then(([device]) => device && !!device.label.length);

// Put mochitest below:

  /**
   * Run a test to verify that we can complete a start and stop media playback
   * cycle for a screenshare LocalMediaStream on a video HTMLMediaElement.
   */
  runTest(async () => {
    const isWinXP = navigator.userAgent.indexOf("Windows NT 5.1") != -1;
    var testVideo = video1

    var constraints = { video: { mediaSource: "screen" }, fake: false };
    var videoConstraints = [
      {
        mediaSource: 'screen',
        width: {
          min: '10',
          max: '100'
        },
        height: {
          min: '10',
          max: '100'
        },
        frameRate: {
          min: '10',
          max: '15'
        }
      },
      {
        mediaSource: 'screen',
        width: 200,
        height: 200,
        frameRate: {
          min: '5',
          max: '10'
        }
      }
    ];
   for (let i=0; i<1000; i++) {
    testVideo.srcObject = await getUserMedia(constraints);
    await new Promise(r => testVideo.onloadedmetadata = r);
    testVideo.srcObject.getTracks().forEach(t => t.stop());
    testVideo.srcObject = await getUserMedia({video: videoConstraints[0], fake: false});
    await new Promise(r => testVideo.onloadedmetadata = r);

    let resized = new Promise(r => testVideo.onresize = r);

    await testVideo.srcObject.getVideoTracks()[0].applyConstraints(videoConstraints[1]);
    await resized;
    testVideo.srcObject.getVideoTracks().forEach(t => t.stop());
   }
  });