A quick caveat to say that I don’t consider myself particularly expert but I wanted to share my experience with the HW optimizations in 9.4 for the ESP32-P4. I am working with an SSD1327 OLED in RGB565 and doing some fairly complex multi-layer animations in addition to using the widget library.
The carrot of a potential 33% speed boost was enough for me to brave the stick of an upgrade from 9.2.2 without too much pain. I had to do some modifications to LVGL’s PPA draw and draw_fill modules to get it to play nice with my SSD1327 driver but was able to get it to build, only to see most aspects of my UI become really unstable. Lots of tearing and my menu system wouldn’t display properly.
In the end, I had to disable PPA because this is not my whale; I could only justify putting in a few hours trying to get it working, and it was clear that the HW optimizations PPA could offer were not going to be easy for me to take advantage of.
The important part of this conversation is the distinction between the promise and what it can actually do - at least in the context of a typical LVGL app. PPA is amazing for blitting images and drawing large chunks of color in DMA. If you’re doing relatively simple things - think “full screen image carousel” perhaps - then I suspect PPA will be amazing. But if you have a complex screen with anti-aliased text and curved polygons and gradient shadows then what I think is happening is two bad things:
- it’s hammering PPA with a large number of requests for 1x1 area updates, which is not a performance win
- PPA ends up competing with your redraw loop, so far as I can tell; the tearing comes from multiple things trying to update, and this is almost certainly at least partially my fault but still, it made it hard/impossible to actually use it in my app
It’s very possible that I’ve missed some fundamentals about how I could make PPA work better for me, and I’m open to revisiting in the future. However, the TLDR is that PPA only delivers a 33% boost under a fairly specific set of ideal constraints. Perhaps a more experienced LVGL developer could arm wrestle it more successfully, but I would end on saying that even my very stock + basic widget based menu was fully borked by enabling PPA, which came as a surprise.
Just because something builds, doesn’t mean it’s going to work the way you need it to.