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)

  1. 在perfetto_traces/config.txt创建一个文本文件

  2. 用trace配置填充文件。最好使用Web UI(https://ui.perfetto.dev/)来生成成Perfetto配置,然后再进行调整。

  3. 在Web UI中,单击Record new trace。

  4. 选择要录制的各种数据源。

  5. 复制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)

  1. 在perfetto_traces/perfetto.py创建文本文件

  2. 将以下内容粘贴到文件中:

#!/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)中创建一个自定义命令来运行脚本。

  1. 确保Quest接到ODH。

  2. 在 My Device选项卡下,单击+ Create Command。

  3. 名称:Perfetto;命令:python3 /perfetto_traces/perfetto.py;在新窗口中显示命令输出:选中

  4. 有关ODH自定义命令的更多信息请访问这个页面

3. 记录和查看trace

记录trace

  1. 确保Quest已接到PC。

  2. 运行命令adb devices时,请检查是否列出了你的Quest。

  3. 打开你的应用程序,进入你想要的情景模式。

  4. 使用Python3运行perfetto.py。这会将配置复制到设备。运行Perfetto,并将记录的trace复制回目录。或者,如果是使用ODH,则在ODH中运行Perfetto自定义命令

  5. 你记录的trace将保存到 perfetto_traces/trace.pftrace。

查看trace

  1. 打开Web UI(https://ui.perfetto.dev/

  2. 单击`Open trace file并选择刚才记录的trace,位置perfetto_traces/trace.pftrace。

提示:通过单击计数器名称旁边的星号,可以将计数器固定到时间线视图的顶部。

4. Git Bash/WSL/Cygwin脚本

如果你在开发中更喜欢gitbash/WSL/Cygwin,请使用下面的脚本,而不是上面提供的python脚本。

  1. 在perfetto_traces/perfetto.sh创建一个文本文件

  2. 将以下内容粘贴到文件中:

#!/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}"

本文链接https://news.nweon.com/85041
转载须知:转载摘编需注明来源映维网并保留本文链接
入行必读:腾讯可以向Facebook学习什么

更多阅读推荐......

资讯