设为首页 加入收藏

TOP

「Android」SurfaceFlinger分析(四)
2019-09-01 23:14:08 】 浏览:104
Tags:Android SurfaceFlinger分析
ndleMessageTransaction处理事务

              >> 有事务处理请求时,调用handleTransaction进行处理(getTransactionFlags)

             >> 调用handleTransactionLocked

             >> commitTransactionao提交事务

           > handleMessageInvalidateia调用handlePageFlip绘制

           > handleMessageRefresh合并和渲染

           > 完成后,线程继续等待下一个invalidate消息

 

          (以下是深入理解Android的讲解,源码为2.2

           > 处理事务

                >> 有事务处理请求时,调用handleTransaction进行处理(getTransactionFlags)

             >> 调用handleTransactionLocked

             >> commitTransactionao提交事务

             > handlePageFlip绘制(Layer从FrontBuffer中取得新数据,并生成一张OpenGL中的纹理。现在Layer准备好了数据,下一步开始进行绘制)

             > handleRepaint对每一层进行重绘(显示层的onDraw函数,使用OpenGL)

             > 绘制完图后,unlockClient释放之前占着FrontBuffer的索引,调用各个显示层的finishPageFlip函数

             > postFrameBuffer调用DisplayHardware.cpp的flip函数,flipg调用eglSwapBuffers函数,以完成FrameBuffer的apgeFlip操作,之后混合后的图像就会传递到屏幕中显示

 

 

  交互模块:

    应用通过windowsmanager分配一个surface,需要分配显示空间在上面进行绘图,在图形绘制完成后需要推送到surfaceflinger进行合成显示。
   surfaceflinger作为消费者,得到一个要合成的图形,在合成完毕后再将图形释放。

    大概流程:

    ->bufferqueue.cpp(../native/libs/gui库

    -> composerService(单例模式)与SF建立bind连接

    -> SurfaceComposerClinet.cpp调用createaSurfce创建surface,返回surfaceControl

    -> 创建surface后在graphicBuffer.cpp(../native/libs/ui库)分配共享内存

    -> 创建surface后,SF也对应一个layer,当上层layer调用刷新后,onFrameAvailable被调用,通知SF有layer更新 

 

  !!!初次接触,翻阅《深入理解Android》(2.2源码)以及其他的博客(Android6.0以上源码)很多地方还不理解,所以有不正确的地方还请指正。

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇gradle配置国内镜像 下一篇Android Studio Git 分支使用实践

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目