全部博文(389)
分类: 虚拟化
2015-03-06 10:07:22
spice display_channel当然还是从qemu开始.
spice-core.c -> qemu_spice_init() -> spice-display.c -> qemu_spice_create_one_update() (从这里开始产生QXLCommand)
一系列的构造生产 SpiceUpdate(display update), 然后丢给队列传给 red_worker
QTAILQ_INSERT_TAIL(&ssd->updates, update, next);
red_worker.c -> flush_display_commands-> red_process_commands() -> red_process_drawable 来消费这些ext_cmd
这里的判断需要多看上面提到qemu生成SpiceUpdate的code.
开源c里面的marshall大部分是构造的意思(create)
display_channel_send_item -> marshall_qxl_drawable -> red_lossy_marshall_qxl_drawable -> red_lossy_marshall_qxl_draw_copy -> red_channel_client_init_send_data -> fill_bits() -> red_compress_image