DisplayContent有个SurfaceSession成员对象mSession
private final SurfaceSession mSession = new SurfaceSession();
SurfaceSession的mNativeClient指向native对象SurfaceComposerClient
SurfaceControl的mNativeObject指向native对象SurfaceControl
SurfaceControl的mNativeHandle指向native对象SurfaceControl的sp<IBinder> mHandle成员
RootWindowContainer.performSurfacePlacementNoTrace()中会调用WMS.openSurfaceTransaction()方法,最终会调用到SurfaceControl.Transaction()构造方法
//WindowManagerService.java
void openSurfaceTransaction() {
try {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "openSurfaceTransaction");
SurfaceControl.openTransaction();
} finally {
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
}
}
//SurfaceControl.java
@UnsupportedAppUsage
public static void openTransaction() {
synchronized (SurfaceControl.class) {
if (sGlobalTransaction == null) {
//GlobalTransactionWrapper是SurfaceControl.Transaction子类,
//因此会调用SurfaceControl.Transaction()构造函数
sGlobalTransaction = new GlobalTransactionWrapper();
}
synchronized(SurfaceControl.class) {
sTransactionNestCount++;
}
}
}
public Transaction() {
this(nativeCreateTransaction());
}
private Transaction(long nativeObject) {
mNativeObject = nativeObject;
mFreeNativeResources =
sRegistry.registerNativeAllocation(this, mNativeObject);
}
SurfaceControl.Transaction的mNativeObject指向native对象SurfaceComposerClient::Transaction