drain method
Returns and consumes all events this reader has not yet seen.
Allocates the returned list; prefer forEach in per-frame systems.
Implementation
List<T> drain() {
final channel = _activeChannel;
final from = _cursor - channel._base;
final start = from < 0 ? 0 : from;
final result = channel._events.sublist(start);
_cursor = channel._end;
return result;
}