diff options
Diffstat (limited to 'dom/media/mediasource/test/test_Resolution_change_should_not_cause_video_freeze.html')
-rw-r--r-- | dom/media/mediasource/test/test_Resolution_change_should_not_cause_video_freeze.html | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/dom/media/mediasource/test/test_Resolution_change_should_not_cause_video_freeze.html b/dom/media/mediasource/test/test_Resolution_change_should_not_cause_video_freeze.html new file mode 100644 index 0000000000..640b53441e --- /dev/null +++ b/dom/media/mediasource/test/test_Resolution_change_should_not_cause_video_freeze.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>MSE: video resolution changes during playback should not cause video freeze (Bug 1718709)</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="mediasource.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +runWithMSE(async (ms, v) => { + await once(ms, "sourceopen"); + const sb = ms.addSourceBuffer('video/mp4'); + sb.appendBuffer(new Uint8Array(await fetchWithXHR("bug1718709_low_res.mp4"))); + ok(true, "appended low resolution video"); + sb.appendBuffer(new Uint8Array(await fetchWithXHR("bug1718709_high_res.mp4"))); + ok(true, "appended high resolution video"); + + info(`start from the position which is near to the place where resolution changes`); + v.currentTime = 13; + ok(await v.play().then(_=>true,_=>false), "video started playing"); + + // When video resolution changes, it should not cause video freeze so we check + // its painted frame amount regularly to see if we stop updating video frames. + let lastPaintedFramesAmount = v.mozPaintedFrames; + const intervalHandle = setInterval(_=>{ + ok(lastPaintedFramesAmount < v.mozPaintedFrames, + `painted frames keeps growing from ${lastPaintedFramesAmount} to ${v.mozPaintedFrames}`); + lastPaintedFramesAmount = v.mozPaintedFrames; + }, 1000); + + // As we didn't append full video, so we will receive `waiting` event later + // which indicates that we can stop testing because we've finished playing + // the high resolution part. + await new Promise(r => { + v.onwaiting = _ => { + clearInterval(intervalHandle); + r(); + } + }); + SimpleTest.finish(); +}); + +</script> +</body> +</html> |