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>
Другие вопросы по тегам