Reinhard Nissl wrote:
Hi,
Klaus Schmidinger wrote:
I notice that vdr is slow when i try to quickly browse channels. it eats around 18-20% of the cpu (atlon1200) when i hold left or right key when browsing channels (vdr 1.3.27 vanilla
- classic skin) .
With text2skin (1.0) and Enigma, it eats around 40-50% of the cpu and browsing channels is very very slow ... Note: cat channels.conf | wc -l --> 2600 lines
Just give the attached patch a try and report the effect.
The problem seems to be, that for scrolling one line, all 2600 channels are sent to plugins. The patch changes this behaviour to just send those channels to plugins that will be shown on screen by VDR.
These are only sent to plugins that actually implement a cStatus object. Why would text2skin need a cStatus?
From the sources: . . class cText2SkinStatus: public cStatus { . .
But it doesn't implement OsdItem(), so maybe my assumption was wrong.
Maybe it would make sense to have a second list of status monitors which contains all those cStatus objects which implement OsdItem() and to skip the loop completely if noone is interested this information.
What do you think about that, Klaus? Shall I create a patch for this?
I don't think so. Besides, OsdItem() and OsdCurrentItem() don't really play that well together, anyway. As it is now, a cStatus object gets the full list of all items when cOsdMenu::Display() is called, but the current item is only referred to by its text, no index is given. So I think this needs some more thought.
But let's first find out whether this is really the problem here. On my system I also have a cStatus object in the RCU remote control, and it also doesn't implement OsdItem(). Paging through the channel list is not slow at all.
@Guy: please comment out the lines
for (cOsdItem *item = First(); item; item = Next(item)) cStatus::MsgOsdItem(item->Text(), ni++);
in cOsdMenu::Display() (osdbase.c) and let us know whether this makes any change.
Klaus