I'm not sure this is the correct group to post on, but here goes:
When running the following code on linux chrome I get values very close to 100, but when I run it on windows I get values around 108.
console.time();
setTimeout(console.timeEnd, 100);
In order to investigate this I created the following function which measures the latency of a setTimeout
iterations times.
function getLatency(delay, iterations){
var latencies = [];
t();
function t(){
var start = performance.now();
setTimeout(function(){
latencies.push(performance.now() - start);
if (latencies.length < iterations) t();
else console.log({
latencies,delay,iterations,
mean: latencies.reduce((s,v) => s+v,0)/latencies.length
});
}, delay);
}
}
I ran this function for delays of 90ms up to 116ms with the following results:
{latencies: Array(100), delay: 90, iterations: 100, mean: 93.79674999999814}
{latencies: Array(100), delay: 91, iterations: 100, mean: 93.99219999998807}
{latencies: Array(100), delay: 92, iterations: 100, mean: 94.61744999997318}
{latencies: Array(100), delay: 93, iterations: 100, mean: 94.31229999997653}
{latencies: Array(100), delay: 94, iterations: 100, mean: 104.81929999999701}
{latencies: Array(100), delay: 95, iterations: 100, mean: 106.12595000001602}
{latencies: Array(100), delay: 96, iterations: 100, mean: 108.06575000000186}
{latencies: Array(100), delay: 97, iterations: 100, mean: 108.8740500000352}
{latencies: Array(100), delay: 98, iterations: 100, mean: 105.89744999997318}
{latencies: Array(100), delay: 99, iterations: 100, mean: 108.78969999996946}
{latencies: Array(100), delay: 100, iterations: 100, mean: 109.27275000000839}
{latencies: Array(100), delay: 101, iterations: 100, mean: 108.904550000038}
{latencies: Array(100), delay: 102, iterations: 100, mean: 107.55170000000857}
{latencies: Array(100), delay: 103, iterations: 100, mean: 108.65704999998212}
{latencies: Array(100), delay: 104, iterations: 100, mean: 109.611650000019}
{latencies: Array(100), delay: 105, iterations: 100, mean: 108.90684999996796}
{latencies: Array(100), delay: 106, iterations: 100, mean: 109.9303000000026}
{latencies: Array(100), delay: 107, iterations: 100, mean: 109.99475000000093}
{latencies: Array(100), delay: 108, iterations: 100, mean: 109.72754999994766}
{latencies: Array(100), delay: 109, iterations: 100, mean: 110.88049999994226}
{latencies: Array(100), delay: 110, iterations: 100, mean: 119.29270000001415}
{latencies: Array(100), delay: 111, iterations: 100, mean: 120.76219999997876}
{latencies: Array(100), delay: 112, iterations: 100, mean: 124.06359999997541}
{latencies: Array(100), delay: 113, iterations: 100, mean: 121.39195000000298}
{latencies: Array(100), delay: 114, iterations: 100, mean: 121.62474999999627}
{latencies: Array(100), delay: 115, iterations: 100, mean: 121.58314999997616}
{latencies: Array(100), delay: 116, iterations: 100, mean: 124.69815000000409}
Can anyone explain what is going on? Is chrome clamping setTimeout to 16ms? to animation frames? Why is this happening only on windows?