Игра, которая выдаёт стабильные 60 fps на Pixel 7, может провалиться до 18 fps на Redmi Note 9 — и это не потому что телефон «слабый». Это потому что Adreno 618 и Mali-G52 по-разному обрабатывают один и тот же шейдер, и никто не проверял поведение на Mali до релиза. Мы каждый день разбираем такие кейсы и знаем, как превратить slideshow в плавную картинку. За время работы мы провели тестирование более 50 проектов — от гиперказуалок до open-world RPG. Тестирование производительности графики — это про понимание аппаратных различий и про то, чтобы игра не теряла аудиторию.
Что входит в работу
| Этап |
Результат |
| Анализ проекта и сбор билдов |
Матрица устройств, тестовые сценарии |
| Профилирование baseline |
Frame time, draw calls, overdraw, memory по каждому устройству |
| Итеративная оптимизация |
Атласирование, LOD, GPU Instancing, occlusion culling, Shader LOD |
| Повторное тестирование |
Сравнение метрик до/после, выявление новых проблем |
| Отчёт и обучение команды |
Документация, логи, доступ к отчётам на 2 месяца |
Почему игра тормозит только на устройствах с Mali GPU?
Архитектура Mali использует tile-based deferred rendering, при котором overdraw и шейдерные инструкции с высокой точностью могут вызывать падение производительности. Например, точность mediump в textureCubeLod может триггерить софтверный fallback. Мы выявляем такие случаи через Mali Graphics Debugger.
Где прячутся реальные проблемы производительности
Draw calls и batching. 200 draw calls на мобильном устройстве — красная зона. UI через Canvas в режиме Overlay с несколькими дочерними canvas, каждый из которых делает override sorting, гарантированно разрывает все батчи. Результат: 80 draw calls только на HUD, которые можно свести к 5–8 при правильной иерархии.
Overdraw. На мобильных GPU (tile-based deferred rendering) overdraw убивает производительность быстрее, чем на десктопных. Рендеринг одного пикселя 4 раза подряд — в 4 раза больше работы на GPU. Particle systems с Additive blending, UI-слои без culling, прозрачные меши — типичные источники. RenderDoc окрашивает overdraw тепловой картой прямо в viewport.
Тепловой троттлинг. Среднебюджетные Android-устройства через 3–5 минут интенсивной игры снижают тактовую частоту CPU/GPU на 20–40% из-за перегрева. На эмуляторе это не воспроизводится. Поэтому тест на sustained performance — только на реальном железе, минимум 20 минут игровой сессии.
Как составить матрицу устройств для тестирования?
Тестировать на одном «репрезентативном» устройстве — недостаточно. Минимальная матрица для мобильного проекта:
- Low-end (target floor): Qualcomm Snapdragon 460/Adreno 610, Mali-G52, 3 GB RAM.
- Mid-range (основная аудитория): Snapdragon 700-серия/Adreno 618-619, Mali-G76, 4–6 GB RAM.
- High-end (флагман): Snapdragon 8 Gen 2, Apple A16, 8+ GB RAM.
iOS отдельно: iPhone SE 2 (A13), iPhone 12 (A14), iPhone 14 Pro (A16) — три поколения, три разных Metal-поведения.
Почему тест на эмуляторе не заменяет реальное железо?
Эмулятор не воспроизводит тепловой троттлинг — он использует ресурсы ПК без ограничений. Кроме того, эмулятор не эмулирует tile-based архитектуру Mali и PowerVR, поэтому overdraw и шейдерные проблемы могут остаться незамеченными. Только на физическом устройстве можно замерить реальный FPS budget, температурные сбросы и поведение аккумулятора.
Инструменты и методология
Основной workflow: Unity Profiler → Frame Debugger → Memory Profiler → платформо-специфичные инструменты.
Unity Profiler даёт breakdown CPU по потокам и GPU timeline, но GPU timeline работает корректно не на всех устройствах. На некоторых Android через ADB Profiler показывает нули в GPU блоке. В этом случае используем нативные инструменты:
- Adreno GPU Profiler (Qualcomm): детализированная разбивка по стадиям пайплайна, HSR efficiency, shader cycle counts.
- Mali Graphics Debugger (Arm): аналогично для Mali-архитектур, плюс визуализация bandwidth.
- Xcode Instruments + Metal Debugger: для iOS/Metal — обязательный инструмент.
-
RenderDoc — кроссплатформенный frame capture с полным state inspector для анализа проблем шейдеров и батчинга.
Для автоматизированного бенчмаркинга — Unity Performance Testing Package. Позволяет писать тесты, замеряющие метрики (frame time, GC allocations, draw calls) и сохраняющие baseline.
Как мы это делаем
- Первичный анализ: изучаем билд, определяем целевые устройства, согласовываем матрицу.
- Профилирование baseline: на каждом устройстве фиксируем frame time, draw calls, overdraw, memory.
- Идентификация узких мест: находим проблемные сцены (начало матча, взрывные эффекты, открытые пространства).
- Итеративная оптимизация: атласирование текстур, LOD-группы, GPU Instancing, occlusion culling, Shader LOD.
- Повторное тестирование: после каждого изменения — замер на всех устройствах.
- Валидация: проверка sustained performance (20+ минут) и отчёт с рекомендациями.
| Объём тестирования |
Ориентировочные сроки |
| Профилирование одной сцены, 2 устройства |
3–5 дней |
| Полное профилирование игры, матрица 6 устройств |
2–3 недели |
| Тестирование + оптимизация + валидация |
4–8 недель |
Свяжитесь, чтобы обсудить детали и оценить ваш проект. Получите консультацию инженера с опытом оптимизации под любые GPU.
Тестирование и QA
Мы не раз видели, как проект на финишной прямой превращается в кошмар: на машине разработчика всё летает, а на Samsung Galaxy A12 — 15 FPS и вылеты, на iPad Air — мыльные текстуры. Без выстроенного QA-процесса тестирование игр становится лотереей. Наша команда с 8‑летним опытом протестировала более 30 мобильных игр и в каждом проекте находила критические проблемы, которые не выявили обычные прогоны. Тестирование игр под ключ — от функционального до нагрузочного — с гарантией качества и отчётом, готовым к внедрению. Оценим ваш проект за 3 дня — свяжитесь с нами.
Как автоматизировать тестирование в Unity?
Самый эффективный способ поймать регрессию — автотесты, которые запускаются без человека. В Unity это Unity Test Framework (UTF) на базе NUnit. Два режима.
Edit Mode Tests работают без игрового цикла — скорость выполнения в миллисекундах. Подходят для формул урона, расчёта экономики, валидации конфигов. Play Mode Tests запускают полный игровой цикл — тестируют логику MonoBehaviour, корутины, переходы между сценами.
Пример:
[UnityTest]
public IEnumerator PlayerTakeDamage_HealthReduces()
{
var go = new GameObject();
var health = go.AddComponent<HealthComponent>();
health.Initialize(100);
health.ApplyDamage(30);
yield return null;
Assert.AreEqual(70, health.CurrentHealth);
}
Покрывайте то, что ломается чаще всего: система сохранений, экономика, боевая логика. 100% покрытие не нужно — достаточно критических путей. UI (UGUI, UI Toolkit) автоматизировать сложнее: для этого используют InputSystem.QueueEvent или Appium на мобильных платформах. Автотесты выполняются в 50 раз быстрее ручных прогонов при регрессии — это сокращает бюджет на регрессионное тестирование на 40%.
Почему профилирование на реальном устройстве критично?
Тесты не ловят проблемы производительности. Для этого нужен профилировщик на целевой платформе. Unity Profiler — стартовая точка. Ключевые шаги:
- Профилируйте на устройстве, а не в редакторе — Editor добавляет оверхед. Подключите девайс через USB с Development Build и Autoconnect Profiler.
- Смотрите Main Thread и Render Thread отдельно. Типичные проблемы:
-
Physics.FixedUpdate >2ms — сложная физика
-
Canvas.BuildBatch на каждом кадре — лишние Dirty вызовы UI
-
GC.Collect — выделение памяти в горячем пути (внутри Update)
- Используйте ProfilerMarker для локализации:
using Unity.Profiling;
static readonly ProfilerMarker k_PathfindMarker = new ProfilerMarker("Pathfinding.Calculate");
void UpdateAI()
{
using (k_PathfindMarker.Auto())
{
// pathfinding code
}
}
Memory Profiler (пакет com.unity.memoryprofiler) даёт снапшоты памяти: находит утечки (объекты, не освобождённые после смены сцены), сравнивает два снимка. Самые частые причины проблем на мобайле: текстуры без правильного формата (ASTC для iOS, ETC2 для Android), аудио в WAV вместо Vorbis, объекты в DontDestroyOnLoad, которые накапливаются.
Frame Debugger (Window → Analysis → Frame Debugger) позволяет пройти по каждому draw call в кадре. Для мобильных проектов норма — 50–150 draw calls; если больше 300 — батчинг не работает или сцена перегружена. Wikipedia: Software performance testing подчёркивает важность профилирования на реальном оборудовании.
Профилирование на реальном устройстве обязательно — редактор Unity даёт искажённые результаты из-за собственного оверхеда, поэтому всегда используйте Development Build на целевом устройстве.
| Инструмент |
Цель |
Что проверяет |
| Unity Profiler |
CPU/GPU |
Время выполнения потоков, аллокации, GC |
| Memory Profiler |
Память |
Утечки, распределение по типам |
| Frame Debugger |
Графика |
Draw calls, батчинг, overdraw |
Функциональное и регрессионное тестирование
Функциональное тестирование строится на тест-планах: для каждой фичи — ожидаемый результат, шаги воспроизведения, критерии прохождения. Покрываем smoke, sanity и acceptance-тесты. Регрессионное тестирование — запуск накопленных кейсов перед каждым релизом, а не только перед мажорными.
Инструменты управления: TestRail, Qase, Zephyr. Для небольших команд — Notion или Google Sheets со структурированными чеклистами.
Тестирование на реальных устройствах
Эмуляторы не воспроизводят тепловой дросселинг, реальный GPU и ограничения памяти. Минимальный набор — 20+ устройств всех сегментов:
| Категория |
Примеры |
RAM |
| Low-end Android |
Snapdragon 662 (Samsung A12, Redmi Note 10) |
3 ГБ |
| Mid-range Android |
Snapdragon 720G/765G |
6 ГБ |
| Flagship Android |
Snapdragon 888+ |
8 ГБ |
| Low-end iOS |
iPhone SE 2 |
3 ГБ |
| iOS средний |
iPhone 13/14 |
4–6 ГБ |
| iPad |
Последнее поколение |
6–8 ГБ |
Для масштабного тестирования — облачные фермы: Firebase Test Lab, BrowserStack App Automate, AWS Device Farm. Они позволяют запускать сотни параллельных тестов на реальных устройствах.
Нагрузочное тестирование (мультиплеер)
Цель — найти деградацию сервера до релиза. Инструменты: k6 (WebSocket/HTTP API), Gatling (сложные сценарии с состоянием). Для специфических протоколов пишут кастомный stress-клиент на Go или C#.
Параметры проверки:
- Поведение при пиковом CCU (concurrent users) — до 1000+ CCU
- Деградация латентности под нагрузкой (p95 latency)
- Утечки памяти на сервере за 72+ часа работы
- Graceful degradation при отказе одного из узлов
Краш-репортинг и мониторинг
После релиза QA продолжается через мониторинг. Firebase Crashlytics — стандарт для мобильных игр: автоматический сбор крашей с символизацией стектрейсов, real-time уведомления. Sentry — для серверных компонентов и WebGL. ANR (Application Not Responding) настраивается отдельно — Play Console показывает их в отдельном разделе. Инвестиции в тестирование окупаются за 2–3 релиза, снижая затраты на исправление багов после релиза на 60%.
Что входит в нашу работу
- Детальный план тестирования (чек-лист, сценарии, приоритеты)
- Набор автоматизированных тестов (экономика, сохранения, критические пути — покрытие 70%)
- Профилирование CPU/GPU/памяти с отчётом по каждому багу
- Ручное тестирование на 20+ реальных устройствах (low-end / mid-range / flagship)
- Нагрузочное тестирование сервера (до 1000+ CCU в течение 12 часов)
- Дашборд с метриками и историей прогонов
- Обучение вашей команды основам автотестирования и профилирования
Получите консультацию по вашему проекту — мы оценим текущую сборку и предложим план оптимизации.
Процесс работы
-
Анализ — изучаем архитектуру, собираем метрики текущей сборки, определяем цели по FPS и стабильности.
-
План тестирования — создаём чек-лист, выбираем инструменты, согласовываем объём.
-
Автоматизация — пишем тесты для критических путей, настраиваем CI-прогоны.
-
Ручное тестирование — прогоняем сценарии на устройствах, фиксируем баги в трекере.
-
Отчёт и рекомендации — предоставляем документ с найденными проблемами, их приоритетом и конкретными правками (оптимизация шейдеров, настройка батчинга, утечки).
Наши метрики
- 8+ лет опыта в геймдеве (Unity, Unreal, мобильные/PC/консоли)
- 30+ протестированных мобильных игр
- Среднее повышение FPS после оптимизации — 30%
- Сокращение времени регрессионного тестирования — 40%
- Гарантия: все базы с Critical/High приоритетом исправляются до релиза
Чек-лист предрелизного тестирования
- [ ] Профилирование CPU/GPU на low-end устройстве (30 мин игровой сессии)
- [ ] Проверка утечек памяти через Memory Profiler (сравнение снапшотов до/после сцены)
- [ ] Frame Debugger — не более 200 draw calls, проверка статического батчинга
- [ ] Нагрузочный тест сервера: 500+ CCU, длительность 12 часов
- [ ] ANR-мониторинг на Android (отдельно от крашей)
- [ ] Функциональные автотесты на систему сохранений и экономику
Типичные ошибки в QA-процессе
- Тестирование только на флагманах — большинство игроков на mid-end и low-end.
- Отсутствие автотестов для экономики и сохранений — они ломаются при любом рефакторинге.
- Пропуск нагрузочного тестирования сервера — игра выходит, набирает 10k DAU и сервер ложится.
- Регрессия только перед мажорными релизами — критично перед каждым публичным обновлением.
Закажите тестирование игр под ключ. Мы оценим ваш проект за 3 дня и предложим план с гарантией результата. Пишите — разберём вашу сборку бесплатно.