суббота, 7 декабря 2013 г.

iOS Азбука - тормоза

Все-таки не удалось мне побороть тормоза при рисовании. Поторопился с выводом, эксперименты показали, что придуманная оптимизация рождает еще более мощный тормоз и нестабильное поведение. Из-за потребности каждый тик фиксировать маскированные каляки через систему битмапов - начинается дикий жор памяти и перегрузки стэка с пиковыми залипаниями всего приложения. Так что я сделал пол шага назад - укороченными оставил драфт-каляки, рабочие каляки полностью выводятся, но сократил кол-во обрабатываемых точек размером маск-битмапа. Т.е. ситуация с тормозами стала лучше, чем была до оптимизации, но суть проблемы осталась, тормоза хоть и позже, но все равно начинаются, я расстроен и у меня больше нет заметных идей, чтобы красиво это поправить (можно еще ковырять систему в сторону оптимизации кол-ва точек, памяти, плотности и размеров битмапов... обидно, то, что казалось рабочим решением с треском провалилось. Еще есть мысль на задворках, я ее пока не думаю, но может быть нужно ее поднять и развернуть эксперименты, потенциально там может быть лююбопытное и крепкое решение.

А мысль такая - оперативное рисование делать только косметическим, маскировать только базовыми средствами CALayer и каляки выводить не через дрочку всего пути каждый тик, а сразу в слой, но при отпускании пальца запустить полное обновление кадра тем методом, которым сейчас формируется кадр каждый тик - хоть я и не буду в прямом эфире массив использоваьт, но он ведь в памяти будет, а больше мне ничгео не нужно, чтобы сформировать рабочий экран и считать пиксели.
Т.е. кажется, что переключение между сопосбами вывода информации может дать заметный прирост скорости, но это тонны экспериментов без очевидных перспектив.

P.S. сейчас еще раз погонял приложение... не знаю, может я ожидал бОльшего, но по прошествии некоторого времени в общем не так уж и тормозит, только если действительно долго калякать - тогда видно что линия становится угловатой, да и то только если мелкие барашки рисовать.
P.P.S Но может это и самоуспокоение, я в общем понимаю, что если наплодить некоторое кол-во точек в предела маски, там, где обрабатываются все точки - тормоза догонят очень быстро.

UPD.  И кстати, насчет слайда кадра - кажется вчера нащупал решение, по клику кадр уже двигается целиком, в это время картинки подменяются старые на новые, но есть проблемы - кадр для слайда не исчезает, а продолжает висеть и что-то не удалось быстро от него избавиться. Еше проблемка наметилась - во время слайда можно продолжать калякать, все каляки принимают активное участие в работе и мне не ясно как это предотвратить, я не контролирую процедуру анимации, надо еще читать. Но после нескольких прорывных дней уже казалось что вот, все, решения пошли, количество превратилось в качество, но хер там, еще крепко пахать нужно, чтобы все работало...

Сейчас еще погонял чужое приложение предназначенное для рисование - работает все, быстро и красиво, т.е. возможности принципиальные есть, но возникает вопрос о целесообразности затрат, делать из простой задумки заумное решение - пока не уверен, что оно стоит того, пусть приложение и будет отчасти колхозным, но будет работать, заодно будет повод улучшать со временем функционал.

Комментариев нет: