void SurfaceFlinger::signalTransaction() {
mEventQueue.invalidate();
}
void SurfaceFlinger::signalLayerUpdate() {
mEventQueue.invalidate();
}
void SurfaceFlinger::signalRefresh() {
mEventQueue.refresh();
}
这三个函数分别代表
signalTransaction :事务变化(如增加window window大小变化等)
signalLayerUpdate : layer发生变化,主要发生在queuebuffer的时候
signalRefresh: 表示需要刷新屏幕 ,一般为处理完事务发现需要重新绘制的时候触发
从上面可以看到signalLayerUpdate 和signalTransaction 实现是一样的
void MessageQueue::invalidate() {
#if INVALIDATE_ON_VSYNC
mEvents->requestNextVsync();
#else
mHandler->dispatchInvalidate();
#endif
}
void MessageQueue::refresh() {
#if INVALIDATE_ON_VSYNC
mHandler->dispatchRefresh();
#else
mEvents->requestNextVsync();
#endif
}
在来看下refresh 和 invalidate的实现,如果INVALIDATE_ON_VSYNC 为真,则 invalidate在vsync到来时触发,否则refresh,在vsync时候触发, 对于非vsync触发的时间,直接使用handler抛出