Как профилировать тест в Android Studio? - PullRequest
0 голосов
/ 29 мая 2018

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

Android Studio продолжает предлагать мне рядом с методом запуска параметр меню: «Профиль» вместо запуска.Я выбираю эту опцию, но, похоже, ничего другого, кроме запуска, не происходит.Я ожидал, что Android Studio откроет окно с указанием времени всех вызовов методов после завершения теста.

enter image description here

Я искал в Google и Androidсайт.Все, что я нахожу, говорит о профилировании в Android Studio в целом.

Как мне профилировать юнит-тест Android?(Что на самом деле делает эта опция профиля?)

1 Ответ

0 голосов
/ 24 сентября 2018

У меня была такая же проблема, и я решил исследовать решение, потому что думал, что оно не может быть слишком сложным.Мальчик, я был не прав.

Мой первоначальный ответ, который так и не был опубликован, содержал некоторую неловкую игру с Thread.sleep и ручными таймингами и нажатием правой кнопки в нужное время.Это было заменено более элегантным решением, использующим API отладки из кода.

Используя Android Studio 3.1.3, это были мои шаги:

  • Мне пришлось скопироватьмой реальный модульный тест в androidTest (потому что я действительно интересовался алгоритмической сложностью (а не расходом времени), я не нашел способа фактически профилировать в Android Studio без эмулятора. Для тестов производительности это имеет смысл, но в моем случае я хотелчтобы гарантировать, что даже в сложных сценариях мои методы ведут себя предсказуемо.)

  • Чтобы избежать необходимости возиться с Thread.sleep и выводом журнала, указывающим начало / остановкуВы можете использовать комбинации Debug.startMethodTracing("File"); or Debug.startMethodTracingSampling() and Debug.stopMethodTracing(); или аналогичные (см. https://developer.android.com/studio/profile/generate-trace-logs). Мой код теперь выглядит как

    @Test
    public void Test_Something() throws Exception
    {
         Debug.startMethodTracing("Predict");
         // DO YOUR CODE
         Debug.stopMethodTracing();
    
    }
    
  • Когда я сейчас заполняю профиль, я могу получить .traceгенерируется в указанном месте на устройстве, как указано в ссылке выше:

Trace

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

  • Двойной щелчок по трассировке открывает ее в Android Studio.В отличие от указанной выше ссылки, в настоящее время я не могу импортировать такую ​​трассировку в профилировщик, потому что либо в 3.1.3 отсутствует эта функция, либо я не могу ее найти.Trace2

Редактировать : После обновления до Android Studio 3.2 теперь я могу действительно загружать и сохранять сеансы и отображать их в Профилировщике.Это значительно улучшилось.И интересный факт: когда я открыл трассировку в Android Studio 3.1.3, я увидел количество обращений к методам (как часто они вызывались), а не их часы.С другой стороны, в профилировщике я не смог найти время звонка, но вместо этого у меня был доступ ко времени настенных часов.Было бы замечательно, если бы у кого-то была подсказка, как их отображать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...