Shell 过渡

shell 过渡的引入整合并规范了在系统中运行动画的方法,从而允许检索有关计划要执行的动画的集中信息。

过渡跟踪记录包含 WindowManager (WM) shell 中发生的每项过渡的数据,这些过渡既来自系统服务器,也来自 shell 端。此跟踪记录在 Droidfood 中永久启用,并自动嵌入到 bug 报告中。

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

Winscope 的“Transitions”查看器会针对包含服务器端和客户端信息的过渡跟踪记录显示此信息。该查看器由一个表格式日志视图组成,该视图左侧包含有关过渡的概要信息,右侧包含每个过渡的详细信息:

Shell 过渡跟踪分析

图 1. Shell 过渡跟踪分析。

表格视图

表格视图包含:

  • ID:仅用于调试而生成的过渡 ID。
  • Type:过渡类型,如 Transitions.java 中所定义
  • Send Time:从服务器发送到 shell 以进行处理的过渡的时间戳。
  • Dispatch Time:过渡被派发到处理程序以开始播放时的时间戳。
  • Duration:从开始播放到结束播放的过渡所用的时间。
  • Status:如果过渡是:
    • PLAYED:已播放。
    • ABORTED:在播放前中止。过渡可以从 shell 或 WM 端中止。
    • MERGED:由过渡处理程序合并到其他正在播放的过渡中(处理程序决定如何处理此过渡)。

详细视图

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

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

目标

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

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