在Fire OS上衡量Fire TV应用的KPI
“性能测试”是运行Fire OS的亚马逊Fire TV设备上的应用测试过程,测试领域包括兼容性、可靠性、速度、响应时间、稳定性和资源使用等。您可以使用此测试来识别和解决应用的性能瓶颈。性能测试涉及收集和评估关键性能指标 (KPI)。要收集KPI指标,您需要在亚马逊设备上运行一组特定的步骤,然后使用日志等设备资源查找或计算指标。
在将您的应用提交到亚马逊应用商店之前,请务必运行性能测试。通过定期跟踪这些KPI,您可以验证您的应用是否提供流畅、响应迅速的体验。
了解延迟和内存:
- “延迟”衡量您的应用启动和变为可用状态的速度。用户期望应用几乎可以即时启动,并且在与内容交互之前的延迟很小。
- “内存”衡量您的应用使用设备RAM的效率。过多的内存消耗会导致系统崩溃、多任务处理性能不佳和用户体验下降。
先决条件
在Fire OS上衡量应用KPI之前:
- 在开发计算机上安装以下软件程序包:
- Amazon Corretto
- Android Studio(确保在安装过程中安装平台工具)
- Appium
- 完成以下设置:
- 为JAVA_HOME和ANDROID_HOME文件夹设置路径。
- 在设备上启用开发者模式并启用USB调试。有关说明,请参阅在亚马逊Fire TV上启用调试。
- 使用以下命令捕获所连接设备的序列号:
adb devices -l
- 阅读以下部分:
应用KPI指标和指导值
下表列出了在Fire OS上衡量Fire TV应用的KPI指标以及每个指标的建议指导值。这些指标衡量启动性能和内存效率。
| KPI | 单位 | 场景 | 描述 | 指导值 |
|---|---|---|---|---|
| 第一帧时间 (TTFF) | 秒 | 应用冷启动 | 衡量从应用启动到第一帧渲染的时间。从Atrace: AMS.startActivityAsUser到eglSwapBuffersWithDamageKHR进行计算。 |
< 2.0秒 |
| TTFF | 秒 | 应用热启动 | 衡量应用从后台移动到前台时显示其第一帧所花费的时间。 | < 1.0秒 |
| 完全显示时间 (TTFD) | 秒 | 应用冷启动 | 衡量应用从启动到应用准备好进行用户交互所需的时间。需要reportFullyDrawn()。 |
< 10.0秒 |
| TTFD | 秒 | 应用热启动 | 衡量应用从后台移动到前台后变得可以完全交互所需的时间。 | < 2.0秒 |
| 前台内存 | MB | 前台应用(4K视频) | 衡量激活和播放4K视频内容时的应用按比例分配共享库占用的内存 (PSS) 总量。 | < 400MB |
| 前台内存 | MB | 前台应用(1080P或更低) | 衡量应用在使用1080P或更低分辨率内容时的PSS总量。 | < 300MB |
| 后台内存 | MB | 在后台中的应用 | 衡量应用播放内容10分钟并移至后台后的PSS总量。 | < 100MB |
| eMMC写入 (FG) | MB/小时 | 在前台中的应用 | 应用处于活动状态时写入eMMC存储空间的数据的平均速率。 | < 50MB/小时 |
| eMMC写入 (BG) | MB/小时 | 在后台中的应用 | 应用处于后台时写入eMMC存储空间的数据的平均速率。 | < 2MB/小时 |
启动场景
性能测试衡量两种类型的应用启动场景,以评估TTFF和TTFD:
- 冷启动 - 当用户在强制停止应用进程或重启设备后启动应用时。系统必须将所有资源和依赖项加载到内存中。
- 热启动 - 指用户将应用从后台(非活动状态)切换到前台(活动状态),并且内存中已有一些资源和依赖项。
完全绘制的标记
当您的应用变得可用于用户交互时,完全绘制的标记会发出信号。标记:
- 表示您的应用何时完成其主要组件的加载。
- 标记用户何时可以开始与您的应用进行交互。
- 帮助衡量TTFD性能。
要实现,请在以下关键时刻调用Activity中的reportFullyDrawn():
- 冷启动 - 加载初始数据并渲染主屏幕(登录页或主页)之后。
- 热启动 - 当您的应用在前台运行后变得响应迅速时。
以下示例代码显示了如何添加完全绘制的标记。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().getDecorView().post(() -> {
reportFullyDrawn();
});
}
}
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
window.decorView.post { reportFullyDrawn() }
}
}
reportFullyDrawn()。使用ADB和Atrace衡量KPI
使用Android调试桥 (ADB) 和Atrace来衡量运行Fire OS的Fire TV设备上的每个KPI。
测试策略
测试期间您可使用应用启动器意图或Monkey工具多次进行应用的启动和强制停止。在每次迭代之间,捕获Atrace日志、执行导航操作、捕获计时器值并在强制停止之前捕获内存使用情况。
亚马逊建议运行以下最低迭代次数。
| 性能测试类别 | 最小迭代次数 |
|---|---|
| 延迟 - 第一帧时间 (TTFF) | 50 |
| 准备好供使用 - 完全显示时间 (TTFD) | 10 |
| 内存 | 5 |
要测试的设备
要了解各Fire OS版本的测试覆盖率,请在以下参考设备上进行测试。
| Fire OS版本 | 参考设备 |
|---|---|
| Fire OS 6 | Fire TV Stick 4K (2018) |
| Fire OS 7 | 带语音遥控器的Fire TV Stick (2020) |
冷启动KPI
冷启动KPI衡量应用在强制停止应用进程或重启设备后启动应用时的性能。
TTFF - 冷启动
- 强制停止应用:
adb -s <DSN> shell am force-stop <程序包名称> - Start Atrace:
adb shell atrace -o /sdcard/atrace.capture -t 15 -b 32000 -a <package_name> gfx input am view wm - 启动应用:
adb -s <DSN> shell monkey --pct-syskeys 0 -p <程序包名称> -c android.intent.category.LEANBACK_LAUNCHER 1 - 等待30秒。
- 拉取Atrace日志:
adb -s <DSN> pull /sdcard/atrace.capture ./atrace_cold_<迭代>.txt - 计算时差:
- 起始标记:
AMS.startActivityAsUser - 结束标记:
eglSwapBuffersWithDamageKHR
- 起始标记:
- 强制停止应用。
- 重复步骤1-7,进行50次迭代。
TTFD - 冷启动
遵循与TTFF - 冷启动相同的步骤,但要使用以下标记:
- 起始标记:
AMS.startActivityAsUser - 结束标记:
Activity.reportFullyDrawn(匹配应用PID)
重复10次迭代。
热启动KPI
热启动KPI用于衡量应用从后台移至前台时的性能,其中一些资源已在内存中。
TTFF - 热启动
- 启动应用,然后按主页将其发送到后台。
- 启动Atrace。
- 使用Monkey工具启动应用(将其置于前台)。
- 等待30秒。
- 拉取Atrace日志。
- 计算时差:
- 起始标记:
AMS.startActivityAsUser - 结束标记:
eglSwapBuffersWithDamageKHR
- 起始标记:
- 按主页按钮将应用发送到后台。
- 重复步骤2-7,进行50次迭代。
TTFD - 热启动
遵循与TTFF热启动相同的步骤,但使用Activity.reportFullyDrawn作为结束标记。
重复10次迭代。
前台内存KPI
前台内存KPI会捕获应用在活跃运行和播放内容时的内存消耗。
- 下载、安装和登录应用(如果适用)。
- 强制停止应用。
- 使用Monkey工具启动应用。
- 播放视频内容10分钟。
- 等待120秒。
- 捕获前台内存:
adb -s <DSN> shell dumpsys meminfo <程序包名称> - 强制停止应用。
- 重复步骤2-7,进行5次迭代。
来自dumpsys meminfo的PSS总量是主要指标。
后台内存KPI
后台内存KPI会捕获应用移至后台后的内存消耗。当RAM不足时,系统更有可能杀死后台内存使用率高的应用。
- 下载、安装和登录应用(如果适用)。
- 启动应用,播放视频内容10分钟。
- 按主页按钮将应用发送到后台。
- 等待60秒。
- 捕获后台内存:
adb -s <DSN> shell cat /proc/<PID>/statm - 重复步骤2-5,进行5次迭代。
指导值摘要
下表汇总了每个KPI的建议指导值和测量迭代。
| KPI | 指导值 | 测量 |
|---|---|---|
| TTFF冷启动 | < 2.0秒 | 50次迭代 |
| TTFF热启动 | < 1.0秒 | 50次迭代 |
| TTFD冷启动 | < 10.0秒 | 10次迭代 |
| TTFD热启动 | < 2.0秒 | 10次迭代 |
| 前台内存 (4K) | < 400MB | 5次迭代 |
| 前台内存 (1080P) | < 300MB | 5次迭代 |
| 后台内存 | < 100MB | 5次迭代 |
| eMMC 写入(前台) | < 50MB/小时 | 连续 |
| eMMC写入(后台) | < 2MB/小时 | 连续 |
KPI健康状况评估
使用以下指示词来评估应用的KPI结果是否符合建议的指导值。
| 指示器 | 含义 |
|---|---|
| 通过 | 表示在建议指导值范围内 |
| 警告 | 在指导值的10%以内 |
| 失败 | 表示超过建议指导值10%以上。 |
工具
以下工具可以帮助您衡量和监控Fire TV设备上的应用KPI:
- Android调试桥 (ADB) - 用于与Fire TV设备通信的命令行工具。
- Atrace/Systrace - 用于捕获性能标记的系统跟踪实用工具。
- Monkey工具 - 用于自动测试的应用启动器。
- Appium - 测试自动化框架。
- Maestro - 基于脚本的用户界面自动化,适用于内存/播放场景。
- Android Studio Profiler - 实时CPU、内存和网络分析。
- 应用运行状况洞察控制面板 - 用于跟踪上线应用指标的开发者控制台主信息页面。
相关主题
- Fire TV的应用性能脚本
- 要了解有关ADB命令的更多信息,请参阅Android开发者文档中的Android调试桥 (adb)。
- 有关Fire TV设备上的更多测试,请参阅测试标准组2a: Fire TV设备上的应用行为。
Last updated: 2026年7月23日

