Vblank details

The order of events is correct.

The calls to 2 and 3 follow each other on the same call stack, under the same vblank event, so there is no programmed time difference between them.

As a general rule, vblank listeners should only be used for fast state updates and calling the repaint() function. The lengthy painting operations should happen inside Component::paint().

Regarding the feature request to Add timing info to VBlankListener callbacks: the request does make sense, so it’s being considered. But until then it would make sense for each Component to make only two calls

this->now = Time::getMillisecondCounterHiRes();
this->repaint();

ensuring that Component’s stay in sync.