ok, well let me start by offering an apology, i didn't mean to come across as harsh i just see so much programming debauchery and incorrect information during my day job that i was frustrated by the non-obvious reasons for some of the aformentioned code present in xmbc.
i didn't want to just dive into source code and change something without first knowing why it was there in the first place. i could've changed it and just broken something else, which wouldn't have helped anybody. it seems from what you (butcher) and frodo were saying originally, the vblank and sleep(16) were required. now, i'm getting conflicting information and i'm not entirely sure what is the correct course of action.
i believe the vblank and sleep(16) combination was causing the 25fps slowdown - if you recall mrc's post above, the menu runs at 50fps, this goes through the vblank call. if you add a sleep(16) to this, it drops to 25fps. if you then remove the vblank and *leave in* the sleep(16) call, it runs ~35fps.
i just verified this myself (on a greenie).
so, to conclude i have a couple of points/questions.
1) are both a vsync and a sleep() required?
from the docs, it seems like a blockuntilverticalblank() call yields so other threads can do processing, if this is the case, it seems like a sleep() would be redundant, and vice-versa.
2) using the ftp server while the vis is running is a compelling argument - the sleep() would handle this, but i don't think you need a vsync to double-enforce that, or have i missed something?
3) a sleep(10) if you think that's enough, and without a vblank runs around 45fps. this might be a reasonable compromise between graphics and other tasks needed, but i'm not fully grokked on the other code so i can't say for certain.
anyhow, let me know if you think any of that is good/bad/whatever before i go into source code and break anything
cheers,
-mezz