Copying alexclarke@ from bug 485425:
"""
But something is clearly wrong. The trace shows the frame_timer_tq_ counts steadily rising but with the main thread being idle until something (typically an IPC handler) posts a task from the IO thread and wakes up the scheduler. The scheduler notices there's a bunch of delayed tasks that should have run and duly executes them. Eventually it goes idle and posts a delayed task on the base messageloop to process the next delayed task in X milliseconds - but that never comes back for some reason.
I have a theory this is due to the message pump timer coalescing, which incidentally only happens on MacOS X. When the entire process is in the background, ChildThreadImpl::OnProcessBackgrounded is called with |backgrounded| = true which calls base::MessageLoop::current()->SetTimerSlack() with base::TIMER_SLACK_MAXIMUM.
"""
Comment 1 by skyos...@chromium.org
, Apr 21 2016