Spice代码分析(三)——red_worker: red_init
2015-07-05 10:17
225 查看
Spice 的图形子系统是最Spice最核心也是最复杂的一块,它不像其他的几个子系统由spice server 主进程来处理,而是有一个单独的线程处理,而且与主进程是并行运行的,负责这个处理的线程就是Red worker。具体来说,redworker负责以下的处理:
1) 处理QXL设备命令(如画,更新,光标处理等);
2) 处理从Dispatcher接收到的消息;
3) 显示和光标的通道创建、维护和通信;
4) 图像压缩(用quic, lz和 glz);
5) 视频流处理;
6) 用Cario或OpenGL渲染图形——画布(canvas)和表面(surface)等;
7) 命令环(ring)的操作;
8) 与spice client的显示和光标通道的信息交互
Red worker有很多处理,接下来阅读一些主要的方法,今天先看看red_init:
1) 处理QXL设备命令(如画,更新,光标处理等);
2) 处理从Dispatcher接收到的消息;
3) 显示和光标的通道创建、维护和通信;
4) 图像压缩(用quic, lz和 glz);
5) 视频流处理;
6) 用Cario或OpenGL渲染图形——画布(canvas)和表面(surface)等;
7) 命令环(ring)的操作;
8) 与spice client的显示和光标通道的信息交互
Red worker有很多处理,接下来阅读一些主要的方法,今天先看看red_init:
1.1Red_worker.c: red_init
static void red_init(RedWorker *worker, WorkerInitData *init_data) | |
dispatcher_get_recv_fd | 从dispatcher那里拿来recv_fd作为red_worker之后可以发送消息给dispatcher的套接字(如在red_worker创建完display channel就通过这个套接字发消息给了dispatcher) |
register_callbacks | 注册一系列的回调函数用以处理dispatcher发过来的消息,dispatcher用dispatcher_send_message发送消息,每个消息都有类型,对应到具体的回调函数 |
ring_init(&worker->current_list) | 初始化维护当前display上要画的Drawable对象的环 |
image_surface_init(worker) | 初始化Image surface函数指针 |
drawables_init | 初始化1000个Drawable对象 |
cursor_items_init | 初始化100个光标对象 |
red_init_streams | 初始化50个流媒体缓冲区 |
worker->poll_fds[0].fd = worker->channel; worker->poll_fds[0].events = POLLIN; worker->watches[0].watch_func = handle_dev_input; | 设置第一个网络事件监听dispatcher发送过来的时间,处理函数为 handle_dev_input |
red_memslot_info_init | 初始化内存槽相关参数 |
spice_timer_queue_create | 创建定时器队列,之后在处理视频流的地方要用到 |
write_message | 向Dispatcher发送 RED_WORKER_MESSAGE_READY消息,告知red_worker初始化完成 |
相关文章推荐
- Java获取的一天、本星期、这个月、本季度、一年等 开始和结束时间
- .Net3.5 和 VS2008 中的 Asp.Net Ajax
- spice server qxl red_worker_main()代码分析
- 《C语言及程序设计》程序阅读——链表初步
- Perl Learning 4 Input & Output
- c++ primer 学习笔记 3 变量与基本类型
- Asp.Net 分页显示控件
- Java中Runnable和Thread的区别
- spice 图像压缩算法相关代码逻辑流程
- (转)phpmyadmin操作技巧:如何在phpmyadmin里面复制mysql数据库?
- 数据预处理-PDB文件处理代码
- Python编写算法导论基本算法
- Asp.Net Ajax的两种基本开发模式
- 取整的一些方法总结(java)
- Asp.Net 用户验证(自定义IPrincipal和IIdentity)
- c++读书笔记——类的定义
- C# 理解泛型
- 读取生产环境go语言的最佳实践展示
- 在django template中设置临时变量
- 30、Java中Set集合之HashSet、TreeSet和EnumSet