/usr/share/psychtoolbox-3/PsychBasic/VideoRefreshFromMeasurement.m is in psychtoolbox-3-common 3.0.14.20170103+git6-g605ff5c.dfsg1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | function ifi = VideoRefreshFromMeasurement(window, samples)
% ifi = VideoRefreshFromMeasurement(window [, samples=600]);
%
% Measure video refresh interval for onscreen windows display with a method
% that is supposed to be as robust and accurate as possible.
%
% 'window' is the onscreen window handle for the window whose corresponding
% display should be measured.
%
% 'samples' is the (optional) number of refresh samples to take into
% account.
%
% This routine returns the estimated refresh duration in seconds. It uses
% one of multiple calibration strategies, preferring more accurate ones but
% falling back to less accurate ones if the accurate ones are not supported
% by your system:
%
% 1. On MacOS/X it tries to use low-level VBL interrupt timestamps.
% 2. If that fails it tries to get the measurement from the beamposition
% measurement method.
% 3. If that fails it returns the measurment from
% Screen('GetFlipInterval').
%
% History:
% 07/04/07 Written (MK).
if nargin < 1
error('You must provide a ''window'' handle for calibration!');
end
if Screen('WindowKind', window) ~= 1
error('You must provide an onscreen window handle for calibration!');
end
if nargin < 2
samples = 600;
end
wininfo = Screen('GetWindowInfo', window);
startvblcount = wininfo.VBLCount;
if startvblcount > 0
% VBL counter supported by OS. Use it for measurement:
newvblcount = startvblcount;
while newvblcount == startvblcount
wininfo = Screen('GetWindowInfo', window);
newvblcount = wininfo.VBLCount;
end
startvblcount = newvblcount;
tstart = wininfo.LastVBLTime;
while newvblcount < startvblcount + samples
wininfo = Screen('GetWindowInfo', window);
newvblcount = wininfo.VBLCount;
end
vblcount = newvblcount - startvblcount;
telapsed = wininfo.LastVBLTime - tstart;
ifi = telapsed / vblcount;
else
% No VBL counter support :( - Try beamposition method:
ifi = wininfo.VideoRefreshFromBeamposition;
% Result from beamposition method?
if ifi == 0
% Nope. Ok we return the flip interval measured by Screen:
ifi = Screen('GetFlipInterval', window);
end
end
% We should have an ifi, one or the other way...
return;
|