wentao

记录多一点,懂得多一点

Android13 Surface LockCanvas流程分析-CSDN博客

Surface的lockCanvas用于获取Canvas对象,以便进行绘图操作,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
//frameworks/base/core/java/android/view/Surface.java
public class Surface implements Parcelable {
    public Canvas lockCanvas(Rect inOutDirty)
            throws Surface.OutOfResourcesException, IllegalArgumentException {
        synchronized (mLock) {
            checkNotReleasedLocked();
            if (mLockedObject != 0) {
                // Ideally, nativeLockCanvas() would throw in this situation and prevent the
                // double-lock, but that won't happen if mNativeObject was updated.  We can't
                // abandon the old mLockedObject because it might still be in use, so instead
                // we just refuse to re-lock the Surface.
                throw new IllegalArgumentException("Surface was already locked");
            }
            mLockedObject = nativeLockCanvas(mNativeObject, mCanvas, inOutDirty);
            return mCanvas;
        }
    }
}

调用nativeLockCanvas方法,nativeLockCanvas是一个Native方法在android_view_Surface.cpp中实现:

Android13 Surface UnlockCanvasAndPost流程分析-CSDN博客

Surface的unlockCanvasAndPost用于解锁并提交Surface上的画布内容,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//frameworks/base/core/java/android/view/Surface.java
public class Surface implements Parcelable {
    public void unlockCanvasAndPost(Canvas canvas) {
        synchronized (mLock) {
            checkNotReleasedLocked();
 
 
            if (mHwuiContext != null) {
                mHwuiContext.unlockAndPost(canvas);
            } else {
                unlockSwCanvasAndPost(canvas);
            }
        }
    }
}

调用Surface的unlockSwCanvasAndPost方法:

Android13 SurfaceFlinger Commit(提交)流程分析_surfaceflinger::commit-CSDN博客

SurfaceFlinger的commit方法用于将应用程序的绘制结果提交到屏幕上显示。

主要就是处理app端发起的一系列transaction的事务请求,需要对这些请求进行识别是否当前帧处理,处理过程就是把事务中的属性取出,然后更新到Layer中,偶尔buffer更新的还需要进行相关的latchbuffer操作,SurfaceFlinger的commit代码如下:

Android13 SurfaceFlinger OnComposerHalRefresh流程分析_android 13 Surfaceflinge变化-CSDN博客

onComposerHalRefresh方法是SurfaceFlinger中的一个函数。该方法的作用是在Composer HAL刷新时被调用,用于更新显示内容。onComposerHalRefresh方法会在SurfaceFlinger接收到Composer HAL刷新事件时被调用。Composer HAL是硬件抽象层的一部分,负责与硬件显示设备进行通信。当Composer HAL完成一次刷新操作后,会通知SurfaceFlinger进行相应的处理。

0%