Mobile/Powersaving/Wakeups
< Mobile | Powersaving
Jump to navigation
Jump to search
Overview
'Wakeups' are instances where a thread enters activity. Each such wakeup stops the CPU from sleeping. Several short wakeups are much worse than a single long wakeup, because each wakeup will prevent sleeping for a short time afterwards, and sleeping can save a lot of power (see powertop docs). So avoiding wakeups is important, and if they are unavoidable then 'clumping' them together is preferable to scattering them at semi-random times.
Some Wakeups of Note
Tested on Fennec trunk, May 27 2010, showing the full about:home start page (including addon suggestions - had to set reported version in application.ini to 1.1 for that).
- Animated images timers remain when unneeded, can cause plenty of wakeups (on current about:home page, causes 4/second)
- JavaScript Watchdog thread which does GC and neverending-script-detection (1/second)
- nsUITimerCallback (1/5 seconds)
- nsIdleService::IdleTimerCallback (~1/5 seconds)
- xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp:101 - likely some JS callbacks (~1/5 seconds)
- The TileManager code sets and attribute each time we paint, which causes the Refresh Driver to spring into action, and stay active for a few frames at 50Hz. As a result on pages with enough animations - even slow ones - the Refresh Driver timer constantly or almost constantly runs at 50Hz. This effectively nullifies the benefits of timer grouping/clumping, and ironically exactly in the case where that would have helped (lots of animations). But, the TileManager will be replaced by new Layers code, so hopefully this will be a thing of the past.
Other wakeups to investigate:
- SMIL SVG animation runs at a 20ms (50fps) timer, no matter what the animation
- nsHttpConnectionMgr::OnMsgPruneDeadConnections (http keepalive stuff)