fps-now
Version: 
FPS meter for evergreen browsers
97 lines (69 loc) • 3.01 kB
JavaScript
;
var _rafLoop = _interopRequireDefault(require("raf-loop"));
var _eventemitter = _interopRequireDefault(require("eventemitter3"));
var _meter = require("./meter");
var _dom = require("./dom");
var _utils = require("./utils");
var _temp;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var defaultOptions = {
  x: 64,
  y: 32,
  shape: [64, 32],
  visual: true,
  averageFPS: false
};
module.exports = (_temp =
/*#__PURE__*/
function (_EventEmitter) {
  _inheritsLoose(FPS, _EventEmitter);
  FPS.of = function of(opts) {
    return new FPS(opts);
  };
  function FPS(opts) {
    var _this;
    _this = _EventEmitter.call(this) || this;
    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "start", function () {
      _this.engine.start();
    });
    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "stop", function () {
      _this.engine.stop();
    });
    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "update", function (fps) {
      _this.history.push(fps);
      _this.history.shift();
    });
    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "render", function () {
      _this.dom.title.innerHTML = _this.getFps().toFixed(1);
      (0, _dom.renderGraph)(_this.ctx, _this.shape, _this.history);
    });
    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "getFps", function () {
      return _this.opts.averageFPS ? (0, _utils.average)(_this.history) : (0, _utils.tail)(_this.history);
    });
    _this.opts = Object.assign(defaultOptions, opts);
    _this.shape = _this.opts.shape || [_this.opts.x, _this.opts.y];
    _this.dom = _this.opts.visual && (0, _dom.createElements)('fps', _this.shape);
    _this.meter = new _meter.Meter({
      every: 1,
      decay: 0.15
    });
    _this.meter.on('data', _this.update);
    _this.meter.once('data', _this.start);
    if (_this.opts.visual) {
      _this.ctx = _this.dom.canvas.getContext('2d');
    }
    _this.history = new Array(_this.shape[0]).fill(0);
    _this.engine = (0, _rafLoop.default)(function () {
      _this.meter.tick();
      if (_this.opts.visual) {
        _this.render();
      }
      _this.emit('tick', _this.opts.averageFPS ? (0, _utils.average)(_this.history) : _this.history);
    });
    return _this;
  }
  return FPS;
}(_eventemitter.default), _temp);