Out of interest (this is a question for Thom I guess), why is the N800 orbiter so responsive (in terms of volume control, skipping forward/back, any repetitive button presses) in comparison to the touch orbiters? Also the N800 ALWAYS displays the correct screen, in that it never needs to be refreshed - is there some fundamental reason for this?
I assure you this isn't a dig at your work darrenmason, I am just curious.
Cheers,
Matt.
The Orbiter runs natively on N800. By that it connects directly to the server, responds to and creates its own DCE messages and then renders the user interface to the N800 using native libraries.
The android orbiter or any of the touch orbiters that have been developed and also the web orbiter rely on a proxy orbiter. What this is, is the same orbiter described above that runs natively on the N800 is running on another linuxMCE machine (typically the CORE). This orbiter is not rendering it's user interface to local libraries but is instead rendering to a bitmap - which is effectively a snapshot of the screen.
The touch orbiters then connect (typically via wireless) to the proxy orbiter and retrieve the bitmap. It is then displayed on the remote device which listens for touch commands on the bitmap. Those touches are sent back to the proxy orbiter which then reacts by updating the UI and rendering a new bitmap. This is then sent back to the touch device.
So each touch will at a minimum involve the rendering of a new bitmap and transferring that to the remote device. This takes time and introduces the lag that you are seeing in interactions that involve a lot of repetitive key presses.
There is also some code in the proxy orbiter that allows a flag to be set when the display updates independant of a user touch. The problem is that the remote device needs to poll for this flag as the communications with the proxy obriter as essentially client server. Depending upon this polling interval - there will be a lag associated with these updates. Additionally if that flag is not being set correctly then there may be inconsistencies with what is on the screen and what has been rendered.
Ways to improve;
* Write a native orbiter for the device or more correctly port the orbiter code to a device. This is easier on devices that support the same runtime libraries as Orbiter has already been built with. The N800 platform is better suited to this than Android and/or iOS.
* Reduce the work that the proxy orbiter is doing. This can be done by reducing your resolution and therefore decreasing the bandwidth required to transfer the bitmaps back and forth. This could also be done by not sending bitmaps but instead send markup that would be natively drawn.
* Reduce your 'AnyNews' polling interval so that refreshes occurr quicker when the updates are from independent events
Keep telling people what is not working the way you want it to though as it will be input for any changes that do get done.
HTH
Darren