Since we moved the metric out of core, I suspect it may've become a bit less accurate due to capturing the page load queue at a later time, and due to use of then() where done() should have been used instead.
- Check current call flow from ext.navigationTiming.js and see whether the marking of mwLoadEnd happens in the same tick of the event loop as the ready marking of the modules it is meant to correlate with
- (If not) make it so.
- Check the filtered list of modules that ext.navigationTiming.js comes up in onMwLoadEnd() against the list of modules queued from the <head> and see if it is waiting for modules that it shouldn't. For example, the initial execution of modules that run before NavTiming may've started a chain of lazy-loading modules unrelated to the initial page queue.
- (If not) make it right.