sync fence 软件接口-------------sw_sync_timeline和sw_sync_pt

Android在提供sync框架的同时,也提供了软件使用sync的接口,如果硬件没有提供sync的功能,可以使用软件sync接口。
软件sync接口在sync框架的基础上进行了封装,主要的两个数据结构如下:
struct sw_sync_timeline {  
	struct  sync_timeline   obj;  
	u32         value;  
};  
   
struct sw_sync_pt {  
	struct sync_pt      pt;  
	u32         value;  
};  

sw_sync_timeline和sw_sync_pt相当简单,只不过是在原本的sync_timeline和sync_pt基础上多加了一个u32的value而已,
正是通过这个value的比较完成了同步。当sw_sync_pt.value <= sw_sync_timeline.value时,对应的sync_pt就被singaled。
另外还添加了几个新的api:
struct sw_sync_timeline *sw_sync_timeline_create(const char *name);  
void sw_sync_timeline_inc(struct sw_sync_timeline *obj, u32 inc);  
struct sync_pt *sw_sync_pt_create(struct sw_sync_timeline *obj, u32 value);  

在创建一个sync_fence 时,会把参数中的sync_pt加入sync_fence的sync_pt链表,然后判断该sync_pt是否处于active状态,如果
是加入sync_timeline的active sync_pt链表;接着会立即判断所属的sync_fence是否处于非active态,如果处于非active态就把
waiter_list_header中的sync_fence_waiter移动到signaled_waiters list中去,遍历signaled_waiters,把每个waiter移除list,
并call他们的callback。

在调用sw_sync_timeline_inc增加sw_sync_timeline.value时会遍历activa_list_header,把被判断为处于signaled状态的sync_pt从
activa_list_header中移到signaled_list中去。遍历signaled_list,每个处于signaled状态的pt都要call一次sync_fence_signal_pt,  
,判断它所属的fence是否需要被signal。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值