运行 Winscope

Winscope 跟踪是 Android 框架的一部分。本页概述了在本地下载、构建和运行 Winscope 跟踪查看器所需的步骤。

在本地构建 Winscope

按照以下步骤设置您的 PC 以运行 Winscope 跟踪器

  1. 下载 Android 源代码.
  2. 导航到 Winscope 文件夹

    cd development/tools/winscope
    
  3. 使用以下命令安装依赖项

    npm install
    

    要查看可用命令的列表,请运行:npm run

  4. 使用以下命令构建所有生产和测试目标

    npm run build:prod
    
  5. 使用以下命令运行 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 构建所有预提交单元测试、linter 和图分析
以更简洁的格式进行 CI 或预提交
hook。
test:presubmit 构建所有预提交单元测试、linter 和图分析
以更详细的格式进行本地分析
开发。
test:all 以更详细的格式运行所有测试(单元测试和端到端测试)、linter 和
图分析,用于本地
开发。

更新 @IntDef 映射

@IntDef 是 Android 中使用的一种注释,用于限制整数的可能值。Winscope 使用这些注释的映射来显示值的名称而不是整数。

要更新 @IntDef 映射,请执行以下操作

  1. 构建 :framework-minus-apex-intdefs 以运行注释预处理器

    mp :framework-minus-apex-intdefs
    
  2. 将生成的 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
    
  3. 使用 repo upload 上传 Winscope 中的更改。

其他命令

除了构建和测试之外,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 定义创建跟踪文件时,会发生这种情况。

      1. 确保您在正确的 Winscope 版本(master、S 或 R)上打开跟踪。
      2. 如果您在 proto 上创建了新字段,请使用 npm run build:protos 在 Winscope 中重新编译 protos。

  • 某些已安装的依赖项版本不正确(构建失败)

    • 恢复对 package.jsonpackage-lock.json 的更改。删除 node_modules。再次运行 npm install
  • 我向其中一个 proto 文件添加了一个新字段。如何显示它?

    • Winscope 使用编译时的 proto 定义,因此默认情况下不会显示新字段。要显示新字段,请使用 npm run build:protos 重新构建 protos。