Сравнительный анализ FPS для веб-анимации?

Я хочу написать простую утилиту Javascript для оценки анимации кадров в секунду. FPS, вероятно, здесь неуместен, но в идеале это позволит мне более точно сравнивать и измерять, как разные анимации (CSS3/canvas/webgl) работают между браузерами и устройствами. (так что это не то, что просто тестирует конкретный код, а библиотека JS, включенная в страницу и способная делать свое дело самостоятельно)

И я ищу идеи о том, как лучше всего подойти к этому вопросу.

Например, я надеюсь, что requestAnimationFrame - это то, что я ищу - я немного читал об этом, и кажется, что он вызывается каждый раз, когда браузер доступен для перерисовки/анимации, верно? Итак, по той же логике, если (при запуске анимации) браузер недоступен так часто (так же часто, как, например, в пустом прогоне) — у нас уже есть некоторые числа, которые мы могли бы тут же снова сравнить.

Проблема, конечно, в том, что requestAnimationFrame поддерживается не так широко, как хотелось бы (особенно на мобильных устройствах). Можно ли как-то использовать setInterval? Я понимаю, что это не так надежно, но, возможно, это можно было бы использовать в моих интересах - например, если я вызываю его 1000 раз в секунду, а затем сравниваю это с тем, сколько раз оно действительно выполнялось в секунду - это уже своего рода эталон.

Единственная проблема здесь заключается в том, что этот метод будет возвращать измерения для любого количества проблем, а не только для анимации — например, я могу представить, что браузер пропускает интервал, потому что он что-то делает в DOM и т. д. и т. д. Вы можете возразить, что браузер является животным с одним процессом, поэтому изменения DOM также влияют на анимацию, но остается ли это верным, если, например, анимация CSS3 аппаратно ускоряется с помощью графического процессора?

На данный момент это только теория, так что любые идеи приветствуются! ;-)


person Michael    schedule 18.07.2012    source источник


Ответы (1)


Похоже, это должно быть довольно легко адаптировано в набор функций, которые будут работать в вашем конкретном случае («делать свое дело»): https://gist.github.com/1156092

person Phil Nelson    schedule 22.10.2012