Трассировка Winscope является частью фреймворка Android. На этой странице описываются шаги, необходимые для загрузки, сборки и локального запуска средства просмотра трассировки Winscope.
Локальная сборка Winscope
Чтобы настроить ПК для запуска трассировщика Winscope, выполните следующие действия:
- Загрузите исходный код Android .
Перейдите в папку Winscope:
cd development/tools/winscope
Установите зависимости с помощью:
npm install
Чтобы увидеть список доступных команд, выполните:
npm run
Создайте все целевые объекты prod и test, используя:
npm run build:prod
Запустите Winscope с помощью:
npm run start
Сборка отдельных частей
Вы можете собрать отдельные части Winscope по отдельности, используя следующие команды:
Команда | Описание |
---|---|
build:trace_processor | Проверяет и перестраивает последнюю версиюtrace_processor от Perfetto. |
build:protos | Перекомпилирует определения proto. |
Проведение тестов
Winscope содержит unit и end-to-end тесты. Для их запуска используйте npm run <command>
:
Команда | Описание |
---|---|
test:unit:ci | Запускает модульные тесты в менее подробном формате для CI или предварительная отправка крючка. |
test:unit:dev | Запускает модульные тесты в более подробном формате для локальное развитие. Этот режим следит за изменениями и автоматически повторно запускает правильные тесты. |
test:e2e | Выполняет сквозные тесты, например, для кросс-инструментальный протокол. |
test:presubmit:quiet | Создает все предварительные модульные тесты, линтеры и графики анализ в менее подробном формате для CI или предварительной отправки крюк. |
test:presubmit | Создает все предварительные модульные тесты, линтеры и графики анализ в более подробном формате для локального разработка. |
test:all | Выполняет все тесты (модульные и сквозные), линтеры и анализ графика в более подробном формате для локального разработка. |
Обновить сопоставление @IntDef
@IntDef
— это аннотация, используемая в Android для ограничения возможных значений целого числа. Winscope использует сопоставление этих аннотаций для отображения имени значения вместо целого числа.
Чтобы обновить сопоставление @IntDef
, выполните следующие действия:
Создайте
:framework-minus-apex-intdefs
для запуска препроцессора аннотаций:mp :framework-minus-apex-intdefs
Скопируйте сгенерированный файл
intDefMapping.json
в репозиторий готовых файлов:$ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
Загрузите изменения в Winscope с помощью
repo upload
.
Другие команды
Помимо сборки и тестов, скрипты Winscope содержат и другие возможности, как показано в таблице. Для их запуска используйте npm run command
:
Команда | Описание |
---|---|
format:check | Проверяет наличие проблем форматирования кода с помощью prettier . |
format:fix | Проверяет и автоматически исправляет проблемы форматирования кода с помощью prettier . |
eslint:check | Проверяет наличие проблем форматирования кода с помощью eslint . |
eslint:fix | Проверяет и автоматически исправляет проблемы форматирования кода с помощью eslint . |
tslint:check | Проверяет наличие проблем форматирования кода с помощью tslint . |
tslint:fix | Проверяет и автоматически исправляет проблемы форматирования кода с помощью tslint . |
deps_graph:check_cycles | Анализирует код на наличие циклических зависимостей. |
Устранение неполадок
Воспользуйтесь следующими советами по устранению неполадок:
Ошибка
ProtocolError: missing required '<FIELD>'
илиTypeError: Cannot read property '<PROP>' of null
Это происходит, когда файл трассировки был создан с новым определением proto, содержащим новые обязательные поля.
- Убедитесь, что вы открываете трассировку на правильной версии Winscope (master, S или R).
Если вы создаете новое поле в proto, перекомпилируйте protos в Winscope с помощью
npm run build:protos
.
Некоторые установленные версии зависимостей неверны (сборка завершается неудачей)
- Отменить изменения в
package.json
иpackage-lock.json
. Удалитьnode_modules
. Запуститьnpm install
еще раз.
- Отменить изменения в
Я добавил новое поле в один из proto-файлов. Как его отобразить?
- Winscope использует определения proto с момента компиляции, поэтому новые поля не будут отображаться по умолчанию. Чтобы отобразить новые поля, перестройте protos с помощью
npm run build:protos
.
- Winscope использует определения proto с момента компиляции, поэтому новые поля не будут отображаться по умолчанию. Чтобы отобразить новые поля, перестройте protos с помощью