# Interval between guest PRESENTS, from the draw log's own per-frame # gtick marker. Same capture as guest-frame-rate-cadence.txt. # # ⚠️ gtick is NOT guest-intended time. Canary's Clock::QueryGuestTickCount() # is `host_tick_count * guest_tick_ratio` with the scalar at 1.0, i.e. HOST # time rescaled. So these are wall-clock intervals and TEMPORAL-VERIFICATION # applies to them in full. # # What they are good for is the SHAPE. Xenia locks vblank to 60 Hz when # vsync is on and framerate_limit is 0 (graphics_system.cc: 'If VSYNC is # enabled, but frames are not limited, lock framerate at default value of # 60'). So the question with no phase in it is: does the guest present once # per vblank (16.7 ms) or once per two (33.3 ms)? frames 1..599 intervals n=594 span 671,751,499 ticks = 13.435 host-seconds overall 44.21 presents per host-second min 14.94 ms Q1 16.47 ms median 17.22 ms <-- the mode of the distribution Q3 30.43 ms max 157.20 ms histogram, in units of one 60 Hz vblank (16.667 ms): 1 vblank(s) ( 16.67 ms) : 426 ############################################################ 2 vblank(s) ( 33.33 ms) : 146 ############################################################ 3 vblank(s) ( 50.00 ms) : 12 ############ 4 vblank(s) ( 66.67 ms) : 4 #### 5 vblank(s) ( 83.34 ms) : 3 ### 6 vblank(s) (100.00 ms) : 2 ## 9 vblank(s) (150.00 ms) : 1 # ONE vblank : 426/594 = 71.7% TWO vblanks: 146/594 = 24.6% # A guest hard-locked to 30 fps presents every SECOND vblank and would put # the mass at 2. It is at 1. The tail at 2+ is dropped frames, which is the # expected direction for a slow emulator -- a slow emulator cannot make # intervals SHORTER than the guest asked for.