javascript setTimeout clamping to 16ms on windows

85 views
Skip to first unread message

Elad Zlotnick

unread,
Dec 7, 2017, 8:49:06 AM12/7/17
to Chromium-discuss
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?
 
Reply all
Reply to author
Forward
0 new messages