Android13 BufferQueueProducer QueueBuffer流程分析-CSDN博客
BufferQueueProducer的queueBuffer方法用于将图形缓冲区添加到队列中。当应用程序完成对图形缓冲区的绘制后,可以调用queueBuffer方法将其提交给SurfaceFlinger进行显示。
BufferQueueProducer的queueBuffer方法用于将图形缓冲区添加到队列中。当应用程序完成对图形缓冲区的绘制后,可以调用queueBuffer方法将其提交给SurfaceFlinger进行显示。
Choreographer的postCallback()方法用于将一个任务添加到Choreographer的任务队列中,以便在下一帧绘制之前执行,代码如下:
EventThread的threadMain方法无限循环处理pendingEvents,对Vsync类型的Event分发到消费者,通过往消费者的FD写数据,通知APP有Vsync信号到来。pendingEvents中的消息处理完了,分发线程等待mCondition的通知,EventThread的threadMain方法代码如下:
Surface::dequeueBuffer是Android系统中Surface类的一个方法,用于从Surface中获取一个可用的Buffer。它通常在图形渲染或视频播放等场景中使用。
Surface的lockCanvas用于获取Canvas对象,以便进行绘图操作,代码如下:
| |
调用nativeLockCanvas方法,nativeLockCanvas是一个Native方法在android_view_Surface.cpp中实现:
Surface::queueBuffer是Android系统中Surface类的一个成员函数,用于将图像数据放入Surface的缓冲区中。它的调用地方主要包括以下几个:
Surface的unlockCanvasAndPost用于解锁并提交Surface上的画布内容,代码如下:
| |
调用Surface的unlockSwCanvasAndPost方法:
SurfaceFlinger的commit方法用于将应用程序的绘制结果提交到屏幕上显示。
主要就是处理app端发起的一系列transaction的事务请求,需要对这些请求进行识别是否当前帧处理,处理过程就是把事务中的属性取出,然后更新到Layer中,偶尔buffer更新的还需要进行相关的latchbuffer操作,SurfaceFlinger的commit代码如下: