How to monitor the display framerate

Revision as of 15:42, 5 June 2023 by Registered User (→‎Notes)
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. Advance 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)
display layer0 60fps
display layer1 25fps
display layer2 30fps

3. How 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 the example).
  • Use the command "dmesg -n8" to mix both user and kernel console outputs.
  • Debugfs configuration needs to be enabled.