<!DOCTYPE HTML>
<html>
<head>
  <script type="application/javascript" src="pc.js"></script>
</head>
<body>
<pre id="test">
<script type="application/javascript">
createHTML({
  bug: "1611957",
  title: "Live-updating maxFramerate"
});

let sender, receiver;

async function checkMaxFrameRate(rate) {
  const parameters = sender.getParameters();
  parameters.encodings[0].maxFramerate = rate;
  await sender.setParameters(parameters);
  await wait(2000);
  const stats = Array.from((await receiver.getStats()).values());
  const inboundRtp = stats.find(stat => stat.type == "inbound-rtp");
  info(`inbound-rtp stats: ${JSON.stringify(inboundRtp)}`);
  const fps = inboundRtp.framesPerSecond;
  ok(fps <= (rate * 1.1) + 1,
    `fps is an appropriate value (${fps}) for rate (${rate})`);
}

runNetworkTest(async function (options) {
  let test = new PeerConnectionTest(options);
  test.setMediaConstraints([{video: true}], []);
  test.chain.append([
    function CHECK_PRECONDITIONS() {
      is(test.pcLocal._pc.getSenders().length, 1,
        "Should have 1 local sender");
      is(test.pcRemote._pc.getReceivers().length, 1,
        "Should have 1 remote receiver");

      sender = test.pcLocal._pc.getSenders()[0];
      receiver = test.pcRemote._pc.getReceivers()[0];
    },
    function PC_LOCAL_SET_MAX_FRAMERATE_2() {
      return checkMaxFrameRate(2);
    },
    function PC_LOCAL_SET_MAX_FRAMERATE_4() {
      return checkMaxFrameRate(4);
    },
    function PC_LOCAL_SET_MAX_FRAMERATE_15() {
      return checkMaxFrameRate(15);
    },
    function PC_LOCAL_SET_MAX_FRAMERATE_8() {
      return checkMaxFrameRate(8);
    },
    function PC_LOCAL_SET_MAX_FRAMERATE_1() {
      return checkMaxFrameRate(1);
    },
  ]);
  await test.run();
});
</script>
</pre>
</body>
</html>
