Профілювання продуктивності мобільної гри: інструменти та методи

Скарга «гра гальмує» — це не діагноз. Гальмує тому що CPU не встигає до GPU, тому що GC збирає сміття, тому що текстури не поміщаються у VRAM, тому що шейдер занадто важкий для Adreno 618, або тому що на iOS змінилася поведінка Metal. Без профілювальника це ворожіння. З ним — конкретні числа і конкр

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Профілювання продуктивності мобільної гри: інструменти та методи
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Скарга «гра гальмує» — це не діагноз. Гальмує тому що CPU не встигає до GPU, тому що GC збирає сміття, тому що текстури не поміщаються у VRAM, тому що шейдер занадто важкий для Adreno 618, або тому що на iOS змінилася поведінка Metal. Без профілювальника це ворожіння. З ним — конкретні числа і конкретний винуватець.

Ми профілювали понад 100 мобільних ігор — від гіперказуалок до AA-проєктів. За 5 років на ринку накопичили базу типових проблем і готових рішень. У цій статті розберемо, як ми знаходимо вузькі місця і що входить у результат. Якщо вам потрібно швидко оцінити продуктивність вашої гри — зв'яжіться з нами, оцінимо проєкт за 1-2 дні.

Як ми проводимо профілювання продуктивності мобільної гри?

Процес складається з кількох етапів. Спочатку вибираємо цільовий пристрій — той, на якому гра гальмує. Потім підключаємо профілювальники і збираємо дані протягом як мінімум 10 хвилин геймплею, щоб зафіксувати тротлінг. Після аналізу видаємо звіт з конкретними метриками.

Unity Profiler — відправна точка. Режим Deep Profile уповільнює гру, але показує всі виклики з алокаціями. Підключається до білду через Development Build + Autoconnect Profiler або через USB. Обов'язково дивимося на девайсі, не в редакторі: на редакторі інший GC, інший рендер бекенд, інші затримки.

Ключові маркери в CPU трейсі:

  • GC.Collect — збірка сміття. Якщо > 1 мс і відбувається частіше ніж раз на кілька секунд — проблема з алокаціями в hot path
  • Camera.RenderRenderForwardOpaque.Render — основне навантаження на GPU
  • Physics.Processing — фізика. Якщо > 3 мс при 60 FPS бюджеті — забагато колайдерів або неоптимальні налаштування Fixed Timestep

Android GPU Inspector (AGI) — для Android на Qualcomm або Mali. Показує GPU time per draw call, pipeline bubbles, зайнятість ALU. Критично для розуміння, що саме на GPU важко: геометрія, overdraw або fill rate. За даними AGI documentation, pipeline bubbles можуть займати до 40% часу кадру на старих пристроях.

Xcode Instruments — для iOS. Використовуємо Metal System Trace для GPU, Time Profiler для CPU, Allocations для пам'яті. Thermal State в Instruments показує, коли пристрій починає тротлити через перегрів — часта причина нестабільного FPS через кілька хвилин гри.

Snapdragon Profiler — альтернатива AGI для Adreno. Простіший у налаштуванні для snapshot-режиму, добре показує ефективність шейдерів. При порівнянні з AGI, AGI у 2 рази точніше визначає pipeline bubbles.

Як відрізнити CPU-bound від GPU-bound?

Ознака CPU-bound: VSync чекає GPU менше 1 мс (GPU встигає), але кадр все одно займає 20+ мс. Отже CPU — пляшкова шийка.

Найчастіше винуватець — методи Update() з важкою логікою, LINQ-запити в hot path (кожен створює алокацію), або FindObjectsOfType всередині Update (O(n) по всіх об'єктах сцени). У Memory Profiler це видно як постійний GC.Alloc у кілька КБ кожен кадр.

Рішення: перехід на Data-Oriented Technology Stack (DOTS/ECS) для масових об'єктів, або мінімально — кешування результатів, заміна LINQ на явні цикли, Event-driven архітектура замість поллінгу.

Ознака GPU-bound: GPU time високий, але кількість Draw Calls невелика. В AGI видно високий Fragment Shader час.

Overdraw — малювання одних і тих самих пікселів кілька разів через накладання прозорих об'єктів. У Unity можна побачити в режимі Overdraw у Scene View. Темно-червоні області — малюємо кожен піксель 4+ разів. Характерно для 2D-ігор з безліччю шарів частинок.

Рішення: сортування прозорих об'єктів, обмеження одночасно активних партиклів, заміна прозорих спрайтів на непрозорі там, де художньо можливо.

Чому тепловий тротлінг — часта проблема?

На iPhone через кілька хвилин інтенсивного геймплею температура процесора досягає порогу, і iOS знижує частоту CPU/GPU. FPS падає з 60 до 40–45 без жодної зміненої нагрузки в самій грі. Перевіряється через ProcessInfo.thermalState (iOS) — при .serious або .critical варто знижувати якість графіки превентивно.

На Android аналогічний механізм — PowerManager.getThermalHeadroom() (API 29+). У 70% випадків тротлінг починається після 5-7 хвилин гри.

Що входить у наш звіт про профілювання?

За підсумками профілювання видаємо звіт із конкретними маркерами: що гальмує, на якому пристрої відтворюється, скільки мс займає, і рекомендація щодо виправлення з пріоритетом. Не «оптимізуйте фізику», а «FixedUpdate у EnemyAI.cs викликає Physics2D.OverlapCircleAll кожні 20 мс при 200 активних ворогах — сумарно 4.2 мс CPU, переписати на Physics2D.OverlapCircleNonAlloc з пулом результатів».

Приклад структури звіту - Проблема: GC Spike кожні 5 секунд (20 мс) - Причина: алокації рядків в Update() - Рекомендація: замінити на StringBuilder, пріоритет High - Очікуваний ефект: зниження GC часу до 2 мс

Додатково надаємо:

  • доступ до профілювальних логів і скріншотів знімків,
  • навчання команди з використання інструментів,
  • підтримку при впровадженні виправлень протягом 10 робочих днів.

Терміни: аудит і звіт — три робочих дні. Реалізація виправлень за результатами — окрема оцінка від 5 днів.

Інструмент Платформа Основне призначення
Unity Profiler iOS/Android CPU та GC профілювання
Android GPU Inspector Android (Qualcomm/Mali) GPU pipeline, shader efficiency
Xcode Instruments iOS GPU, CPU, Memory, Thermal State
Snapdragon Profiler Android (Adreno) Альтернатива AGI для Adreno

Порівняння інструментів за точністю виявлення вузьких місць:

Характеристика Unity Profiler AGI Xcode Instruments
CPU bound Відмінно Ні Відмінно
GPU bound Середньо Відмінно Відмінно
Тепловий тротлінг Непрямо Ні Безпосередньо
Overdraw Середньо Відмінно Добре

Ми гарантуємо точність кожного виміру — всі результати відтворювані на однакових девайсах. Сертифіковані інженери (Unity Certified Developer, Apple Certified iOS Developer) проводять аудит. Досвід — 5+ років і 100+ проєктів. Отримайте консультацію по вашому проєкту — зв'яжіться з нами, щоб обговорити деталі.