Как я оптимизировал TGS-стикеры в Compose Multiplatform: от Compottie к Frame Baking

habrahabr.ru · world
Full story

A developer working on GhostGram, an experimental Telegram client built with Kotlin Multiplatform, had to put extra effort into TGS stickers. The initial approach seemed simple: take a TGS file, pass it to a player, and show the animation in the UI. On Android, two problems showed up: some stickers played noticeably faster than in the official Telegram app, and another issue appeared when multiple animations were displayed. The title frames the optimization as a move from Compottie to frame baking.

Когда я разрабатывал GhostGram - экспериментальный клиент Telegram на Kotlin Multiplatform, - со стикерами пришлось повозиться. Сначала всё выглядело относительно просто: получить файл TGS, передать его проигрывателю и показать анимацию в интерфейсе. Но на Android обнаружились две проблемы. Некоторые стикеры воспроизводились заметно быстрее, чем в официальном Telegram, а при отображении нескольких анимаций график HWUI показывал серьёзные задержки. Я пробовал оптимизировать существующую реализацию, затем сменил библиотеку и в итоге пришёл к другому подходу: предварительно отрисовывать кадры в Bitmap и воспроизводить их как последовательность изображений. Расскажу, почему я выбрал этот подход, что пришлось дорабатывать после первой реализации и почему проблема быстрого скролла пока осталась открытой. Читать далее

Read full article → Compare