This is jamesr@ code I am landing.
On Windows the message pump code tried to manage the systemwide timer resolution to fire delayed tasks with better than 15ms resolution but it was buggy:
1- A short task that was not followed by any other task will leave the systemwide timer pegged to 1ms
2- After we decided to crank up the timer we would 'lease' the timer for 1 second, for no good reason.
Both issues are detrimental to battery power.
The source of both problems is that we tried to decide with incomplete information. This patch solves that by having 1 bit for each pending task that requires a high resolution timer and a sum of the number of tasks that require high res timers.
TEST=included here, also see the bug for manual testing.