I'm attaching the patch that looks promising (from local instrumentation): Changes: - render_block mechanism when doing "inner" run loops - don't CGContextFlush manually (documentation recommends to leave window renderer to handle that) - some small fixes in releases (toolbar) - niling Emacs' frame struct on window dealloc - it should be garbagged but it seems something is still attached to the ref and cannot be GCed Known issues: - Can't get resizing as it's chicken-and-egg problem - drag redraws and redraw reads on socket (which blocks redraws) Other remarks: - Increasing number of buffers in "double buffering" prevents leaks and memory allocation, but I didn't include it in the patch (e.g. not array of 2, but array of 4 or 6) Best, Przemysław Alexander Kamiński