Shell 转换

引入 shell 转换后,系统内运行动画的方法得到了整合和编码,从而允许检索有关要执行的动画的集中信息。

转换轨迹包含 WindowManager (WM) 外壳中发生的每项转换的数据,这些数据来自系统服务器和外壳端。此轨迹会在 Droidfood 中永久启用,并自动嵌入到 bug 报告中。

如需详细了解轨迹收集,请参阅Shell 转换

Winscope 的“转换”查看器会针对同时包含服务器端和客户端信息的转换轨迹显示此信息。查看器由左侧包含有关转换的概要信息的表格日志视图和右侧显示每个转换的详细视图组成:

shell 转换轨迹分析

图 1. shell 转换轨迹分析。

表格视图

表格视图包含:

  • ID:仅出于调试目的生成的转换 ID。
  • 类型:转换类型,如 Transitions.java 中所定义
  • 发送时间:从服务器发送到 shell 以进行处理的转换的时间戳。
  • 调度时间:转场效果调度到处理程序以开始播放的时间戳。
  • 时长:从开始播放到结束所用的时间。
  • 状态:如果转换是:
    • PLAYED:已玩过。
    • ABORTED:在播放前中止。转换可从 shell 或 WM 端中止。
    • MERGED:由转场效果处理程序合并到某个正在播放的其他转场效果中(处理程序决定如何处理此情况)。

详细视图

除了表格视图中的详细信息之外,所选转场效果部分中的详细转场效果视图还包含以下内容:

  • handler:处理此动画的转换处理脚本。
  • createTimeNs:在 WM 服务器端创建转场效果时的时间戳。
  • finishTimeNs:WM 服务器端收到通知,表明转换已在 shell 端完成时的时间戳。
  • endTransactionId:此转换中包含的最终 SurfaceFlinger 事务。
  • startTransactionId:此转换中包含的初始 SurfaceFlinger 事务。
  • targets:转场参与者列表。
  • type:转换类型,如 Transitions.java 中所定义

目标

目标是过渡中涉及的元素(通常是 activity 或任务)。对于每个目标,我们会记录以下信息:

  • layerId:正在呈现动画的层(来自 SurfaceFlinger 层次结构)。
  • mode:在此图层上执行的动画类型。
  • windowId:正在执行动画的窗口(来自 WindowManager 层次结构)。
  • flags:要应用于图层的一组新标志。