Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243722
  • 博文数量: 32
  • 博客积分: 2033
  • 博客等级: 大尉
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-10 01:53
文章分类
文章存档

2011年(2)

2010年(16)

2009年(13)

2008年(1)

我的朋友

分类: LINUX

2010-04-01 20:18:18

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) |
0

上一篇:graphic camera

下一篇:Xorg 相关

给主人留下些什么吧!~~

ailantian2010-07-13 20:19:55

额,补充一下,这里说的线程的问题,根本问题是信号的问题,因为Xorg整个是信号驱动的,但是linux下面信号是按线程来发送的,如果一个线程不处理,另外的线程也会去处理它。这个就是问题所在。现在不做xorg了,写出来。所以不要引入线程,除非自己能保证不破坏xorg原有的执行流程。也就是要好好处理自己线程里面的信号。具体可以看kernel里面信号的发送机制。信号时pending到进程组里面的。