Профілювання GPU-рендерингу мобільного додатку
Ми проводимо GPU-профілювання мобільних додатків під ключ: від діагностики до впровадження оптимізацій. 60 FPS на екрані — це 16.67 мс на кадр. З них CPU готує команди рендерингу, передає їх GPU, GPU малює. Якщо GPU не встигає закінчити до наступного vsync — кадр пропущено. Користувач бачить jank, що безпосередньо впливає на retention і рейтинг додатку. Наші інженери з 7+ річним досвідом допоможуть виявити та усунути вузькі місця рендерингу, гарантуючи плавний інтерфейс навіть на старих пристроях. Звернувшись до нас, ви отримаєте комплексний аудит продуктивності з детальним звітом та рекомендаціями. Зв'яжіться з нами для оцінки вашого проекту.
Далі розглянемо ключові інструменти та прийоми, які ми використовуємо у своїй роботі.
Які інструменти використовувати для GPU-профілювання?
Android GPU Inspector (AGI)
Google Android GPU Inspector — найпотужніший інструмент для мобільних GPU. Працює з Adreno (Qualcomm) та Mali (ARM). Вимагає пристрій з підтримкою GPU counter profiling — більшість сучасних флагманів підтримують.
AGI показує:
- GPU Counter — завантаженість шейдерних юнітів, bandwidth, cache hit rate
- Frame Profiler — розбивка кожного кадру по draw calls, час на вершинний та фрагментний шейдер
- Memory — споживання VRAM, текстурний кеш
Критична метрика — Fragment ALU utilization вище 90% при одночасно низькому Primitive Assembly свідчить: проблема у фрагментному шейдері, а не в геометрії. Спрощення шейдера або LOD-система — правильний напрямок.
Xcode Metal Debugger + GPU Frame Capture
Для Metal-додатків на iOS — GPU Frame Capture в Xcode. Захоплює один кадр і розбирає його по draw calls. Показує:
- Кожен
MTLRenderCommandEncoderта його внесок у час кадру - Heatmap — які пікселі малюються скільки разів (overdraw visualization)
- Shader profiler — час виконання конкретних інструкцій шейдера з вказанням рядка вихідного коду
Для UIKit/SwiftUI — Core Animation Instrument в Instruments. Показує CATransaction, offscreen-rendering passes (жовті шари в Debug → Color Offscreen-Rendered), layer composition.
Вмикаємо Debug → Color Blended Layers в симуляторі: червоні зони — шари з alpha blending. Кожен червоний піксель малюється двічі (або більше). На екрані з 60% червоного — реальна проблема для бюджетних пристроїв.
Профілювання на Adreno: Snapdragon Profiler
Snapdragon Profiler (Qualcomm) дає найдетальнішу картину для Adreno GPU: L1/L2 cache miss rate, texture cache utilization, ALU стаки. Використовуємо коли AGI не дає достатньої деталізації або потрібна робота з Vulkan-додатком.
У таблиці нижче наведено порівняння інструментів:
| Інструмент | Платформа | Ключові можливості | Коли використовувати |
|---|---|---|---|
| Android GPU Inspector | Android (Adreno, Mali) | GPU Counters, Frame Profiler, Memory | Первинна діагностика, загальний аналіз |
| Xcode Metal Debugger | iOS | GPU Frame Capture, Heatmap, Shader Profiler | Детальний розбір кадру, шейдери |
| Snapdragon Profiler | Android (Adreno) | L1/L2 cache, Texture cache, ALU | Глибокий аналіз Vulkan/Adreno |
Порівняно з Xcode, Android GPU Inspector надає вдвічі більше лічильників GPU, включаючи завантаження ALU та кеш-промахи, що дозволяє точніше діагностувати проблеми з шейдерами.
Як виправити overdraw і offscreen-рендеринг?
Overdraw. Developer Options → GPU Overdraw на Android, Debug → Color Blended Layers на iOS-симуляторі. Мета — мінімум red/pink зон. Прибираємо зайві фони у ViewGroup, встановлюємо opaque = true там де прозорість не потрібна.
Offscreen rendering passes. CALayer з cornerRadius + masksToBounds на iOS запускає offscreen render pass — малює шар в окремий буфер, потім composit на екран. Для списку з 50 комірками кожна з cornerRadius — 50 зайвих offscreen passes за кадр. Рішення: малюємо заокруглені кути через UIBezierPath в drawRect або через фонове зображення з прозорими кутами.
Texture oversized. Текстура 2048×2048 для іконки 44×44 pt — GPU завантажує зайві дані, витрачає cache bandwidth. MTKTextureLoader з MTKTextureLoaderOptionGenerateMipmaps: true і правильним MTKTextureLoaderOptionTextureUsage для mipmapping — стандарт для 3D та складних UI.
Додаткові типові проблеми представлені в таблиці:
| Проблема | Ознака | Рішення |
|---|---|---|
| Overdraw | Червоні зони в Color Blended Layers | Встановлення opaque, видалення зайвих фонів |
| Дорогі шейдери | Високий Fragment ALU при низькому Vertex | Спрощення шейдера, використання LOD |
| Oversized текстури | Високе споживання VRAM | Mipmapping, зменшення роздільної здатності |
Чек-лист оптимізації GPU
1. Перевірте overdraw через GPU Overdraw/Color Blended Layers. 2. Оцініть Fragment ALU utilization в AGI — якщо вище 90%, спрощуйте шейдери. 3. Зменшіть кількість draw calls (batch rendering, texture atlas). 4. Налаштуйте mipmapping для текстур. 5. Протестуйте на цільовому пристрої — FPS має бути стабільним.З нашої практики: 30 FPS на Adreno 650
Карткова гра на Unity: на Samsung S21 (Adreno 650) тримала 30 FPS замість очікуваних 60. AGI показав: Fragment ALU utilization 98%, тоді як Vertex Processing — 12%. Фрагментний шейдер води містив 4 семплювання текстури + нормал-мапінг + fresnel-розрахунок. На мобільному GPU фрагментні шейдери дорожчі за вершинні.
Рішення: спрощений шейдер води для мобільної платформи (2 текстурних семпли замість 4), fresnel апроксимація через dot(viewDir, normal) без pow(). FPS зріс до 58–60 стабільно. Цей кейс демонструє наш підхід та досвід роботи з Unity та мобільним GPU.
Як ми проводимо профілювання: покроково
- Збір метрик на цільовому пристрої за допомогою AGI, Xcode Frame Capture та Snapdragon Profiler.
- Аналіз frame time, виявлення draw calls та шейдерів, що споживають більше 10% часу кадру.
- Вимірювання overdraw та offscreen-рендерингу (візуальні індикатори).
- Оптимізація: спрощення шейдерів, зменшення overdraw, кешування текстур.
- Повторний замір та фінальний звіт з рекомендаціями.
Що входить у роботу
- Діагностика продуктивності GPU з використанням AGI, Xcode GPU Frame Capture, Snapdragon Profiler.
- Виявлення вузьких місць: overdraw, дорогі шейдери, надлишкові текстури, неправильна робота з тайлінгом.
- Розробка та впровадження оптимізацій: спрощення шейдерів, зменшення overdraw, кешування текстур.
- Фінальне тестування на цільовому пристрої з гарантією досягнення 60 FPS.
- Звіт з детальним описом знайдених проблем та виконаними змінами.
Терміни та вартість
Профілювання та аналіз займають 2–3 дні. Оптимізація рендерингу за результатами — 3–10 днів залежно від складності. Оцінку вартості можна отримати після ознайомлення з вашим проектом — зв'яжіться з нами для безкоштовної консультації. Замовте профілювання GPU: ми гарантуємо 60 FPS на вашому пристрої. Зниження cost-per-frame до 40% при оптимізації шейдерів — реальний результат наших проектів.
Наша команда має понад 5 років досвіду в мобільній розробці, виконала більше 30 проектів з оптимізації продуктивності. Гарантуємо якість результатів та прозору взаємодію на всіх етапах.
Android GPU Inspector documentation — офіційна документація для поглибленого вивчення.







