I know that the original version of this slipped in in an earlier pull, but Event instances are not the right abstraction here.  I think what you want is either:

* FrameState provides a `afterRender` event, which primitives can add listeners to to fire their own events, or do whatever.  This would still be atypical in that this event would clear listeners after each frame.  Maybe this makes sense if you imagine that each frame has a fresh new FrameState, even if that's not true in practice.
* Or, `afterRender` is simply an array of functions, which are called after each frame.  There's nothing inherent about raising events, these are just callbacks.