diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html')
-rw-r--r-- | testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html b/testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html new file mode 100644 index 0000000000..7b4f88e944 --- /dev/null +++ b/testing/web-platform/tests/mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html @@ -0,0 +1,69 @@ +<!doctype html> +<html> +<head> + <title>MediaStreamTrackProcessor backpressure</title> + <link rel="help" href="https://w3c.github.io/mediacapture-insertable-streams"> +</head> +<body> + <h1 class="instructions">Description</h1> +<p class="instructions">This test checks that MediaStreamTrackProcessor handles backpressure from a WHATWG stream pipeline.</p> +<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> +<script> + + const height = 240; + const width = 320; + + const inputCanvas = new OffscreenCanvas(width, height); + const inputCtx = inputCanvas.getContext('2d', {alpha: false}); + inputCtx.fillStyle = 'black'; + inputCtx.fillRect(0, 0, width, height); + + const frameDuration = 40; + + function makeUniformVideoFrame(timestamp) { + return new VideoFrame(inputCanvas, {timestamp, alpha: 'discard'}); + } + + promise_test(async t => { + // TODO: use "new VideoTrackGenerator" + const generator = new MediaStreamTrackGenerator({kind: 'video'}); + t.add_cleanup(() => generator.stop()); + + // Write frames for the duration of the test. + const writer = generator.writable.getWriter(); + let timestamp = 0; + const intervalId = setInterval( + t.step_func(async () => { + if (generator.readyState === 'live') { + timestamp++; + await writer.write(makeUniformVideoFrame(timestamp)); + } + }), + frameDuration); + t.add_cleanup(() => clearInterval(intervalId)); + t.step_timeout(function() { + clearInterval(intervalId); + generator.stop(); + }, 2000); + const processor = new MediaStreamTrackProcessor({track: generator}); + let ts = 1; + await processor.readable.pipeTo(new WritableStream({ + async write(frame) { + if (ts === 1) { + assert_equals(frame.timestamp, ts, "Timestamp mismatch"); + } else { + assert_greater_than_equal(frame.timestamp, ts, "Backpressure should have resulted in skipping at least 3 frames"); + } + frame.close(); + ts+=3; + // Wait the equivalent of 3 frames + return new Promise((res) => t.step_timeout(res, 3*frameDuration)); + } + })); + }, "Tests that backpressure forces MediaStreamTrackProcess to skip frames"); +</script> +</body> +</html> |