android surface管理

Surface Flinger监听窗口变化并处理控制台信号,通过handleTransaction()移除销毁的Layer并计算可视区域。layer_state_t状态变化触发重绘,Surface创建涉及SurfaceComposerClient和SurfaceControl。Surface操作如设置位置、Layer、隐藏等改变layer_state_t,交易通过open/closeTransaction管理,错误处理需关注egl错误。
摘要由CSDN通过智能技术生成

当窗口的内容或者状态发生变化时,Surface Flinger就会在监听线程中监听到相关的事件,并进行处理。首先判断事件是不是控制台信号,如果是控制台信号,就调用handleConsoleEvents()方法进行控制台信号的处理,获取渲染的区域;当交易处理完成时,Surface Flinger会在handleTransaction()方法中遍历Z-order上的Layer,移去已经被销毁的Layer;接下来Surface Flinger会遍历LayerVector,计算每个Layer的可视区域,如果需要重绘,在handleRepaint()方法中会进行Layer组合,当组合完成后,会发送消息compositionComplete()通知硬件Layer组合已经完成,然后进行Surface的渲染。

关于Surface,还有一个十分重要的概念就是layer_state_t,根据窗口状态的变化,Layer处于不同的状态。layer_state_t的值包括ePositionChanged、eLayerChanged、eSizeChanged、eAlphaChanged、eMatrixChanged、eTransparentRegionChanged、eVisibilityChanged等。当发生eLayerChanged变化时,说明缓冲需要切换。另外,不论layer_state_t值发生了何种变化,都需要重新遍历Layer,进行相应的重绘。
一般而言,屏幕的渲染需要重绘Surface的所有像素,但是出于提高效率和速率的需要,在现代的设计上,会通过分析只重绘发生变化的区域。这部分的内容主要位于framebuffer.cpp的fb_post()函数中。在“LayerBuffer”和“LayerDim”模式的Layer中也有采用。
在Surface上层ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值