precise clock + save energy with requestAnimationFrame