Android: где находится файл.trace при профилировании с Traceview и Genymotion?
Я читаю эту статью о запуске traceview в вашем приложении для Android: https://developer.android.com/studio/profile/traceview.html Я предполагаю, что эмулятор, о котором они говорят, это эмулятор Android, а не эмулятор Genymotion, который это тот, который я использую.
В нем говорится, что для извлечения файла трассировки из эмулятора на хост-компьютер вы можете просто запустить следующие команды:
adb pull /sdcard/startup.trace /tmp
Я запустил его на моем эмуляторе Genymotion, и файл не был найден. Затем я использовал Android Device Monitor, чтобы найти файл на устройстве, но в этом месте не было файла с именем startup.trace.
Я сделал это в своем коде:
public class MyApplication extends MultiDexApplication {
public void onCreate() {
super.onCreate();
Debug.startMethodTracing("startup");
}
}
Затем я остановил трассировку в методе onResume своей активности, чтобы измерить время запуска моего приложения:
@Override
protected void onResume() {
super.onResume();
Debug.stopMethodTracing();
}
Я хочу, чтобы traceview измерял время моего запуска, но не знаю, где файл сохранен в моем эмуляторе Genymotion. Может кто-нибудь помочь мне с тем, где файл сохраняется?
2 ответа
Таким образом, после тестирования с помощью простого приложения для Android, оно работает, как и планировалось.
Я создал небольшой репо, чтобы продемонстрировать это:
https://github.com/Winghin2517/TraceviewTest.git
Вы можете скачать его, запустить на своем эмуляторе genymotion и затем ввести на вкладке "Терминал" в Android Studios следующее:
adb pull /sdcard/startup.trace /tmp
Он извлечет файл трассировки из Genymotion. Затем вам нужно будет включить DDMS, сказать "Файл" -> "Открыть" и открыть файл startup.trace.
Android-приложение, которое я создал, демонстрирует время, необходимое для выхода 1000 сообщений в консоль. Вы можете видеть, что цветные полосы кожи представляют время, которое Android использовал для вызова моего testCount
метод:
Вот мои результаты:
Мой метод testCount занял 10 мс для завершения.
Затворнический призыв к Log.e
Метод также имеет смысл, так как мой цикл в моем коде для 1000 вызовов к log.e
метод.
Включая процессорное время - это включенное время процессора. Это сумма времени, проведенного в самой функции, а также сумма времени всех функций, которые она вызывает.
Excl CPU time - это исключительное время процессора. Это только время, проведенное в самой функции. Вы заметите, что это всегда то же самое, что "время вкл." "Собственного" ребенка.
Я не могу найти файл.trace из приведенного выше примера приложения (или любого приложения). Поскольку файл.trace не находится по адресу:
/sdcard/<myTraceFile>.trace
Я сделал трюк, используя команду find, чтобы найти местоположение моего файла трассировки следующим образом:-
$adb shell
$cd /sdcard
$find |grep .trace
Я получил мой файл по адресу:
./Android/data/test.com.trackstartuptime/files/startup.trace
Для приведенного выше примера приложения. Теперь используйте это место для adb pull как:-
$adb pull /sdcard/Android/data/test.com.trackstartuptime/files/startup.trace <my_location>