It's currently nearly 4x the cost of base::MessageLoop on Linux and almost 6x on Android. Fortunately it looks like we understand most of where the performance is going:
* On Linux PlatformThread::CurrentId() is surprisingly slow.
* We are collecting several UMAs which are slow. I propose removing them.
* The locking for GracefulQueueShutdownHelper is slow, I propose to use PostTask instead to deal with thread hops.
* ThreadControllerWithMessagePumpImpl::DoWork is unnecessarily calling pump_->ScheduleWork. All it needs to do is return true.
* SequenceManagerImpl::MainThreadOnly::task_execution_stack ought to be a vector instead of a list to avoid unnecessary memory allocations.
* Recording task start and end time is probably not interesting for non-blink work and isn't for free.
Comment 1 by alexclarke@chromium.org
, Oct 22