From 5408f4c2dd6c353e4e826c295a6a2af730b5871e Mon Sep 17 00:00:00 2001 From: Sotiri Bakagiannis Date: Fri, 29 Jan 2021 12:07:27 +0000 Subject: [PATCH] core/Window: implement getActualFrameRate, update monitorFramePeriod accordingly --- js/core/Window.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/js/core/Window.js b/js/core/Window.js index 01c9959..931868b 100644 --- a/js/core/Window.js +++ b/js/core/Window.js @@ -41,7 +41,7 @@ export class Window extends PsychObject */ get monitorFramePeriod() { - return this._monitorFramePeriod; + return 1.0 / this.getActualFrameRate(); } constructor({ @@ -69,9 +69,6 @@ export class Window extends PsychObject // setup PIXI: this._setupPixi(); - // monitor frame period: - this._monitorFramePeriod = 1.0 / this.getActualFrameRate(); - this._frameCount = 0; this._flipCallbacks = []; @@ -145,14 +142,18 @@ export class Window extends PsychObject * @name module:core.Window#getActualFrameRate * @function * @public - * @return {number} always returns 60.0 at the moment - * - * @todo estimate the actual frame rate. + * @return {number} rAF based delta time based approximation, 60.0 by default */ getActualFrameRate() { - // TODO - return 60.0; + // gets updated frame by frame + const lastDelta = this.psychoJS.scheduler._lastDelta; + const fpsMaybe = 1000 / lastDelta; + // NB: calling `Number.isFinite()` might skip the implicit to number conversion, but + // would also need polyfilling for IE + const fps = isFinite(fpsMaybe) ? fpsMaybe : 60.0; + + return fps; }