Quest研发实战:如何用Perfetto进行App性能分析
Quest开发者可以使用Perfetto来分析他们的应用程序
(映维网 2021年04月22日)Perfetto是一个Android性能剖析工具,除了为与Perfetto或ATrace集成的应用提供应用级工具外,它同时提供有关系统事件的信息,例如调度活动。它是systrace的替代品,并且增加了对计数器的支持,更多的事件选择、更长的trace,并提供更好的性能。有关Perfetto的更多信息请访问这个页面。
在Oculus日前发布的v27操作系统更新中,当开发者模式打开时,Quest和Quest 2默认启用Perfetto。v27操作系统更新同时附带了向Perfetto发送度量的VrApi/GPU。
Quest开发者可以使用Perfetto来剖析应用,以及整个系统的附加情景信息。随着时间的推移,团队计划通过Perfetto公开更多特定于Oculus的数据。
1. 从应用程序发送数据
为了让应用程序中的事件显示在Perfetto trace中,必须使用Perfetto TrackEvents或ATrace对应用程序进行注释。若要为应用程序添加注释,我们建议选择Perfetto TrackEvents作为性能更高的选项。确保Perfetto配置(如下所述)具有适当的TrackEvent或ATrace数据源。
将Perfetto添加到TrackEvents的说明请参阅这个页面。
2. Perfetto设置
要记录新的trace,首先需要设置一定的文件。你需要创建一个工作目录。在这里,你将创建Perfetto配置,并在其中写入trace(下面展示了一个带有Python脚本的安装程序,但你可以使用末尾提供的gitbash/WSL/Cygwin脚本)。
第一步:创建一个包含Perfetto配置、脚本和trace输出的工作目录。出于本文的目的,我们将把目录称为perfetto\u traces,但你可以随意命名。
第二步:创建Perfetto配置(config.txt)
-
在perfetto_traces/config.txt创建一个文本文件
-
用trace配置填充文件。最好使用Web UI(https://ui.perfetto.dev/)来生成成Perfetto配置,然后再进行调整。
-
在Web UI中,单击Record new trace。
-
选择要录制的各种数据源。
-
复制Trace command部分中显示的配置。只复制配置,而不是整个命令。如下所示:
注意:Perfetto app instrumentation和VrApi/GPU度量都是Perfetto TrackEvents的一部分,这是Web UI不支持生成配置的数据源。若要记录,请将以下内容添加到配置中:
data_sources: { config { name: "track_event" } }
注意:GPU度量要求adb shell ovrgpuprofiler-r再跟踪记录期间于后台运行。
下面是一个示例配置文件,它将记录VrApi和GPU度量,以及设备发出的任何其他Perfetto TrackEvents。
buffers: { size_kb: 63488 fill_policy: DISCARD } buffers: { size_kb: 2048 fill_policy: DISCARD } data_sources: { config { name: "linux.process_stats" target_buffer: 1 process_stats_config { scan_all_processes_on_start: true } } } data_sources: { config: { name: "track_event" } } duration_ms: 10000
第三步:创建Python脚本来记录trace(perfetto.py)
-
在perfetto_traces/perfetto.py创建文本文件
-
将以下内容粘贴到文件中:
#!/usr/bin/env python3 import os import subprocess import sys dir = os.path.dirname(os.path.realpath(__file__)) config_file = os.path.join(dir, "config.txt") output_file = os.path.join(dir, "trace.pftrace") if not os.path.isfile(config_file): print("Config file does not exist: " + config_file) sys.exit(1) config = open(config_file, 'r') subprocess.run(["adb", "shell", "rm", "-f", "/data/misc/perfetto-traces/trace"], check=False) subprocess.run(["adb", "shell", "perfetto", "-c", "-", "--txt", "-o", "/data/misc/perfetto-traces/trace"], stdin=config, check=True) if os.path.isfile(output_file): os.remove(output_file) subprocess.run(["adb", "pull", "/data/misc/perfetto-traces/trace", output_file], check=True)
第四步(可选):在 Oculus Developer Hub (ODH)中创建一个自定义命令来运行脚本。
-
确保Quest接到ODH。
-
在 My Device选项卡下,单击+ Create Command。
-
名称:Perfetto;命令:python3
/perfetto_traces/perfetto.py;在新窗口中显示命令输出:选中 -
有关ODH自定义命令的更多信息请访问这个页面。
3. 记录和查看trace
记录trace
-
确保Quest已接到PC。
-
运行命令adb devices时,请检查是否列出了你的Quest。
-
打开你的应用程序,进入你想要的情景模式。
-
使用Python3运行perfetto.py。这会将配置复制到设备。运行Perfetto,并将记录的trace复制回目录。或者,如果是使用ODH,则在ODH中运行Perfetto自定义命令
-
你记录的trace将保存到 perfetto_traces/trace.pftrace。
查看trace
-
打开Web UI(https://ui.perfetto.dev/)
-
单击`Open trace file并选择刚才记录的trace,位置perfetto_traces/trace.pftrace。
提示:通过单击计数器名称旁边的星号,可以将计数器固定到时间线视图的顶部。
4. Git Bash/WSL/Cygwin脚本
如果你在开发中更喜欢gitbash/WSL/Cygwin,请使用下面的脚本,而不是上面提供的python脚本。
-
在perfetto_traces/perfetto.sh创建一个文本文件
-
将以下内容粘贴到文件中:
#!/bin/bash set -euo pipefail export MSYS_NO_PATHCONV=1 export MSYS2_ARG_CONV_EXCL="*" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" CONFIG_FILE="${DIR}/config.txt" OUTPUT_FILE="${DIR}/trace.pftrace" if [ ! -f "${CONFIG_FILE}" ]; then echo "Config file does not exist: ${CONFIG_FILE}" exit 1 fi if [ -x "$(command -v cygpath)" ]; then OUTPUT_FILE=$(cygpath -w "${OUTPUT_FILE}") fi if [ -x "$(command -v wslpath)" ]; then OUTPUT_FILE=$(wslpath -w "${OUTPUT_FILE}") fi adb.exe shell rm -f /data/misc/perfetto-traces/trace || true adb.exe shell perfetto -c - --txt -o /data/misc/perfetto-traces/trace <"${CONFIG_FILE}" rm -f "${OUTPUT_FILE}" || true adb.exe pull /data/misc/perfetto-traces/trace "${OUTPUT_FILE}"