This protocol should be placed at the top of the stack. It measure delivery times:
- Average times for single messages to get delivered. This returns when receive() returns
- Average times for message batches: the delivery time is computed as time to deliver the batch divided by batch size