Android ефективне використання gpu

Розробнику слід навчитися ефективно використовувати графічний процесор пристрою (GPU), щоб програма не гальмувало і не виконувало зайву роботу.

Налаштувати параметри GPU візуалізації

Якщо ваш додаток гальмує, значить частина або всі кадри оновлення екрану оновлюються більше ніж 16 мілісекунд. Щоб візуально побачити оновлення кадрів на екрані, можна на пристрої включити спеціальну опцію Налаштувати параметри GPU візуалізації (Profile GPU Rendering).

У вас з'явиться можливість швидко побачити, скільки часу займає отрисовка кадрів. Нагадаю, що потрібно вкладатися в 16 мілісекунд.

Після активації заходимо в Налаштування розробника і знаходимо пункт Налаштувати параметри GPU візуалізації (Profile GPU rendering), який слід включити. У спливаючих вікні виберіть опцію На екрані у вигляді стовпчиків (On screen as bars). У цьому випадку графік буде виводитися поверх запущеного додатку.

Ви можете протестувати не тільки свій додаток, а й інші. Запустіть будь-який додаток і починайте працювати з ним. Під час роботи в нижній частині екрана ви побачите оновлюваний графік. Горизонтальна вісь відповідає за минулий час. Вертикальна вісь показує час для кожного кадру в мілісекундах. При взаємодії з додатком, вертикальні смуги малюються на екрані, з'являючись зліва направо, показуючи продуктивність кадрів протягом якогось часу. Кожен такий стовпець представляє собою один кадр для відтворення екрану. Чим вище висота стовпчика, тим більше часу йде на отрисовку. Тонка зелена лінія є орієнтиром і відповідає 16 мілісекунд за кадр. Таким чином, вам потрібно прагнути до того, щоб при вивченні вашого застосування графік не вибивався за цю лінію.

Розглянемо збільшену версію графіка.

Android ефективне використання gpu

Зелена лінія відповідає за 16 мілісекунд. Щоб укластися в 60 кадрів в секунду, кожен стовпець графіка повинен малюватися нижче цієї лінії. В якихось моментах стовпець виявиться занадто великим і буде набагато вище зеленої лінії. Це означає гальмування програми. Кожен стовпець має блакитний, фіолетовий (Lollipop і вище), червоний і оранжевий кольори.

Блакитний колір відповідає за час, що використовується на створення і оновлення View.

Фіолетова частина являє собою час, витрачений на передачу ресурсів рендеринга потоку.

Червоний колір є час для відтворення.

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

Існують спеціальні методики для зменшення навантаження на графічний процесор.

Налагодити показник GPU overdraw

Інша настройка дозволяє дізнатися, як часто перемальовується один і той же ділянку екрана (тобто виконується зайва робота). Знову йдемо в Опції розробника і знаходимо пункт Налагодити показник GPU overdraw (Debug GPU Overdraw), який слід включити. У спливаючих вікні виберіть опцію Показувати зони накладення (Show overdraw areas). Не лякайтесь! Нкоторие елементи на екрані змінять свій колір.

Поверніться в будь-який додаток і поспостерігайте за його роботою. Колір підкаже проблемні ділянки вашого застосування.

Android ефективне використання gpu

Якщо колір в додатку не змінився, значить все відмінно. Немає накладення одного кольору поверх іншого.

Блакитний колір показує, що один шар малюється поверх нижнього шару. Добре.

Зелений колір - перемальовується двічі. Потрібно задуматися про оптимізацію.

Рожевий колір - перемальовується тричі. Все дуже погано.

Червоний колір - перемальовується багато разів. Щось пішло не так.

Ви можете самостійно перевірити свій додаток для пошуку проблемних місць. Створіть активність і помістіть на неї компонент TextView. Дайте кореневого елементу і текстової мітці якийсь фон в атрибуті android: background. У вас вийде наступне: спочатку ви зафарбували одним кольором самий нижній шар активності. Потім поверх неї малюється новий шар від TextView. До речі, на самому TextView малюється ще й текст.

В якихось моментах накладення квітів не уникнути. Але уявіть собі, що ви таким же чином встановили фон для списку ListView. який займає все площа активності. Система буде виконувати подвійну роботу, хоча нижній шар активності користувач ніколи не побачить. А якщо до того ж ви створите ще й власну розмітку для кожного елемента списку зі своїм фоном, то взагалі отримаєте перебір.

Маленький рада. Помістіть після методу setContentView () виклик методу, який прибере перірісовку екрану кольором теми. Це допоможе прибрати одне зайве накладення кольору:

Додаткові матеріали