GUI系统之SurfaceFlinger(17)handleRepaint

文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正。转载请注明:From LXS. http://blog.csdn.net/uiop78uiop78/GUI系统之SurfaceFlinger章节目录:blog.csdn.net/uiop78uiop78/article/details/89545081.1.1 handleRepaint经过hand
摘要由CSDN通过智能技术生成
文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正。
转载请注明:From LXS. http://blog.csdn.net/uiop78uiop78/

GUI系统之SurfaceFlinger章节目录:

blog.csdn.net/uiop78uiop78/article/details/8954508



1.1.1 handleRepaint

经过handleTransaction和handlePageFlip等步骤的准备工作后,现在可以合成各图层数据了。

void SurfaceFlinger::handleRepaint()

{…

mSwapRegion.orSelf(mDirtyRegion);

    const DisplayHardware&hw(graphicPlane(0).displayHardware());

    …

    uint32_t flags =hw.getFlags();//系统支持的渲染方式

    if (flags &DisplayHardware::SWAP_RECTANGLE) {       

       mDirtyRegion.set(mSwapRegion.bounds());

    } else {

        if (flags & DisplayHardware::PARTIAL_UPDATES) {          

           mDirtyRegion.set(mSwapRegion.bounds());

        } else {

           mDirtyRegion.set(hw.bounds());

            mSwapRegion =mDirtyRegion;

        }

    }

    setupHardwareComposer();

    composeSurfaces(mDirtyRegion);//合成各图层数据

   mSwapRegion.orSelf(mDirtyRegion);

    mDirtyRegion.clear();

}

系统支持多种类型的渲染方式,可以从DisplayHardware获取到:

l  SWAP_RECTANGLE

我们只需要渲染“脏”区域,或者说系统在软件层面上支持部分区域更新,但更新区域必须是长方形规则的。由于这个限制,mDirtyRegion应该是覆盖所有“脏”区域的最小矩形

 

l  PARTIAL_UPDATES

系统支持硬件层面部分区域更新,同样也需要是矩形区域

 

l  其它

其它情况下,我们需要重绘整个屏幕,即hw.bounds()

 

接着setupHardwareComposer()对所有mVisibleLayersSortedByZ中的layers进行数据初始化,比如合成类型(compositionType)。包括HWC_FRAMEBUFFER和HWC_OVERLAY两种。如果是前者的话,那么图层合成将由SurfaceFlinger通过OpenGL ES来完成;否则就由一种叫overlay的硬件来执行。Overlay通常被用于处理视频回放和录制时的预览,这种硬件合成可以加快处理,减小CPU的负担。不过从Android 4.0开始,源码中关于Overlay部分的实现被移除了。

HWComposer内部维持着一个各layer属性的list:

hwc_layer_list_t*      mList;

这个结构体定义如下:

typedef struct hwc_layer_list {

    uint32_t flags;//各标志

    size_tnumHwLayers;//图层数量

    hwc_layer_t  hwLayers[0];//各图层属性详细描述

} hwc_layer_list_t;

 

当SurfaceFlinger进行handleWorkList时,它根据当前可见图层的数量调用HWComposer::createWorkList(size_tnumLayers)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值