Android

В Android Studio 4.0 мы пересмотрели UI профилировщика (Profiler), чтобы обеспечить более интуитивно понятный рабочий процесс записи работы ЦПУ. Мы продолжали вносить улучшения, основываясь на ваших отзывах, и добавили больше функций в версию 4.1.

В этой статье мы расскажем о том, что нового появилось в Android Studio для системной трассировки (System Trace), одной из редко используемых, но мощных конфигураций записи работы ЦП. В отличие от метода Java или трассировки функций C/C++, системная трассировка накапливает действия устройств (например, планирование работы ЦПУ) и системные процессы Android (например, SurfaceFlinger). Кроме того, вы можете настроить код с помощью пользовательских событий, вызвав API Trace в приложении. Таким образом, ваши пользовательские события будут коллекционироваться вместе с системными. Они могут пригодиться, когда вы будете исследовать проблемы производительности, такие как шероховатостьUI или высокое энергопотребление.

Все потоки сразу

Записи работы ЦПУ теперь отделены от основной временной шкалы профилировщика для облегчения анализа. В этом выделенном представлении данные трассировки организованы в разделы в левой части окна Profiler.

Системная трассировка в Android Studio 4.1 Beta 1

Вы можете перемещать разделы вверх и вниз, чтобы реорганизовать список или отдельные элементы внутри них, просто перетаскивая их.

Мы услышали, что выбор потока для просмотра его диаграммы вызовов (или событий для системной трассировки) довольно громоздок, поэтому мы объединили все действия потока в одно представление, отображающее его состояния и диаграммы вызовов одновременно. По умолчанию мы сортируем потоки по степени их загруженности, но вы можете перетащить мышкой любой отдельный поток, чтобы изменить их порядок.

Перетащите поток, чтобы изменить порядок списка

Вы также можете свернуть или развернуть каждый поток, щелкнув один раз значок треугольника или дважды щелкнув на его имени. Обратите внимание, что для трассировки метода Java или функции C/C++ мы сворачиваем все потоки по умолчанию из-за глубоких стеков вызовов, так что вы сразу можете взглянуть на все данные конкретного потока.

Трассировка функций C/C++, показывающая потоки, свернутые по умолчанию

Для системной трассировки события трассировки теперь имеют уникальный цвет, чтобы было проще увидеть разницу.

Имена событий системной трассировки имеют цветовую кодировку

Более интуитивная навигация

Новый UI трассировки имеет обновленную схему навигации по временной шкале. Мы заменили старую горизонтальную полосу прокрутки на более детализированный вид.

Вверху вы можете увидеть временную шкалу, которая отображает только продолжительность трассировки, а не весь сеанс профилирования. С помощью селектора можно быстро сузить его до определенного временного диапазона, для которого в нижеприведенных разделах отображаются подробные данные.

Используйте селектор диапазона, чтобы сфокусироваться на небольшом фрагменте временной шкалы

Оттуда вы можете выполнять более точные навигационные действия:

  • Увеличение/уменьшение масштаба с помощью Ctrl (или Cmd на Mac) + колесико мыши.
  • Панорамирование вида путем перетаскивания мышкой влево и вправо, удерживая нажатой клавишу пробела.
  • Используйте клавиши “WASD” для масштабирования и панорамирования вида, как в устаревшем UI SysTrace в Chrome (chrome://tracing).

Начиная с Android Studio 4.1 Canary 9, вы можете использовать мышь в разделе с потоками (Threads), чтобы сделать точный выбор. Это позволяет выбрать прямоугольную область, которую можно увеличить, нажав кнопку Zoom to Selection в правом верхнем углу (клавиша “M”). Вы можете даже выбрать несколько потоков. Это полезно, если вы перетаскиваете похожие потоки рядом друг с другом и проверяете все их сразу. Например, вы можете выполнить анализ нескольких рабочих потоков, часто встречающихся в играх.

Выбор поля комбинированный с перетаскиванием и масштабированием

Панель анализа

Говоря об анализе, мы хотим выделить новую панель анализа (Analysis Panel), представленную в Android Studio 4.0, в правой колонке окна Profiler.

Здесь вы можете найти аналитические данные, полученные из записанной трассировки, которую вы выбрали. Если вы выбираете поток, фрейм стека или событие трассировки из левого столбца, панель анализа покажет информацию, конкретную для вашего выбора. Например, если выбран поток, отображаются его состояния, а также другая полезная информация.

Чтобы сделать эту панель анализа полезной, мы изучали способы получения полезных аналитических данных. В дополнение к Top Down, Flame Chart и Bottom Up, уже присутствующим в профилировщике ЦПУ, мы добавили вкладку со сводкой (Summary) в Android Studio 4.1 Canary 10 для распределения состояния потока, статистики событий трассировки и т. д. Например, довольно часто нам нужно узнать больше о повторяющемся событии трассировки. На вкладке со сводкой отображаются основные статистические данные (количество, мин, макс и т. д.), а также наиболее продолжительные события выбранного события трассировки. Вы даже можете перейти к другому событию, выбрав строку из таблицы.

Статистика и наиболее продолжительные случаи события трассировки

Повышение стабильности и производительности

И последнее, но не менее важное: мы улучшили стабильность и производительность записи работы ЦП.

  • Исправили несколько ошибок, которые могут привести к сбоям записи.
  • Построили системную трассировку на основе Perfetto в качестве бэкенда на Android API level 28 и более поздних версиях с использованием новейших инструментов.
  • Оптимизировали код профилировщика, чтобы значительно снизить потребление памяти (до 80%) при разборе записанной трассировки, что позволяет открывать и анализировать более длинные записи. Помните, что вы можете увеличить максимальный размер кучи Android Studio при работе с очень длинными трассировками.

Загрузите последнюю версию превью Android Studio 4.1, чтобы попробовать эти функции. Как всегда, мы ценим ваши отзывы.

Читайте также:

Читайте нас в телеграмме, vk и Яндекс.Дзен


Перевод статьи Yi Yang: What’s New in Android Studio System Trace

Предыдущая статьяТестирование клиент-серверов на Rust для IoT
Следующая статьяЧего я не знал о CSS, а стоило бы