Отвечу сразу и вам, и предыдущему комментатору. AWS Mobile Hub как раз создан для убийства обоих зайцев. Он предоставляет в какой-то мере BaaS, как было у Parse (то есть база в облаке, код в облаке, аналитика, пуш-сообщения, и так далее). Но, в отличие от того же Parse, это профильная технология компании. Mobile Hub просто удобная консоль (можно сказать, зонтик) над имеющимися технологиями Amazon. И уж если Amazon решит закрыть что-нибудь уровня S3 или CloudFront, у всего интернета будут куда большие проблемы :) А если закроют только Mobile Hub, все сервисы и интеграция между ними точно останутся.
Легко назвать упёртостью нежелание переписывать вообще всё полностью с нуля. Sketch очень завязан на Core Graphics, во многом благодаря которому ему и удаётся весить 20Мб против 1Гб, выглядеть легковесно и нативно. Выпуск версии под Windows — это такая головная боль, которую они, всего скорей, не потянут.
Я бы ещё попробовал транспонировать все вычисления. Навскидку не скажу, будет ли это действовать без поворота, но в исходном алгоритме вычисления производились по столбцам, что может быть неоптимальным со стороны процессорного кэша, и если проводить вычисления по строкам, результат может оказаться гораздо лучше.
Ещё возможным недостатком может быть большое количество выделений/освобождений памяти. Оригинальный алгоритм очень долго сидел в сборке мусора, несколько раз даже выполнялась полная остановка потоков. Возможно, если бы промежуточные буферы переиспользовались активнее, быстродействие ещё бы значительно выросло.
А не могли бы вы выложить проект полностью, чтобы можно было его рррраз, и собрать, а не играть в настраивание билда? Хочется на досуге попытаться его оптимизировать без влезания в нативный код.
Я вот прямо чувствую, что переписав парсер XML (на использование того же SAX), уже можно догнать и перегнать C++. Не говоря уж о том, что и как можно сделать, если оптимизировать java-код.
Kotlin for Android Developers
Kotlin in Action (не только in Action, но и in Progress)
Ещё возможным недостатком может быть большое количество выделений/освобождений памяти. Оригинальный алгоритм очень долго сидел в сборке мусора, несколько раз даже выполнялась полная остановка потоков. Возможно, если бы промежуточные буферы переиспользовались активнее, быстродействие ещё бы значительно выросло.