So, here is a first shot :
| #!/bin/bash |
| |
| |
| |
| RA_CORE="-L /usr/lib/libretro/$1_libretro.so" |
| |
| |
| RA_ROM="$2" |
| |
| |
| FPS=60 |
| |
| |
| NB_FRAMES=600 |
| RA_OPTS="--verbose --max-frames=${NB_FRAMES}" |
| RA_CONFIG="--config /recalbox/share/system/configs/retroarch/retroarchcustom.cfg" |
| RA_OUTPUT_LOG=/tmp/ra.log |
| rm $RA_OUTPUT_LOG |
| |
| /usr/bin/time -v /usr/bin/retroarch $RA_OPTS $RA_CORE $RA_CONFIG "$RA_ROM" > $RA_OUTPUT_LOG 2>&1 |
| |
| |
| FRAMES_EXPECTED=`grep "[INFO] Threaded video stats" "$RA_OUTPUT_LOG" | sed "s+.*Frames pushed: \([0-9]*\).*+\1+"` |
| FRAMES_DROPPED=`grep "[INFO] Threaded video stats" "$RA_OUTPUT_LOG" | sed "s+.*Frames dropped: \([0-9]*\).*+\1+"` |
| FRAMES_RENDERED=$(($FRAMES_EXPECTED - $FRAMES_DROPPED)) |
| TIME_RUN=`grep "Elapsed (wall clock) time (h:mm:ss or m:ss):" "$RA_OUTPUT_LOG" | sed "s/.*: \([0-9]*\)m \([0-9]*\)\.\([0-9]*\)s/\1 \2\ \3/"` |
| NB_MINS=`echo $TIME_RUN | cut -d ' ' -f 1` |
| NB_SECS=`echo $TIME_RUN | cut -d ' ' -f 2` |
| NB_CENS=`echo $TIME_RUN | cut -d ' ' -f 3` |
| CPU_LOAD=`grep "Percent of CPU this job got:" "$RA_OUTPUT_LOG" | sed "s/.*: \([0-9]*\)%.*/\1/"` |
| |
| |
| |
| EXPECTED_TIME=$(($NB_FRAMES / $FPS)) |
| REAL_TIME=$(($NB_MINS * 60 + $NB_SECS)) |
| OVERHEAD=$(($REAL_TIME - $EXPECTED_TIME)) |
| |
| |
| |
| |
| |
| echo "$FRAMES_EXPECTED - $FRAMES_DROPPED = $FRAMES_RENDERED ($EXPECTED_TIME + $OVERHEAD / $CPU_LOAD)" |
| echo -n "1st score (100 max):" |
| python -c "print round(100*$FRAMES_RENDERED/$NB_FRAMES*$NB_FRAMES/$FPS/${REAL_TIME}.${NB_CENS}, 2)" |
The final result is a mark out of 100. Shouldn't be above 100. 100 would mean instant load of retroarch + start of the game, which is nearly impossible.
The basic idea : retroarch is run for 600 frames (assume the game is 60Hz). Then compute a few details :
- frames rendered
- frames dropped
- total time elapsed
- CPU %
Made a few tests with killing blade (the PGM logo is already stuttering on a non overclocked pi3)
Pi3 output example:
| |
| 600 - 0 = 600 (10 + 4 / 88) |
| 1st score (100 max):67.98 |
C2 output example:
| |
| 600 - 0 = 600 (10 + 2 / 69) |
| 1st score (100 max):81.23 |
Small explanation on the first result line
600 : number of frames expected
0 : number of frames dropped
10 : expected run time (600 frames at 60 Hz)
2 : run time overhead (means the full length of retroarch took 12s, despite i'm not showing the rest of the value but do have it in the script)
69 : CPU percentage
So from here you can notice:
- the pi3 took something like 14 to 15s for the overall launch of RA + ROM execution + quit RA whereas it took 12 to 13s on the C2
- the PGM logo was consuming 88% on pi3 vs 69% on the C2. And I tell you : the sound doesn't stutter on the C2
Overall, this bench doesn't look that bad for now 