Android display架构分析七-Surfaceflinger process流程分析

Android display架构分析七-Surfaceflinger process流程分析

ID:37916301

大小:73.50 KB

页数:9页

时间:2019-06-02

Android display架构分析七-Surfaceflinger process流程分析_第1页
Android display架构分析七-Surfaceflinger process流程分析_第2页
Android display架构分析七-Surfaceflinger process流程分析_第3页
Android display架构分析七-Surfaceflinger process流程分析_第4页
Android display架构分析七-Surfaceflinger process流程分析_第5页
资源描述:

《Android display架构分析七-Surfaceflinger process流程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Androiddisplay架构分析七-Surfaceflingerprocess流程分析根据前面的介绍,surfaceflinger作为一个serverprocess,上层的应用程序(作为client)通过Binder方式与其进行通信。Surfaceflinger作为一个thread,这里把它分为3个部分,如下:1、Thread本身处理部分,包括初始化以及threadloop。2、Binder部分,负责接收上层应用的各个设置和命令,并反馈状态标志给上层。3、与底层的交互,负责调用底层接口(HAL)。结构图如下:注释:a、Binder接收到应用程序的命令(如创建surface、设置参数

2、等),传递给flinger。b、Flinger完成对应命令后将相关结果状态反馈给上层。c、在处理上层命令过程中,根据需要设置event(主要和显示有关),通知ThreadLoop进行处理。d、Flinger根据上层命令通知底层进行处理(主要是设置一些参数,Layer、position等)e、ThreadLoop中进行surface的合成并通知底层进行显示(Postbuffer)。f、DisplayHardware层根据flinger命令调用HAL进行HW的操作。下面来具体分析一些SurfaceFlinger中重要的处理函数以及surface、Layer的属性1)、readToRunSu

3、rfaceFlingerthread的初始化函数,主要任务是分配内存和设置底层接口(EGL&HAL)。123456789101112131415161718192021222324252627282930status_tSurfaceFlinger::readyToRun() { … … mServerHeap=newMemoryDealer(4096,MemoryDealer::READ_ONLY);//为IPC分配共享内存 … mSurfaceHeapManager=newSurfaceHeapManager(this,8<<20);//为flinger分配heap,大小为8M,存

4、放具体的显示数据 { //initializethemaindisplay GraphicPlane&plane(graphicPlane(dpy)); DisplayHardwareconsthw=newDisplayHardware(this,dpy); plane.setDisplayHardware(hw);//保存显示接口 } //获取显示相关参数 3132333435363738394041424344454647484950515253545556575859constGraphicPlane&plane(graphicPlane(dpy)); constDisplayH

5、ardware&hw=plane.displayHardware(); constuint32_tw=hw.getWidth(); constuint32_th=hw.getHeight(); constuint32_tf=hw.getFormat(); … … //InitializeOpenGLES glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,0); glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameter

6、x(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); … … }2)、ThreadLoopSurfaceflinger的loop函数,主要是等待其他接口发送的event,进行显示数据的合成以及显示123456boolSurfaceFlinger::threadLoop() { waitForEvent();//等待其他接口的signalevent 789101112131415161718192021222

7、32425262728293031323334353637… … //postsurfaces(ifneeded) handlePageFlip();//处理翻页机制 constDisplayHardware&hw(graphicPlane(0).displayHardware()); if(LIKELY(hw.canDraw())) { //repainttheframebuffer(ifneeded) handleRepaint();//合

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。