之前开发base是25/29,拿到32的代码,发现alarm.c and alarm-dev.c疯狂,后者提供misc设备用于接收userspace的ioctl命令,前者文件里实现对具体定时器的维护。
android alarm同时维护5中类型闹钟,每个类型有个queue,这个结构比较有意思,如果看过我之前写过的hrtimer实现,你会发现二者联系颇紧。它内部有关hrtimer定时器,有个rb-tree.在alarm-dev.c文件里新添加了alarm结构体,比较有趣的是alarm结构体有个回调function.就是说,可以把这部分代码整理下,export出去给驱动作为alarm定时器来用。
然而这个地方实现让人哭笑不得。
红黑树本来是用在排序的,而大量的alarm真是一个良好的使用环境。看到红黑树以及alarm结构时,猜测上层的alarm逻辑会修改,反倒底层去维护。原本上层对多个设置的闹钟会有维护的,只把最近过期的设置下去。现在看来底层都维护了吧。。。事实上,每个类型红黑树中只有一个alarm。
其实alarm部分的重点在于suspend/resume的处理,关机闹钟的处理等。下篇文章再分析。
阅读(2428) | 评论(1) | 转发(0) |