Трассировка Winscope – часть фреймворка Android. На этой странице описано, как скачать, собрать и запустить локально средство просмотра трассировки Winscope.
Как собрать Winscope локально
Чтобы настроить ПК для запуска трассировщика Winscope, выполните следующие действия:
- Скачайте исходный код Android.
Перейдите в папку Winscope:
cd development/tools/winscopeУстановите зависимости, используя:
npm installЧтобы посмотреть список доступных команд, выполните следующую команду:
npm run.Создайте все целевые объекты для рабочей и тестовой сред, используя:
npm run build:prodЗапустите Winscope, используя:
npm run start
Создание отдельных частей
Отдельные части Winscope можно собрать с помощью следующих команд:
| Команда | Описание |
|---|---|
build:trace_processor |
Проверяет и пересобирает последнюю версию Perfetto trace_processor. |
build:protos |
Перекомпилирует определения proto. |
Запустить тесты
Winscope содержит модульные и сквозные тесты. Чтобы запустить их, используйте npm run
<command>:
| Команда | Описание |
|---|---|
test:unit:ci |
Запускает модульное тестирование в менее подробном формате для CI или предварительной проверки. |
test:unit:dev |
Запускает модульное тестирование в более подробном формате для локальной разработки. В этом режиме отслеживаются изменения и автоматически запускаются нужные тесты. |
test:e2e |
Запускает сквозные тесты, например для протокола межплатформенного взаимодействия. |
test:presubmit:quiet |
Создает все модульные тесты, линтеры и анализ графов в менее подробном формате для непрерывной интеграции или хука предварительной отправки. |
test:presubmit |
Создает все модульные тесты, линтеры и анализ графов в более подробном формате для локальной разработки. |
test:all |
Запускает все тесты (модульные и сквозные), линтеры и анализ графа в более подробном формате для локальной разработки. |
Сквозные тесты
Перед проведением сквозных тестов необходимо запустить удаленный инструмент и установить правильную версию драйвера Chrome. В приведенном ниже фрагменте кода команда run test:e2e автоматически устанавливает драйвер Chrome.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
В таблице ниже перечислены необходимые команды и их описания. Чтобы запустить их, используйте npm run command:
| Команда | Описание |
|---|---|
start:remote_tool_mock |
Запускает имитацию удаленного инструмента для тестирования протокола взаимодействия между инструментами. |
install:chromedriver |
Устанавливает драйвер Chrome, необходимый для сквозного тестирования. |
Как обновить сопоставление @IntDef
@IntDef – это аннотация, используемая в Android для ограничения возможных значений целого числа. Winscope использует сопоставление этих аннотаций, чтобы показывать название значения вместо целого числа.
Если в фреймворк Android добавляются новые значения @IntDef, но они не обновляются в Winscope, то они отображаются как необработанные целочисленные значения, а не как описательные строки. Чтобы устранить проблему, обновите файл сопоставления IntDef (development/tools/winscope/src/common/intDefMapping.json).
Чтобы автоматически обновить сопоставление @IntDef, выполните следующие действия:
Запустите скрипт
update_intdef_mappings.shиз каталогаdevelopment/tools/winscope/scripts/в локальном дереве Android. Этот скрипт запускает процесс аннотирования, который извлекает последние значения@IntDefиз кода и обновляетintDefMapping.json:cd development/tools/winscope ./scripts/update_intdef_mappings.shЗафиксируйте изменения в
src/common/intDefMapping.jsonс помощью командыgit commitи загрузите их с помощью командыrepo upload.
Если скрипт недоступен, выполните следующие действия, чтобы вручную обновить сопоставление @IntDef из корневого каталога Android ($ANDROID_BUILD_TOP):
Создайте
framework-minus-apex-intdefsдля запуска препроцессора аннотаций:m framework-minus-apex-intdefsСкопируйте сгенерированный файл
intDefMapping.jsonв репозиторий prebuilts:$ 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).
Если вы создаете новое поле в прототипе, перекомпилируйте прототипы в Winscope с помощью
npm run build:protos.
Некоторые установленные версии зависимостей неверны (сборка не удалась)
- Отменить изменения в файлах "
package.json" и "package-lock.json". Удалитьnode_modules. Повторите командуnpm install.
- Отменить изменения в файлах "
Я добавил новое поле в один из файлов proto. Как его посмотреть?
- Winscope использует определения прототипов, которые были доступны на момент компиляции, поэтому новые поля по умолчанию не отображаются. Чтобы новые поля появились, пересоберите прототипы с помощью
npm run build:protos.
- Winscope использует определения прототипов, которые были доступны на момент компиляции, поэтому новые поля по умолчанию не отображаются. Чтобы новые поля появились, пересоберите прототипы с помощью