Skip to content

Commit

Permalink
Rewrite jitterBufferTarget test
Browse files Browse the repository at this point in the history
Bug: 325960326

Change-Id: I19a157e7012f2b0b8b5a3b89a9d522683bd19fde
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5324009
Reviewed-by: Harald Alvestrand <[email protected]>
Commit-Queue: Florent Castelli <[email protected]>
Reviewed-by: Florent Castelli <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1270885}
  • Loading branch information
eldarrello authored and chromium-wpt-export-bot committed Mar 11, 2024
1 parent 2c21fac commit 15a6c2c
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 96 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>Tests RTCRtpReceiver-jitterBufferTarget verified with stats</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
<script src="/webrtc-extensions/RTCRtpReceiver-jitterBufferTarget-stats-helper.js"></script>
<body>
<script>
'use strict'

promise_test(async t => {
await applyJitterBufferTarget(t, "audio", 300);
}, `measure raising and lowering audio jitterBufferTarget`);

</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
async function measureDelayFromStats(t, receiver, cycles, targetDelay, tolerance) {
let oldInboundStats;

for (let i = 0; i < cycles; i++) {
const statsReport = await receiver.getStats();
const inboundStats = [...statsReport.values()].find(({type}) => type == "inbound-rtp");

if (inboundStats) {
if (oldInboundStats) {
const emittedCount = inboundStats.jitterBufferEmittedCount - oldInboundStats.jitterBufferEmittedCount;

if (emittedCount) {
const delay = 1000 * (inboundStats.jitterBufferDelay - oldInboundStats.jitterBufferDelay) / emittedCount;

if (Math.abs(delay - targetDelay) < tolerance) {
return true;
}
}
}
oldInboundStats = inboundStats;
}
await new Promise(r => t.step_timeout(r, 1000));
}

return false;
}

async function applyJitterBufferTarget(t, kind, target) {
const caller = new RTCPeerConnection();
t.add_cleanup(() => caller.close());
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());

const stream = await getNoiseStream({[kind]:true});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
caller.addTransceiver(stream.getTracks()[0], {streams: [stream]});

exchangeIceCandidates(caller, callee);
await exchangeOffer(caller, callee);
await exchangeAnswer(caller, callee);

const receiver = callee.getReceivers()[0];

// Workaround for Chromium to pull audio from jitter buffer.
if (kind === "audio") {
const audio = document.createElement("audio");

audio.srcObject = new MediaStream([receiver.track]);
audio.play();
}
assert_equals(receiver.jitterBufferTarget, null,
`jitterBufferTarget supported for ${kind}`);

let result = await measureDelayFromStats(t, receiver, 5, 0, 100);
assert_true(result, 'jitter buffer is not stabilised');

receiver.jitterBufferTarget = target;
assert_equals(receiver.jitterBufferTarget, target,
`jitterBufferTarget increase target for ${kind}`);

result = await measureDelayFromStats(t, receiver, 10, target, 20);
assert_true(result, 'jitterBuffer does not reach target');

receiver.jitterBufferTarget = 0;
assert_equals(receiver.jitterBufferTarget, 0,
`jitterBufferTarget decrease target for ${kind}`);

result = await measureDelayFromStats(t, receiver, 10, 0, 100);
assert_true(result, 'jitter buffer delay is not back to normal');
}
96 changes: 0 additions & 96 deletions webrtc-extensions/RTCRtpReceiver-jitterBufferTarget-stats.html

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>Tests RTCRtpReceiver-jitterBufferTarget verified with stats</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
<script src="/webrtc-extensions/RTCRtpReceiver-jitterBufferTarget-stats-helper.js"></script>
<body>
<script>
'use strict'

promise_test(async t => {
await applyJitterBufferTarget(t, "video", 1000);
}, `measure raising and lowering video jitterBufferTarget`);

</script>
</body>

0 comments on commit 15a6c2c

Please sign in to comment.