目录
SurfaceControlViewHost是一个辅助类, 用于帮助在其他进程中显示本进程的view。
SurfaceControlViewHost 为绘制进程持有,其中的SurfacePackage 通过binder调用交给另外的显示进程,SurfacePackage中持有绘制进程端的绘制surfacecontrol信息。
在显示进程中的SurfaceView中通过SurfaceView.setChildSurfacePackage(SurfacePackage) 将绘制进程中的界面(即surfacecontrol)与surfaceview关联并进行显示。可以理解为绘制进程和显示进程中传递的实际上为surfacecontrol, 也即SurfaceFlinger端Layer的信息。在显示进程中, 在surfaceView中通过接口设定绘制进程的surface 的父surface为surfaceview自身的mSurfaceControl,并设定z order 关系, 从而在显示上看起来是显示进程的一个view。
如下:

- SurfaceControlViewHost: mSurfaceControl (contrainer layer)
- WindowlessWindowManager.State.mSurfaceControl (buffer laye)
参见: /frameworks/base/core/java/android/service/autofill/InlineSuggestionRenderService.java:170
- final SurfaceControlViewHost host = new SurfaceControlViewHost(this, getDisplay(),
- hostInputToken);
- host.setView(suggestionRoot, lp);
- aidlClass.aidlFunction(host.getSurfacePackage()); //通过aidl接口将SurfacePackage交给显示进程即client端。

- SurfaceHolder.Callback.surfaceCreated() {
- 从远程host中获取SurfaceControlViewHost.SurfacePackage。 可以显示进程调用aidl接口从绘制进程获取,或绘制进程调用aidl传入到显示进程。
- SurfaceView.setChildSurfacePackage(SurfacePackage);
- }
Client端Surfaceview的层次结构如下:
SurfaceView hierarchy
- ViewRootImpl surface
- bounds layer (crops all child surfaces to parent surface insets)
- SurfaceView surface (drawn relative to ViewRootImpl surface)- SurfaceControlViewHost.SurfacePackage surface
- Background color layer (drawn behind all SurfaceView surfaces)