Как использовать async_start и async_stop в systrace/atrace для Android
Я хочу получить отчет Systrace на своем телефоне Android во время автоматического тестирования. Неизвестно, сколько времени займет тестирование, поэтому я не могу указать период времени для Systrace.
Углубившись в systrace.py, я обнаружил, что systrace использует atrace для получения логов ядра.
я использовал adb shell atrace --help
и получил следующий вывод:
usage: atrace [options] [categories...]
options include:
-a appname enable app-level tracing for a comma separated list of cmdlines
-b N use a trace buffer size of N KB
-c trace into a circular buffer
-k fname,... trace the listed kernel functions
-n ignore signals
-s N sleep for N seconds before tracing [default 0]
-t N trace for N seconds [defualt 5]
-z compress the trace dump
--async_start start circular trace and return immediatly
--async_dump dump the current contents of circular trace buffer
--async_stop stop tracing and dump the current contents of circular
trace buffer
--list_categories
list the available tracing categories
Как я могу использовать atrace, чтобы начать трассировку в начале моего автоматического тестирования, а также остановить остановку и сброс журнала ядра в конце моего автоматического тестирования?
Я пытался использовать следующие команды, но я не думаю, что это работает должным образом. Только async_dump дает мне некоторые данные в журнале. У дампа async_stop нет содержимого в журнале. Как правильно запустить трассировку, сбросить ее, а затем остановить?
adb shell atrace -b 10000 -c am shedgfx view --async_start > C:\Users\user1\Desktop\log.txt
adb shell atrace -b 10000 -c am shedgfx view --async_dump > C:\Users\user1\Desktop\log.txt
adb shell atrace -b 10000 -c am shedgfx view --async_stop > C:\Users\user1\Desktop\log.txt
1 ответ
schedgfx
Вероятно, должно быть 2 отдельных вызова:sched
а такжеgfx
, Смотрите вывод с вашего устройства при запуске:$ adb shell atrace --list_categories
Категории должны быть последней частью командной строки (в ваших командах категории располагаются перед
async_*
опции):$ adb shell atrace --help usage: atrace [options] [categories...] options include: -a appname enable app-level tracing for a comma separated list of cmdlines -b N use a trace buffer size of N KB -c trace into a circular buffer -k fname,... trace the listed kernel functions -n ignore signals -s N sleep for N seconds before tracing [default 0] -t N trace for N seconds [defualt 5] -z compress the trace dump --async_start start circular trace and return immediatly --async_dump dump the current contents of circular trace buffer --async_stop stop tracing and dump the current contents of circular trace buffer --list_categories list the available tracing categories
Инструмент работает в кольцевом буфере, поэтому каждый раз, когда вы запускаете команду dump, вы получаете только то содержимое, которое находится в буфере в это время. В эспрессо
rules:0.5
пакет (при условии, что вы используете эспрессо), естьAtraceLogger
класс, который может помочь автоматизировать это для вас как часть вашего тестового набора, вызываяatraceStart(...)
метод:public void atraceStart(Set<String> traceCategoriesSet, int atraceBufferSize, int dumpIntervalSecs, File destDirectory, String traceFileName) throws IOException
Вы можете сделать это, создав @Rule или @ClassRule, или подключиться к нему другим способом, например, с помощью TestRunner:
@Override protected void before() throws Throwable { mAtrace = AtraceLogger.getAtraceLoggerInstance(InstrumentationRegistry.getInstrumentation()); mAtrace.atraceStart(new HashSet<>(Arrays.asList("gfx", "sched", ...)), 1024 /* bufferSize */, 1 /* dump interval */, RuleLoggingUtils.getTestRunDir(), "filename"); } @Override protected void after() { try { mAtrace.atraceStop(); } catch (IOException e) { Log.w(TAG, "Failed to stop Atrace", e); } catch (InterruptedException e) { Log.w(TAG, "Failed to stop Atrace", e); } }
RuleLoggingUtils.getTestRunDir()
Метод поместит захваченные файлы дампа в путь к внешним файлам для вашего приложения, поэтому вы можете извлечь эти файлы после завершения теста, используя:$ adb pull /sdcard/Android/data/com.yourcompany.package/files/testdata/
И каждый файл atrace может быть проверен с помощью средства просмотра systrace, запустив systrace с --from-file=<trace file>
вариант.