<!doctype html>
<meta charset=utf-8>
<title>getDisplayMedia</title>
<meta name="timeout" content="long">
<button id="button">User gesture</button>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<video id="display"></video>
<script>
  'use strict';

const stopTracks = stream => stream.getTracks().forEach(track => track.stop());

async function getDisplayMedia(constraints) {
  const p = new Promise(r => button.onclick = r);
  await test_driver.click(button);
  await p;
  return navigator.mediaDevices.getDisplayMedia(constraints);
}

promise_test( async t => {
  const v = document.getElementById('display');
  v.autoplay = true;
  // work around firefox bug 1586505, orthogonal to what's being tested
  const frames = () => v.mozPaintedFrames ?? v.getVideoPlaybackQuality()?.totalVideoFrames;
  const target_rate = 5;
  const stream = await getDisplayMedia({video: {width:160, frameRate: target_rate}});
  t.add_cleanup(() => stopTracks(stream));
  v.srcObject = stream;
  const intitial_time = v.currentTime;
  const initial_frame_count = frames();
  await new Promise(r => t.step_timeout(r, 10000));
  const total_elapsed_frames = frames() - initial_frame_count;
  const total_elapsed_time = v.currentTime - intitial_time;
  const average_fps = total_elapsed_frames / total_elapsed_time;
  assert_greater_than_equal(average_fps, target_rate * 0.50);
  assert_less_than_equal(average_fps, target_rate * 1.75);
}, "getDisplayMedia() must adhere to frameRate if set");

</script>
