| ~~~~~~~ | |
| Polling | |
| ~~~~~~~ | |
| .. include:: prologue.rst | |
| As of release 5.0, BRLTTY has been converted from being polling-based to being | |
| event-based. This means, among other things, that it's now able to become | |
| completely idle whenever it doesn't have anything useful to do. For comparison, | |
| it formerly used a huge, central, main loop which was run frequently (about 25 | |
| times per second), and which was aware of, and had to check for, every single | |
| task that might need to be performed. | |
| In practical terms, this change, when compared with how BRLTTY used to work, | |
| delivers at least the following significant benefits: | |
| * Noticeably improved response time. Near instant reaction to significant user | |
| and system events rather than waiting for the next polling cycle to check | |
| for them. | |
| * Much less system load. Just a few, short-lived bursts of activity when | |
| actually necessary rather than frequent, much longer-lived checking that, | |
| far more often than not, resulted in nothing needing to be done. | |
| * Way less battery drain. The system is no longer forced either to remain | |
| awake or to continually wake up after a rather brief nap. | |
| There are cases in which polling is still being used. Some of these will | |
| eventually be resolved by future code changes, while others, unfortunately, are | |
| required due to host platform limitations. | |
| .. topic:: Monitoring for Screen Updates | |
| This task involves checking for size changes, content changes, highlighting | |
| changes, cursor movement, etc. It's event-based on: | |
| * Android | |
| * Linux text consoles if the kernel is at least 2.6.37 (released on January 4, | |
| 2011) | |
| * Linux graphics consoles monitored via AT-SPI2. | |
| On other platforms, |frequent polling| is used. | |
| .. topic:: Monitoring for Serial Input | |
| This task is event-based on: | |
| * Linux | |
| On other platforms, |frequent polling| is used. | |
| .. topic:: Monitoring for USB Input | |
| This task is event-based on: | |
| * Linux | |
| On other platforms, |frequent polling| is used. | |
| .. topic:: Monitoring for Bluetooth Input | |
| Tghis task is event-based on: | |
| * Android | |
| * Linux | |
| On other platforms, |frequent polling| is used. | |
| .. topic:: Starting the Braille Driver | |
| On all platforms, |periodic retrying| is used. | |
| .. topic:: Starting the Speech Driver | |
| On all platforms, |periodic retrying| is used. | |
| .. topic:: Starting the Screen Driver | |
| On all platforms, |periodic retrying| is used. | |
| .. topic:: Starting the Keyboard Monitor | |
| On all platforms, |periodic retrying| is used. | |
| .. topic:: Creating the PID File | |
| On all platforms, |periodic retrying| is used. | |
| .. |frequent polling| replace:: frequent polling (about every 40 milliseconds) | |
| .. |periodic retrying| replace:: periodic retrying (about every five seconds) |