surfaceflinger再次总结

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抛出

你可能感兴趣的:(surfaceflinger再次总结)