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 from = _cursor - _channel._base;
final start = from < 0 ? 0 : from;
final result = _channel._events.sublist(start);
_cursor = _channel._end;
return result;
}