Theres a lot of under the hood changes to how minimenu detects apps for HF7, to speed up the boot process. More can be done, but baby steps
ie: Minimenu was 'designed' (if you can say that
quickly; one of its goals was to work standalone, with X or without; so being we needed it quick (we thoguht we were shipping a week or two later... doh!), and wanted dual mode running, I went with SDL .. make it easy, and works with or without X, and makes testing easy (works on all popular OSes). Peachy! And another idea was to work without the rest of 'libpnd' -- maybe you just want to boot kernel + minimenu, have a bunch of shared libs, and ready to go -- most pnd apps would work like this, and run withotu X (since most use SDL as well!) -- its actually a very fast booting super mimnimal system, nice and lean. (But alas, I've no time to maintain a separate firmware brench, but I do suggest someone do it.. very fun. I got boot time down to like 11 seconds or something
Aaaaanyway, so minimenu can run without anything else.. which means it had to do 'app discovery' for pnd files all on its own, well and good, and that can take a few seconds as you see; note also that the rest of the system is _also_ doing that scan, since its spitting out .desktop files for DE like xfce and other appd benefit, so theres actually two scans at boot time, at nearly the same time .. but since dir info is cached and such, its not too big a performance hit, but theres definately a hit there.
So, it took awhile to get to, but I built in options so now minimenu can be configured to run either or both scans -- pnd scan, or .desdktop scan and trust someone else to maintain the .desktops. Given in pracice minimenu is usually run with the rest of the system (certainly in all our firmwares to date), this is a reasonable assumption. But the code for both is in there.. if someone wants to build another firmware and have minimenu do a pnd scan, no problem, flip a config value.
So now on boot, pndnotifyd does its app discovery early in boot and spits out .desktop files; minimenu watches for pndnotifyd to be done, and then picks up those .desktop files. That reduces boot load (one scan instead of two), and parsing the .desktop files is easier than parsing the pnd files .. so minimenu is general much sped up at its start time. The minus side of course is now mmenu has to wait for pndnotifyd (one of the background daemons) to finish up, but its pretty quick about its job, and its still faster than minimenu doing the second scan on its own at the same time.
Also, I experimented with some timing tricks; UIs are funny, since a lot of it is about 'perceived speed' versus 'real speeds', and 'speed during use' which may be not what you expect; so until recently minimenu was loading all icons into a cache at menu start up time, to try and keep 'usage speed high' with a hit to startup time; problem here is that minimenu wants to minimize its system impact, so it exits when you run a pnd -- so minimenu (unlike xfce) uses _almost zero_ system resources when a pnd is running; minimenu exits, runs the pnd, then comes back up. Nice! But as you can guess, this means minimenu is loading up all those icons every time you come back to the menu. It runs fast, paging and browsing is quick.. but you have to load up all those icons, many of which you'll never see (unless you're hitting All all the time, I suppose .. which I do
So, here I got to thinking, and ED is always thinking about user experience and pointed me in the right way.
If you dig into minimenus configs (which you don't want to
, you can fiddle with a lot of stuff. Some stuff is exposed in the config UI, but the real nasty fiddly bits are not shown there.. they're just in textfiles for peopel to edit. Anyway, you can turn on background loading of preview pics (if you use the detail side panel at all), or background app scanning, or background icon loading. Turns out, since we're essentially singlre core, that doing things in background just chugs things up -- your main thread gets slower, and your behind thread isn't going fast, so cock wup the main thread for longer than it should Annoying
(At least, doing threading in a simple brute force manner.. doing it very very carefully can works well, but thats work
Anyway, most background stuff is turned off, it just didn't work out all that useful. So preview pics, if you want them, are on demand loaded when you idle the selection -- lets oy mvoe the selection around fast, but when you pause on an item (for a configurable amount of time..), it then decides to load the preview and makes you wait. (And loading previews is slow due to the whole 'mount', 'read pic', 'unmount' nature of fetching those until we revise the pnd file layout a bit, sometime down the road.) Anyway.
So for icons, its always had the ability to background load icons, but it wasn't really efficient about it since it didn't seem to work over well for user experience, so I didn't work over that code much; recently I thought I'd bang on it some more and introduced a bunch of configurable options .. when to do background icon loading, how fast to do it, which ones to do -- visible, go ahead so paging is fast if you're idling, or to scan all, or what.. all that stuff. Loading icoins is fast, but I always liked the look of, and the function of, background loading -- show you the generic icon template, then pop up the icons as it loads them, while you're working. To my brain, it seemed you'd want to 'get to business' fast, not wait -- maybe you just want to hit 'B' or 'Start' and run the app, who cares if the icon is loaded? So I banged around with a lot of options .. faster background icon loading slows down the main thread, so moving the selection feels clunkier; but it can load each image fast, just as long as it lets you move the selection around fast. But in the end, it just felt 'not right' to do background action, even if just background loading 'next page' and not too many icons, etc and so on.
Meanwhile, ED kept on with a suggestion that I misinterpreted, but when I 'got it' through my thick skull, I tried, and it is what we're going with now. Its all configurable of course, but right now its set to -- when it needs to show icons, make you 'wait' and load them, then show the screen. Don't background anything, but also do not preload anything; when icons are needed, go get them right bloodywell then.. not earlier, not later, right when you want them. The reason being.. loading icons, even a whole page full, takes no time at all. But doing them _all_ in advance, that takes a bit of time; doing them in background, that cocks up everything or takes awhile.
So now, you load up minimenu and it scans .desktop files instead (fast) and then jumps to the configured start page - be it All, or some tab/category, or whatever; then when it goes to render the page, it loads up the icosn it needs right then and there (from cache if its already seen them of course, for free.)
turns out this is bloody fast; at menu startup it picks up the app list fast, and then on demand loads icons fast; no extra work, nice and trim. Thats the minimenu philosophy.. and now instead of maybe 10 seconds of delay (say), you might get 2. Its not a big payoff for just afew apps, but some crazy peopel like to suck down the entire Repo onto their pandora, like ED does, and the payback is huge if you've got a large pile of applications.
--
Then for user experience speedup, theres stuff like .. when you go into a subcat folder abd backup, where does the selection land? and when you run a pnd app or shutdown and come back to the menu.. do we jump to your default startup tab, or go back to the app you had selected? "Simple" changes like these can make your geneal usage experience much mroe efficient, and 'feel better'. Sure, I didn't code swooshy fancy opengl graphcis in with sliding panels .. I didn't have time when I designed this menu, and I wanted trim and sleek and fast. But we do try to make the device fun and fast to use
Much more to come.. lots of improvements and tweaks, and behavioural changes in where the selection goes when, and search filtering the app listing based on keys entered, and more efficient file management, and so on.
If you guys still use it, we'll keep refining it
jeff