参考:窗口的显示过程_reclaimsomesurfacememory-优快云博客
链路图:
// 管理窗口的绘制状态
frameworks/base/services/core/java/com/android/server/wm/WindowStateAnimator.java
// 处理客户端窗口的绘制
frameworks/base/core/java/android/view/ViewRootImpl.java
// 窗口布局, 放置surfaces
frameworks/base/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
// surface的控制器(app进程的renderthread将在这上面绘制)
frameworks/base/services/core/java/com/android/server/wm/WindowSurfaceController.java
// WMS service
frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
// 没有Surface
static final int NO_SURFACE = 0;
// 这通常在 Surface 被创建后但窗口尚未被绘制时设置。在此期间,Surface 是隐藏的。
static final int DRAW_PENDING = 1;
// 这通常在窗口第一次完成绘制后但其surface尚未显示时设置。surface将在下一次布局运行时显示出来。
static final int COMMIT_DRAW_PENDING = 2;
// 这在窗口的绘制已提交之后、其surface实际显示之前的时间段内设置。它用于延迟显示surface,直到令牌中的所有窗口都准备好显示。
static final int READY_TO_SHOW = 3;
// 在窗口首次显示在屏幕上时设置。
static final int HAS_DRAWN = 4;