hello

上篇博客我们说到SurfaceControl会调用openTransaction和closeTransaction来一起讲所有SurfaceControl的属性等传给SurfaceFlinger。我们来看下这个过程。

一、SurfaceControl
我们先来看下SurfaceControl.java中的相关函数,都是调用了JNI函数。

public static void openTransaction() {
    nativeOpenTransaction();
}

/** end a transaction */
public static void closeTransaction() {
    nativeCloseTransaction();
}

/** flag the transaction as an animation */
public static void setAnimationTransaction() {
    nativeSetAnimationTransaction();
}

public void setLayer(int zorder) {
    checkNotReleased();
    nativeSetLayer(mNativeObject, zorder);
}

我们再来看下android_view_SurfaceControl.cpp下面的一些JNI函数,其中nativeOpenTransaction和nativeCloseTransaction都是调用了SurfaceComposerClient的静态函数,其他都是调用了c层的SurfaceControl的函数。

static void nativeOpenTransaction(JNIEnv* env, jclass clazz) {
SurfaceComposerClient::openGlobalTransaction();
}

static void nativeCloseTransaction(JNIEnv* env, jclass clazz) {
SurfaceComposerClient::closeGlobalTransaction();
}

static void nativeSetAnimationTransaction(JNIEnv* env, jclass clazz) {
SurfaceComposerClient::setAnimationTransaction();
}

static void nativeSetLayer(JNIEnv* env, jclass clazz, jlong nativeObject, jint zorder) {
SurfaceControl* const ctrl = reinterpret_cast

你可能感兴趣的:(Android框架分析)