Android 4.2 JellyBean Graphic Component -- SurfaceFlinger 2

本文详细介绍了Android系统中SurfaceFlinger与EventThread的工作流程。重点解释了如何通过MessageQueue建立两者之间的联系,以及EventThread如何通过回调通知SurfaceFlinger进行事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3. SurfaceFlinger和EventThread的工作流程说明

在SF的readyToRun函数中,将通过MesssageQueue的setEventThread函数建立SF和ET的关系。看看代码吧:
void MessageQueue::setEventThread(const sp<EventThread>& eventThread)
{
mEventThread = eventThread;
mEvents = eventThread->createEventConnection();
mEventTube = mEvents->getDataChannel();
mLooper->addFd(mEventTube->getFd(), 0, ALOOPER_EVENT_INPUT,
MessageQueue::cb_eventReceiver, this);
}
也就是说,当EventThread有什么鸟事的时候,都会通过cb_eventReceiver回调到SF线程。
注意:JB以前,Android老是喜欢用pipe作为进程间通信的手段,现在改成socketpair了。这是一个很大的变化。所以,会网络编程的同学可以happy一下了。不会的淫,也无所谓,反正是把socket当pipe来使,都是IPC通信手段,你管它用得是什么呢!
EventThread的requestSync被调用后,会触发EventThread的线程通过Connection发送一个消息给SF所在的线程,即刚才那个cb_eventReceiver被调用,图4是此后的工作流程。(SF系统现在变得也是磨磨唧唧了,不懂POSIX编程屌丝们,你们无论如何得花点功夫研究了。)



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值