hwc_procs_t,hwc_display_contents_1_t 理解

typedef void*hwc_display_t;//代表一个显示,尤其是EGLDisplay对象,

typedef void*hwc_surface_t;//代表一个surface,典型是一个EGLSurface对象


* hwc_display_contents_1_t::flagsvalues

*/

enum {

/*

* HWC_GEOMETRY_CHANGED is set bySurfaceFlinger to indicate that the list

* passed to (*prepare)() haschanged by more than just the buffer handles

* and acquire fences.

*/

HWC_GEOMETRY_CHANGED = 0x00000001,

};//代表一个diaplay显示内容的标识的值,HWC_GEOMETRY_CHANGED是由SurfaceFlinger设置的,

设置值代表传到(*prepare)()显示列表已经更改,其中buffer句柄和acquirefences也改变了。

uint32_t flags;

size_t numHwLayers;

hwc_layer_1_t hwLayers[0];

}hwc_display_contents_1_t;//ayer列表将要在显示器上合成,在list中的buffer的句柄是唯一的,如果numHwLayers值为0,则所有的合成由SurfaceFlinger来完成。

typedef struct hwc_procs {

* (*invalidate)() triggers ascreen refresh, in particular prepare and set

* will be called shortly afterthis call is made. Note that there is

* NO GUARANTEE that the screenrefresh will happen after invalidate()

* returns (in particular, it couldhappen before).

* invalidate() is GUARANTEED TONOT CALL BACK into the h/w composer HAL and

* it is safe to call invalidate()from any of hwc_composer_device

* hooks, unless noted otherwise.

*/

void (*invalidate)(const structhwc_procs* procs); //(*invalidate)() 触发屏幕的刷新,尤其是prepareset将要立即调用时调用,但是当invalidate()返回时并不能保证屏幕刷新,但是在返回前可以确保其刷新。invalidate() 确保不会在h/w composer HALcallback,在无特殊情况,在hwc_composer_device

* hooks中调用invalidate()是安全的。

void (*vsync)(const structhwc_procs* procs, int disp, int64_t timestamp); //(*vsync)() vsyncevent 被接收时,被h/wcomposer HAL 调用;HWC_EVENT_VSYNCdisplay中使能(参考hwc_event_control)。"disp"参数标明为了哪一displaysync event "timestamp"参数为至sync事件发生至结束多少时间单位为nsvsync()h/wcomposer HAL中不会调用返回,vsync()被一个线程调用,HAL_PRIORITY_URGENT_DISPLAY会有尽可能少的延时,通常会少于0.5ms。当hwc_composer_device.set(...,0, 0, 0) (screen off)关屏的时候,同时HWC_EVENT_VSYNC已经被使能,则会出现一个错误(不报错)。在vsnc事件进程中可以随时启停,但是不应该出现系统崩溃或则其他问题。


void (*hotplug)(const struct hwc_procs*procs, int disp, int connected);//(*hotplug)()h/w composerHAL中,当一个显示设备连接或则断开的时候终断。主显示一直都处于连接装态,所以此间hotplug不会被调用。disp是当前事件中的显示类型,connected参数类型标识显示状态,连接为1,反之为0hotplug()可以在h/w composer 访问刷新率以及分辨率时调用返回。与此同时h/wcomposer在进程中调用返回的时候,也可以调用其他线程。h/wcompose必须进行序列化调用返回hotplug,每次只能一个线程被调用。在h/wcomposer 使用HWC_DEVICE_API_VERSION_1_0.时,callback0.

你可能感兴趣的:(hwc_procs_t,hwc_display_contents_1_t 理解)