Белый Антон, 2538

60 FPS have been achieved through various optimizations and taking advantage of automaton's cyclicity.

The latter is done by caching several rendered iterations until they loop (1) and then displaying them continuously (2). This, however, introduces bigger heap consumption (approx. 5 Mb now) and, on devices with low minimum heap size, it introduces notable lags during phase (1) due to dynamic heap reallocation.
So if this is not acceptable, one can revert commits 93037cd..b5c0dfc and use non-caching version from 62199db, which is able to render automaton's iterations with approx. 30-35 FPS.
I wish I were smart enough to know how to separate boundary cases from the the remaining cases, but I'm not.