图像命令流

graphic commands flow

上图展示Spice的基础架构和客户机到客户端图像命令数据流,基于使用libspice的QEMU。 libspice可以在其他VDI兼容的主机程序上使用。

图像命令数据流开始于用户程序请求系统的图像引擎执行渲染操作。图像引擎把命令发给QXL驱动,QXL驱动把系统命令转化为QXL命令并且把它们加入到命令环中。命令环能调整自己的内存大小。libspice从命令环中获取QXL命令并把它们加入到图像命令树,图像命令树包含了将会重新生成显示内容的命令集(即需要局部刷新图像的信息,包括位置,刷新内容等)。这棵树用于libspice优化命令传输过程,即去除隐含在其他命令中的冗余命令。命令树也用于视频流检测。libspice同时维护一个发送给客户端命令的队列,用于更新客户端的显示。当一个命令从队列中提取出来发送给客户端时,它被转换为Spice协议消息。同时命令从命令树和发送队列中被移除。当libspice不需要某个命令时,它被转移到释放环中,驱动使用这个环来释放命令资源。当客户端收到图像命令时,它将使该命令来更新其显示。