Создавайте журналы трассировки, инструментируя свое приложение

Чтобы создать трассировку метода выполнения вашего приложения, вы можете инструментировать свое приложение с помощью класса Debug . Такое оснащение вашего приложения дает вам больше контроля над тем, когда устройство начинает и прекращает запись информации отслеживания. Устройство также сохраняет журналы трассировки под указанными вами именами, чтобы вы могли легко идентифицировать каждый журнал позже. Затем вы можете просмотреть каждый журнал трассировки с помощью Android Studio CPU Profiler .

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

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

Инструментируйте свое приложение

Чтобы создать журналы трассировки, вызовите startMethodTracing() , где вы хотите, чтобы система начала регистрировать данные трассировки.

В вызове вы можете указать имя файла .trace , и система сохранит его в каталоге конкретного пакета, предназначенном для постоянных данных приложения на целевом устройстве — это тот же каталог, который возвращается методом getExternalFilesDir() и находится в каталоге ~/sdcard/ на большинстве устройств. Этот файл содержит данные трассировки двоичного метода и таблицу сопоставления с именами потоков и методов. Чтобы остановить трассировку, вызовите stopMethodTracing() .

Следующий пример запускает и останавливает запись журнала трассировки с именем sample.trace :

Котлин

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Ява

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

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

Если система достигает максимального размера буфера до вызова stopMethodTracing() , система прекращает трассировку и отправляет уведомление на консоль. Методы, запускающие и останавливающие трассировку, действуют на протяжении всего процесса приложения. То есть вы можете вызвать startMethodTracing() в методе onCreate(Bundle) вашего действия и вызвать stopMethodTracing() в методе onDestroy() этого действия.

Обратите внимание, что ваше приложение работает медленнее, если включено профилирование. То есть не следует использовать данные профилирования для определения абсолютного времени (например, «запуск метода foo() занимает 2,5 секунды»). Информация о времени в журналах трассировки полезна только при сравнении ее с предыдущими журналами трассировки, поэтому вы можете увидеть, делают ли последние изменения ваше приложение быстрее или медленнее.

При развертывании на устройствах под управлением Android 5.0 (уровень API 21) и выше вы можете использовать профилирование на основе выборки для профилирования с меньшим влиянием на производительность во время выполнения. Чтобы включить выборочное профилирование, вызовите startMethodTracingSampling() (вместо вызова startMethodTracing() ) с указанным интервалом выборки. Система периодически собирает образцы, пока ваше приложение не вызовет stopMethodTracing() .

Сохранение нескольких журналов

Если ваше приложение запускает и останавливает трассировку метода несколько раз без указания нового имени журнала трассировки, устройство перезаписывает старый журнал трассировки новым, то есть сохраняет только самый последний журнал трассировки. Чтобы сохранить на устройстве несколько журналов трассировки, динамически переименовывайте журнал трассировки каждый раз, когда ваше приложение вызывает startMethodTracing() . В приведенном ниже примере используется класс SimpleDateFormat для включения текущей даты и времени при именовании каждого журнала трассировки:

Котлин

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Ява

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

Доступ к журналам трассировки на устройстве

После того как система создаст журнал трассировки на вашем устройстве, вы можете получить доступ к файлу одним из следующих способов:

  • Используйте проводник устройств . Чтобы открыть Обозреватель устройств, нажмите «Просмотр» > «Инструменты Windows» > «Обозреватель устройств» (или щелкните «Обозреватель устройств»). кнопку на панели окна инструментов). Как показано на рисунке 1, вы можете найти файлы .trace , перейдя в каталог вашего приложения.

    Рис. 1. Поиск журналов трассировки с помощью обозревателя устройств.

  • Скопируйте файл на свой локальный компьютер, используя команду adb pull . Приведенная ниже команда копирует журнал трассировки с именем sample.trace с устройства в каталог ~/Documents/trace-logs/ вашего локального компьютера.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Затем вы можете импортировать файл трассировки с помощью CPU Profiler.