Xorg开发军规
写的很吓人,目前只有两条
1:所有的操作不要block,要小心的处理锁的问题,最好不要锁。
2:不要引入多线程,除非你对Xorg的框架和运转流程很熟悉,并且确切的知道kernel里面是怎么处理线程的
关于Xorg扩展的修改和添加。
之前08年为了做多媒体硬件加速。
kernel里面 hack了一下增加了一个虚拟设备,xserver里面加了扩展,libxext里面也加了扩展,gstreamer的sink里面也加了扩展。
当时是作为第三备选方案的。以便可以让gstreamer可以使用专用硬件的加速。
当时xvideo是作为第一方案的。
当前因为需要提供测试方案,扩展libx11的需求,
分几大部分。
1:扩展协议
2:扩展libx11
3:扩展xserver
4:测试程序。
花了差不多一整天的时间,都调通了,可以正常运行。
在核心的x11协议里面做扩展比在xorg的扩展里面(比如xext)扩展协议要复杂一些。
限制更多。
测试程序看起来如下
#include
#include
int main(int argc,char**argv)
{
Display *d;
/* default DISPLAY */
d = XOpenDisplay(NULL);
unsigned int topxid,whoid,widgetid;
(void)XQueryWindowXid(d,atoi(argv[1]),atoi(argv[2]),&topxid,&whoid,&widgetid);
printf("topxid 0x%x whoid %x widgetid %x\n",topxid,whoid,widgetid);
(void)XCloseDisplay(d); /* and close the display */
return 0;
}
不过有如下告诫
1:不要扩展libx11,这样不利于维护,开源社区的变化是很快的,不要采用私有
的方案,尽量复用开源的方案。
2:东西不要写的太死。定协议一定要遵循开源的标准,(需要对社区非常熟悉)
3:尽量使用已有的机制,比如xrequest和xevent。
阅读(1815) | 评论(1) | 转发(0) |