-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test for backpressure on MediaStreamTrackProcessor (#36522)
* Add test for backpressure on MediaStreamTrackProcessor
- Loading branch information
1 parent
29092aa
commit 1774ecf
Showing
1 changed file
with
69 additions
and
0 deletions.
There are no files selected for viewing
69 changes: 69 additions & 0 deletions
69
mediacapture-insertable-streams/MediaStreamTrackProcessor-backpressure.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |
1774ecf
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Uh oh! Looks like an error! Details
HttpError: You have exceeded a secondary rate limit. Please wait a few minutes before you try again.