上个小节说明了HWC模块的加载等操作,并且也说明了HWC模块主要用于产生vsync信号,现在的问题是, vsync信号是如何产生的呢? 又是如何传输到SurfaceFlinger 中,处理的呢?在上面的论述中,HWComposer 的构造方法在加载完FB模块打开设备文件以及加载HWC模块之后,会注册vsync信号,
mHwc->registerProcs(mHwc, &mCBContext->procs);
HWComposer_hwc1.h中的mCBContext变量申明如下,
cb_context* mCBContext;
是cb_context 的结构体,该结构体定义如下,
HWComposer_hwc1.cpp中的cb_context结构体定义如下,
struct HWComposer::cb_context {
struct callbacks : public hwc_procs_t {
// these are here to facilitate the transition when adding
// new callbacks (an implementation can check for NULL before
// calling a new callback).
void (*zero[4])(void);
};
callbacks procs;
HWComposer* hwc;
};
里面有2个变量,一个指向HWComposer对象,1个结构体callbacks,这个结构体会传给HAL层的HWC模块,这样,当有vsync信号时,就可以通过这个结构体进行回调。callbacks由继承自 hwc_procs_t, hwcomposer.h