Shell 转换

Shell 转换的引入整合并编纂了在系统内运行动画的方法,从而可以检索有关计划执行的动画的集中信息。

转换跟踪记录包含有关 WindowManager (WM) shell 内发生的每次转换的数据,这些数据源自系统服务器和 shell 端。此跟踪记录在 Droidfood 中永久启用,并自动嵌入到错误报告中。

如需详细了解跟踪记录收集,请参阅Shell 转换

Winscope 的 Transitions 查看器显示包含服务器端和客户端信息的转换跟踪记录的此信息。查看器由左侧包含有关转换高级信息的表格日志视图和右侧每个转换的详细视图组成

Shell transition trace analysis

图 1. Shell 转换跟踪记录分析。

表格视图

表格视图包含:

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

详细视图

除了表格视图中的详细信息外,SELECTED TRANSITION 部分中的详细转换视图还包含:

  • handler:处理此动画的转换处理程序。
  • createTimeNs:在 WM 服务器端创建转换的时间戳。
  • finishTimeNs:在 WM 服务器端收到通知,告知 shell 端已完成转换运行的时间戳。
  • endTransactionId:此转换中包含的最终 SurfaceFlinger 事务。
  • startTransactionId:此过渡中包含的初始 SurfaceFlinger 事务。
  • targets:过渡参与者列表。
  • type:过渡类型,定义在 Transitions.java

目标

目标是过渡中涉及的元素(通常是 Activity 或任务)。对于每个目标,我们记录

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