2020-05-28, 10:04
(2020-05-26, 00:13)DeawD8t Wrote: (...)
Currently top (with Irix Mode Off) shows me 10% cpu utilization if I play some mp3 audio stream (I can live with that). As soon as the Slideshow Screensaver kicks in this jumps to > 70% cpu utilization (constant - not only during Slide transitions). Slide jpegs are stored on a local hard drive and have been shrinked to a 1024x768 format.
I might add that due to the lack of driver support this netbook has no hardware rendering acceleration.
I had high hopes for both the dirty region and smart redraw activation, because from my understanding of these techniques, the screensaver's rather "static" rendering of a full screen still image *should* benefit from "only rendering changed regions" - but it seems that it doesn't have any effect.
Is this a known problem, or am I on a completely wrong track with my assumptions regarding how the rendering is done? I run Kodi 18.7, Picture Slideshow Screensaver Addon version is 5.0.9. on an Ubuntu 18.04.2 LTS
Update: I investigated a little bit further (I have never poked that deep into Kodi, so I am still in a steep learning curve and apologize for any naive or dumb questions and assumptions).
tl;dr: IMHO the culprit of this lies somewhere in how the overlay of music track duration / progress is rendered in the GUI. Disabling "Display music info (...)" is a quick and dirty workaround for cpu utilization to calm down.
Some more details of what I have tried so far:
- if I explicitly disable both "dirty region awareness" and "smartredraw", via <algorithmdirtyregions>0</algorithmdirtyregions> and <smartredraw>false</smartredraw> in advancedsettings.xml, then I get constant high utilization of > 70% (mainly from 4 different llvmpipe threads inside the kodi-x11 process, determined by top -H through a ssh, no matter if the screensaver runs or not); this is expected for this weak Netbook Atom platform without hardware rendering and is a proof for me that dirty region rendering is still a valid, working and needed approach on my platform.
- If I enable dirty regions awareness again, and disable to show music info in the Screensaver settings, also the Screensaver behaves as expected (short CPU spike during transition, otherwise utilization around a baseline 10%) - so disabling music info would be a workaround - however, I want to use the "Display music info" feature as it gives a nice feedback that something is playing.
- If I enable "Display music info" in the Screensaver settings and <visualizedirtyregions>true</visualizedirtyregions> in advancedsettings.xml, it becomes obvious, that if music info is displayed, the screen as a whole remains "dirty" the whole time the Screensaver runs (it is tinted red and has some transpartent overlay from visualizedirtyregions). However IMHO expected behaviour would be: only a "region" around the music info should be dirty.
At the moment I trying to tie together the information I get from .kodi/addons/screensaver.picture.slideshow/resources/skins/default/720p/script-python-slideshow.xml and .kodi/addons/screensaver.picture.slideshow/resources/lib/gui.py; if I am not mistaken (I am no programmer ...), the music info control gets startet ("self._set_prop('Music', 'show')") inside self._get_settings() when the Screensaver gets activated, but my wisdom ends when trying to understand how the elapsed time of the music playing ("$INFO[Player.Time(hh:mms)]") is rendered every second, if it is only called once during initialization and is not part of any loop during the slide show.
Any hint where to look further is appreciated, also if this is the wrong forum thread, e.g. if this is a more GUI / rendering specific problem that should be addressed elsewhere (where?). My (probably naive) approach would be to find out, if I can "regionize" somehow the Display music info Control, so it is properly picked up as a dirty region and not the whole screen. An alternative I am going to try is to remove the progress and "time" label controls, which whould still be an ugly workaround.