Last edited 10 months ago

How to monitor the display framerate

Applicable for STM32MP13x lines, STM32MP15x lines

1 Basic usage

When an animation is running on the display, the related framerate can be monitored from the display driver 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 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 How to stop the monitoring?

  • Stop monitoring the framerate with the command "kill -9 `ps -o ppid= -C sleep`".
  • Adjust the framerate update period by modifying the "sleep" value (4 seconds in these examples).
  • Use the command "dmesg -n8" to mix both user and kernel console outputs.
  • Debugfs configuration needs to be enabled.