benchmarks/webcodecs/encoder-worker.js (39 lines of code) (raw):

let encoder; let encodeTimes = []; let outputTimes = []; function reset() { encoder = null; encodeTimes.length = 0; outputTimes.length = 0; } self.onmessage = async event => { if (event.data.command === "configure") { const { config } = event.data; encoder = new VideoEncoder({ output: (chunk, _) => { const endTime = performance.now(); outputTimes.push({ timestamp: chunk.timestamp, time: endTime, type: chunk.type, }); }, error: _ => {}, }); encoder.configure(config); } else if (event.data.command === "encode") { const { frame, isKey } = event.data; const encodeTime = performance.now(); encoder.encode(frame, { keyFrame: isKey }); encodeTimes.push({ timestamp: frame.timestamp, time: encodeTime, type: isKey ? "key" : "delta", }); frame.close(); } else if (event.data.command === "flush") { await encoder.flush(); self.postMessage({ command: "result", encodeTimes, outputTimes }); reset(); } };