Last edited 5 months ago

How to monitor the display framerate: Difference between revisions


Latest revision as of 09:43, 8 October 2024



1. Basic usage

When an animation is running on the display, the related framerate can be monitored from the display driver[1] level thanks to the command:

(while true; do export fps=`cat /sys/kernel/debug/dri/0/state | grep fps -m1 | grep -o '[0-9]\+'`; echo display ${fps}fps; sleep 4; done) &

The display framerate is then periodically output in the user console in "fps" (frames per second):

display 50fps
display 50fps
display 50fps

2. Advanced usage

The display can be composed of several layers which can be refreshed independently. Associated framerates can be monitored from the display driver[1] level thanks to the command:

(while true; do cat /sys/kernel/debug/dri/0/state | sed -nE '/user|plane-/p' | sed -e ':a;N;$!ba;s/\n\t//g;s/user_updates=/ /g;s/plane-/display layer/g;' | sed -e 's/^.\{,11\}//g'; sleep 4; done) &

The display layer framerates are then periodically output in the user console in "fps" (frames per second):

display layer0 60fps
display layer1 25fps
display layer2 30fps

3. Tips

  • Stop monitoring the display framerate with the command "kill -9 `ps -o ppid= -C sleep`". This command may not work depending on your system configuration (busybox ps features, sh shell configuration...). Alternative method is to use the command "fg" followed by "CTRL+C" in your terminal.
  • Debugfs[2] configuration needs to be enabled in order to be able to monitor the display framerate thanks to the DRM/KMS framework[1] debug directory "/sys/kernel/debug/dri".
  • Adjust the display framerate update period by modifying the "sleep" value (4 seconds in the above examples).
  • Use the dmesg[3] command "dmesg -n8" to mix both user and kernel console outputs.

4. References