一种图形合成方法、窗口设置方法及系统
技术领域
本申请涉及通信技术领域,尤其涉及一种图形合成方法、窗口设置及系统。
背景技术
云操作系统又称云OS,是以云计算、云存储技术作为支撑的操作系统。云操作系统因其能够整合海量的计算能力并能够提供强大的资源调配能力,未来将得到更广泛的应用。
云操作系统既可以用于传统的桌面系统设备(如PC)又适用于移动设备。基于云操作系统的应用或服务,以及基于传统操作系统的应用或服务,将会在云操作系统框架内运行,这就要求云操作系统框架能够将基于不同操作系统的应用或服务进行融合。
目前,针对在一种操作系统框架内,基于不同操作系统的应用或服务如何在图形合成层面融合,目前尚未有相应的解决方案。
申请内容
本申请实施例提供了一种图形合成方法及系统,用以在图形处理方面实现不同操作系统间的兼容。
本申请实施例提供的一种图形合成方法,包括:
第二图形合成器向第一图形合成器发送图形缓冲对象标识;其中,所述第一图形合成器为第一子系统中的图形合成器,所述第二图形合成器为第二子系统中的图形合成器;
第一图形合成器根据所述图形缓冲对象标识所指向的图形数据存储单元中存储的图形数据进行图形合成。
优选地,第二图形合成器向第一图形合成器发送图形缓冲对象标识,包括:
第二图形合成器从图形缓冲对象队列中取出第一图形缓冲对象,创建与所述第一图形缓冲对象对应的第二图形缓冲对象;其中,所述第二图形缓冲对象为第一图形合成器中的第三图形缓冲对象在第二图形合成器中的代理;
第二图形合成器通过所述第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器中的第三图形缓冲对象。
其中,第二图形合成器通过所述第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器,包括:
第二图形合成器将所述第一图形缓冲对象的标识映射为所述第二图形缓冲对象的标识;
第二图形合成器将所述第二图形缓冲对象的标识发送给第一子系统图形合成器。
优选地,还包括:第一图形合成器创建与所述第一图形缓冲对象对应的第三图形缓冲对象。
优选地,还包括:
第一图形合成器完成所述合成后,向第二图形合成器返回所述第二图形缓冲对象的标识;
第二图形合成器根据返回的所述第二图形缓冲对象的标识,将所述第二图形缓冲对象对应的第一图形缓冲对象放回所述图形缓冲对象队列。
优选地,图形数据存储单元中存储的图形数据是第二子系统的应用程序处理得到的。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请实施例提供的另一种图形合成方法,包括:
第一图形合成器接收第二图形合成器发送的图形缓冲对象标识;其中,所述第一图形合成器为第一子系统中的图形合成器,所述第二图形合成器为第二子系统中的图形合成器;
第一图形合成器根据所述图形缓冲对象标识所指向的图形数据存储单元中存储的图形数据进行图形合成。
优选地,第一图形合成器接收第二图形合成器发送的图形缓冲对象标识,包括:
所述第一图形合成器通过第二图形缓冲对象接收第二图形合成器发送的第一图形缓冲对象的标识;其中,所述第二图形缓冲对象是第二图形合成器从图形缓冲对象队列中取出第一图形缓冲对象时创建的,所述第二图形缓冲对象与所述第一图形缓冲对象对应,所述第二图形缓冲对象为第一图形合成器中的第三图形缓冲对象在第二图形合成器中的代理。
进一步地,还包括:第一图形合成器创建与所述第一图形缓冲对象对应的第三图形缓冲对象。
进一步地,还包括:第一图形合成器完成所述合成后,向第二图形合成器返回所述第二图形缓冲对象的标识,以使第二图形合成器根据返回的所述第二图形缓冲对象的标识,将所述第二图形缓冲对象对应的第一图形缓冲对象放回所述图形缓冲对象队列。
优选地,图形数据存储单元中存储的图形数据是第二子系统的应用程序处理得到的。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请实施例提供的一种图形合成系统,包括:第一图形合成器和第二图形合成器,所述第一图形合成器为第一子系统的图形合成器,所述第二图形合成器为第二子系统的图形合成器;
所述第二图形合成器,用于向第一图形合成器发送图形缓冲对象标识;
所述第一图形合成器,用于根据所述图形缓冲对象标识所指向的图形数据存储单元中存储的图形数据进行图形合成。
优选地,所述第二图形合成器具体用于:从图形缓冲对象队列中取出第一图形缓冲对象,创建与所述第一图形缓冲对象对应的第二图形缓冲对象,其中,所述第二图形缓冲对象为第一图形合成器中的第三图形缓冲对象在第二图形合成器中的代理;以及
通过所述第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器中的第三图形缓冲对象。
其中,第二图形合成器具体用于:
将所述第一图形缓冲对象的标识映射为所述第二图形缓冲对象的标识;
将所述第二图形缓冲对象的标识发送给第一子系统图形合成器。
优选地,第一图形合成器还用用于:创建与所述第一图形缓冲对象对应的第三图形缓冲对象。
优选地,第一图形合成器还用于:完成所述合成后,向第二图形合成器返回所述第二图形缓冲对象的标识;
第二图形合成器还用于:根据返回的所述第二图形缓冲对象的标识,将所述第二图形缓冲对象对应的第一图形缓冲对象放回所述图形缓冲对象队列。
优选地,图形数据存储单元中存储的图形数据是第二子系统的应用程序处理得到的。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请的上述实施例中,第一子系统的第一图形合成器接收第二子系统的第二图形合成器发送的图形缓冲对象标识,由于该图形缓冲对象标识指向用于存储图形数据的图形数据存储单元,因此第一图形合成器在进行图形合成时,能够根据接收到的图形缓冲对象标识,对所述图形缓冲对象标识所指的图形数据进行合成,从而实现了在图形合成层面上不同子系统间的兼容。
本申请实施例还提供了一种窗口设置方法及系统,用以在图形处理方面实现不同操作系统间的兼容。
本申请实施例提供的一种窗口设置方法,包括:
第二图形合成器向第一图形合成器发送窗口属性信息;其中,所述第一图形合成器为第一子系统中的图形合成器,所述第二图形合成器为第二子系统中的图形合成器;
第一图形合成器根据所述窗口属性信息,设置相应窗口。
优选地,第二图形合成器向第一图形合成器发送窗口属性信息,包括:
第二图形合成器根据待设置窗口确定对应的第一图层对象;
第二图形合成器通过与所述第一图层对象对应的第二图层对象将所述待设置窗口的窗口属性信息发送给第一图形合成器中第三图层对象;其中,所述第二图层对象为所述第三图层对象在第二图形合成器中的代理。
其中,第二图形合成器通过与所述第一图层对象对应的第二图层对象将所述待设置窗口的窗口属性信息发送给第一图形合成器中第三图层对象之前,还包括:
第二图形合成器根据接收到的第一事件,创建第一图层对象和第二图层对象;
第一图形合成器根据所述第一事件,创建与所述第一图层对象或所述第二图层对象对应的第三图层对象。
其中,所述第一事件包括以下事件中的一种或多种:
第二子系统的应用程序被启动的事件;
第二图形合成器为第二子系统的应用程序创建图层的事件。
优选地,所述窗口属性信息为第二子系统的应用程序所对应的窗口属性信息。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请实施例提供的另一种窗口设置方法,包括:
第一图形合成器接收第二图形合成器向发送的窗口属性信息;其中,所述第一图形合成器为第一子系统中的图形合成器,所述第二图形合成器为第二子系统中的图形合成器;
第一图形合成器根据所述窗口属性信息,设置相应窗口。
优选地,第一图形合成器接收第二图形合成器向发送的窗口属性信息,包括:
第一图形合成器通过与第一图层对象对应的第二图层对象接收第二图形合成器向发送的窗口属性信息,其中,所述第二图层对象与第一图层对象对应,所述第二图层对象为所述第三图层对象在第二图形合成器中的代理,所述第一图层对象是第二图形合成器根据待设置窗口确定的。
进一步地,第一图形合成器通过与第一图层对象对应的第二图层对象接收第二图形合成器向发送的窗口属性信息之前,还包括:
第一图形合成器根据第一事件,创建与所述第一图层对象或所述第二图层对象对应的第三图层对象。
其中,所述第一事件包括以下事件中的一种或多种:
第二子系统的应用程序被启动的事件;
第二图形合成器为第二子系统的应用程序创建图层的事件。
优选地,所述窗口属性信息为第二子系统的应用程序所对应的窗口属性信息。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请实施例提供的另一种窗口设置系统,包括:第一图形合成器和第二图形合成器,所述第一图形合成器为第一子系统的图形合成器,所述第二图形合成器为第二子系统的图形合成器;
第二图形合成器,用于向第一图形合成器发送窗口属性信息;
第一图形合成器,用于根据所述窗口属性信息,设置相应窗口。
优选地,所述第二图形合成器具体用于:
根据待设置窗口确定对应的第一图层对象;
器通过与所述第一图层对象对应的第二图层对象将所述待设置窗口的窗口属性信息发送给第一图形合成器中第三图层对象;其中,所述第二图层对象为所述第三图层对象在第二图形合成器中的代理。
进一步地,第二图形合成器还用于:根据接收到的第一事件,创建第一图层对象和第二图层对象;
第一图形合成器还用于:根据所述第一事件,创建与所述第一图层对象或所述第二图层对象对应的第三图层对象。
其中,所述第一事件包括以下事件中的一种或多种:
第二子系统的应用程序被启动的事件;
第二图形合成器为第二子系统的应用程序创建图层的事件。
优选地,所述窗口属性信息为第二子系统的应用程序所对应的窗口属性信息。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
本申请的上述实施例中,第二图形合成器向第一图形合成器发送窗口属性信息,第一图形合成器根据所述窗口属性信息,对相应窗口进行设置,从而实现了在窗口显示层面上不同子系统间的兼容。
附图说明
图1为本申请实施例所适用的操作系统框架示意图;
图2为本申请实施例提供的图形合成流程示意图;
图3为本申请实施例提供的窗口设置流程示意图;
图4为本申请实施例中的Android图形对象与YunOS图形对象示意图;
图5为本申请实施例提供的图形处理架构示意图;
图6为本申请实施例中的窗口属性传递示意图;
图7为本申请实施例提供的图形合成系统结构示意图;
图8为本申请实施例提供的窗口更新系统结构示意图。
具体实施方式
为了在新的移动操作系统框架内更好地兼容传统的移动操作系统,为用户提供更加自然平滑的体验过渡,本申请实施例提供了在新的移动操作系统框架内,在图形渲染层面上的融合和统一,能够使新的移动操作系统更好地兼容面向传统移动操作系统开发的应用程序,为用户提供无缝的双系统用户体验。
下面结合附图对本申请实施例进行详细描述。
参见图1,为本申请实施例适用的操作系统框架示意图。以YunOS作为第一操作系统,Android为第二操作系统为例,图1示出了在YunOS框架内的双系统兼容架构。
如图1所示,YunOS框架中包括Host与Guest两个子系统,其中,YunOS即为Host子系统,Android即为Guest子系统,两个子系统通过container(容器)技术隔离。该框架内的硬件抽象层(Hardware Abstraction Layer,HAL)提供了图形显示等方面的接口和驱动服务。
Host子系统中的Glibc,即C运行库,是linux中最底层的API(ApplicationProgramming Interface,应用程序编程接口)。Guest子系统中的Bioric,是Android的linux内核库。
Libhybris为兼容层,能够使基于Glibc的操作系统重用现有的Android的驱动(driver)服务;在图形(Graphics)处理方面,libhybris还实现了EGL platform。EGLplatform这是一套后台(backend)无关的遵循EGL接口的图形平台,以及多个后台(backend)实现。
Gralloc模块位于硬件抽象层中,封装了对帧缓冲区的所有访问操作。
Guest子系统中的InputManageerService(输入管理模块)主要用于对输入事件进行监控和管理。
SurfaceFlinger是Guest子系统的图形合成器;Wayland Compositor(或Weston)是Host子系统的图形合成器,其中,Weston是Wayland Compositor的参考实现。
本申请实施例中,Guest子系统的图形合成器与Host子系统的图形合成器之间可采用Wayland协议进行通信。Wayland协议定义了如何与内核通信,如何与客户端(client)通信;Wayland复用了所有Linux内核的图形、输入输出技术。
上述架构中,由于YunOS与Android分别作为Host子系统与Guest子系统通过container技术隔离,从而减小了YunOS对Android的依赖,并保证Android的可剥离性。另一方面,本申请实施例中Andriod的图形合成器与YunOS的图形合成器之间可采用Wayland协议进行通信,使得Android中的图形系统架空,并桥接到YunOS的图形系统,实现了双系统的统一合成渲染,从而提供了较好地双系统兼容性,又实现了双系统的无缝用户体验。
需要说明的是,上述系统架构仅以YunOS和Andriod为例进行说明,对于其他类型的操作系统,也可基于上述原理实现双系统在图形合成层面的兼容以及有效融合。
下面结合图2,对本申请实施例提供的图形合成流程进行详细描述。
参见图2,为本申请实施例提供的图形合成流程示意图。该流程可在采用移动操作系统的设备上执行,该设备可以是移动终端等电子设备。
在描述图2所示的流程之前,首先对该流程中所使用的一些术语进行说明。
基于上述图1所示的架构,第一子系统和第二子系统是指两种不同的操作系统框架的子系统。第一子系统可以是Host子系统,第二子系统可以是Guest子系统。具体地,第一子系统可以是YunOS,第二子系统可以是指传统操作系统,比如Andriod。第一子系统图形合成器称为第一图形合成器,第二子系统系统图形合成器称为第二合成器。
基于第一操作系统的应用程序,是面向第一操作系统开发的应用程序;基于第二操作系统的应用程序,是面向第二操作系统开发的应用程序。
图2所示的流程描述了在图形合成层面由第一子系统合成器执行图形合成的过程。其中,该操作系统框架内包含第一子系统和第二子系统,第一子系统可以是Host子系统,第二子系统可以是Guest子系统。以第一子系统或Host子系统为YunOS,第二子系统或Guest子系统为Android作为例子,该流程可基于图1所示的框架实现。
如图2所示,本申请实施例提供的图形合成流程可包括如下步骤:
步骤201:第二图形合成器向第一图形合成器发送图形缓冲对象标识。
其中,基于图1所示的架构,这里的图形缓冲对象为GraphicBuffer,图形缓冲对象的标识可以是GraphicBuffer的句柄(handle)。句柄是一个标识符,通常为一个整数值,用来唯一标识一个对象或实例等。一个图形缓冲对象的句柄用来唯一标识该图形缓冲对象。
图形缓冲对象的标识指向图形缓冲区中的数据存储单元,该数据存储单元用于存储图形数据,该图形数据是第二子系统的应用程序处理得到的,比如是第二子系统的应用程序渲染的。
在一些实施例中,第二图形合成器在获取到第二图形合成器中的第一图形缓冲对象时,不是像现有技术一样由该第二图形合成器进行合成,而是创建与当前获取的第一图形缓冲对象对应的且能够被第一图形合成器识别的第二图形缓冲对象,所述第二图形缓冲对象为第一图形合成器中的第三图形缓冲对象在第二图形合成器中的代理。第二图形合成器通过第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器中的第三图形缓冲对象。
更具体地,第二图形合成器通过所述第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器时,将当前获取的第一图形缓冲对象的标识映射为该第二图形缓冲对象的标识,并将该第二图形缓冲对象的标识发送给第一图形合成器,以使第一图形合成器执行合成操作。其中,第二图形合成器创建的第二图形缓冲对象是第一图形合成器中的第三图形缓冲对象在第二图形合成器中的代理,其指向该第二图形合成器当前获取的用于存储图形数据的图形数据存储单元。
在一些实施例中,当第一图形合成器取出第一图形缓冲对象时,第二图形合成器创建与第一图形缓冲对象对应的第二图形缓冲对象,第一图形合成器创建对应的第三图形缓冲对象。其中,第二图形缓冲对象时第三图形缓冲对象在第二图形合成器中的代理。
需要说明的是,上述流程中使用的“第一”、“第二”和“第三”并不特征某个或某些对象,只是为了便于理解而进行区分。
其中,第二图形缓冲对象可以被第一图形合成器识别。
步骤202:第一图形合成器根据所述图形缓冲对象标识所指向的图形数据存储单元中存储的图形数据进行图形合成。
基于上述步骤201中,第二图形合成器向第一图形合成器发送第二图形缓冲对象的标识的方案,该步骤中,第一图形合成器接收到第二图形合成器发送的第二图形缓冲对象的标识后,可根据该第二图形缓冲对象的标识所指向的用于存储图形数据的图形数据存储单元,使用对图形数据存储单元进行图形合成。
具体实施时,第一图形合成器可在接收到第二图形缓冲对象的标识后,确定合成顺序(z-order),并将该第二图形缓冲对象标识以及确定出的合成顺序信息发送给硬件兼容层,硬件兼容层根据该标识获取对应的图形数据,并按照合成顺序进行处理,并通过显示器进行显示。
根据以上流程,本申请实施例在具体实施时,第二子系统的应用程序作为生产者,可从该应用程序对应的图形缓冲对象队列(如buffer队列)中取出图形缓冲对象(如buffer)进行渲染,并将渲染后的图形缓冲对象放回该队列。在上述流程的步骤201中,第二图形合成器作为消费者,可按照设定周期,从该队列中取出图形缓冲对象。在上述流程的步骤202之后,即第一图形合成器根据第二图形缓冲对象标识完成所述合成后,进一步地,可向第二图形合成器返回第二图形缓冲对象的标识,第二图形合成器根据该标识,将与该第二图形缓冲对象对应的第一图形缓冲对象(或者说第二图形缓冲对象标识所指向的第一图形缓冲对象)放回上述队列。
可以看出,当运行第二子系统应用程序时,第二子系统(Guest子系统)负责该应用程序的图形渲染,在图形合成方面,第二图形合成器与第一图形合成器之间通过交互图形缓冲对象的标识,使图形合成操作由第一子系统(Host子系统)的第一图形合成器执行,实现了在图形渲染合成层面上的多系统兼容。
综上所述,本申请实施例中,第一子系统的第一图形合成器接收第二子系统的第二图形合成器发送的图形缓冲对象的标识,由于该图形缓冲对象的标识指向第二子系统的应用程序所对应的图形数据,因此第一图形合成器在进行合成时,能够根据接收到的图形缓冲对象的标识,对该标识所指的图形数据进行合成,从而在云操作系统框架内实现了在图形合成层面对第二子系统的应用程序的兼容,对于第二子系统的应用程序,可以使得其用户界面在第一子系统框架内进行合成处理。
参见图3,为本申请实施例提供的窗口更新流程。
本申请实施例中,当第二子系统的应用程序(以下为描述方便将该应用程序称为应用程序A)被启动时,第二图形合成器可获取应用程序A被启动的事件,基于该事件,第二图形合成器创建应用程序A在第二子系统(即Guest子系统)中的第一图层对象以及对应的第二图层对象,第一图形合成器根据该事件在第一图形合成器中创建与第一图层对象或第二图层对象对应的第三图层对象。其中,第二图层对象是第三图层对象在第二图形合成器中的代理,第二图层对象能够被第一图形合成器识别。
在另外一些场景下,比如,在需要为应用程序A创建图层的情况下,第二图形合成器可获取到为应用程序A创建图层的事件,并可基于该事件为应用程序A在第二图形合成器中创建第一图层对象,并创建对应的第二图层对象,第一图形合成器可根据该事件在第一图形合成器中创建第三图层对象,该第二图层对象是第三图层对象在第二图形合成器中的代理。
进一步地,当应用程序A被关闭或者应用程序A的第一图层对象被删除时,第二图形合成器可删除相应的第二图层对象。
如图3所示,本申请实施例提供的窗口更新流程可包括如下步骤:
步骤301:第二图形合成器向第一图形合成器发送窗口属性信息。
其中,该窗口属性信息为第二子系统的应用程序所对应的窗口属性信息。
该步骤中,第二图形合成器确定待设置的窗口,以及该窗口对应的图层,并可根据该窗口所对应的图层,获取对应的第一图层对象,并通过与第一图层对象对应的第二图层对象将所述待设置窗口的窗口属性信息发送给第一图形合成器中第三图层对象。
步骤302:第一图形合成器根据该窗口属性信息,设置相应窗口。
在步骤302中,第一图形合成器可根据通过第二图层对象接收窗口属性信息,由于第二图层对象与第一图形合成器中的第三图层对象对应,因此第一图形合成器可确定该窗口属性信息所对应的图层,进而确定出对应的窗口,并根据该窗口属性信息对该窗口进行设置。
通过以上描述可以看出,本申请的上述实施例中,第二图形合成器向第一图形合成器发送窗口属性信息,第一图形合成器根据所述窗口属性信息,对相应窗口进行设置,从而实现了在窗口显示层面上不同子系统间的兼容。
为了更清楚地理解本申请上述实施例,下面以在YunOS框架内,针对基于Android的应用程序,描述在图形处理层面实现兼容的方案。
以下实施例所描述的方案基于图1所示的YunOS框架实现,图形合成流程以及窗口设置流程可分别按照图2和图3所示的流程执行。
下面以应用程序A为例进行描述,应用程序A为基于Android的应用程序,该应用程序安装在采用图1所示的YunOS框架的云操作系统的终端上。
当应用程序A启动时,Guest子系统在硬件抽象层加载Gralloc模块,获得Gralloc设备、fb设备。应用程序A申请图形缓冲区,该图形缓冲区中可存储该应用程序对应的buffer队列,该buffer队列为先入先出队列,该图形缓冲区被映射到该应用程序A的地址空间,以便可以写入绘制的图形数据。
如图4所示,Guest子系统(Android)的图形合成器(SurfaceFlinger)为应用程序A创建Layer和SurfaceFlingerConsumer。其中,SurfaceFlingerConsumer代表窗口对应的绘制表面(surface),用于管理buffer;layer中封装了buffer handle,用于传递窗口属性。layer与SurfaceFlingerConsumer的数据结构如图4所示。其中,layer和SurfaceFlingerConsumer对应于前述实施例的第一图层对象。
SurfaceFlinger根据该Layer和SurfaceFlingerConsumer创建对应的wl_shell_surface和wl_surface,YunOS图形合成器Wayland composer中创建对应的shell_surface和surface。wl_shell_surface是Wayland compositor中shell_surface在SurfaceFlinger中的代理(proxy),wl_surface是Wayland compositor中的surface在SurfaceFlinger中的代理(proxy)。wl_shell_surface以及wl_surface可被Wayland composer识别,Waylandcomposer可通过wl_shell_surface确定对应的Layer,通过wl_surface确定对应的SurfaceFlingerConsumer。其中,wl_shell_surface和wl_surface对应于前述实施例中的第二图层对象,shell_surface和surface对应于前述实施例中的第三图层对象。
其中,SurfaceFlinger可通过调用YunOS图形合成器(Wayland composer)提供的接口创建wl_shell_surface和wl_surface。
如图5所示,应用程序A作为buffer队列的生产者,从该应用程序的buffer队列中取出buffer进行渲染,并将渲染后的buffer放回该队列。应用程序A对应的SurfaceFlingerConsumer作为buffer队列的消费者,按照设定周期(VSync)从队列中取出buffer。所述设定周期的长度一般是16.66ms,这样保证一秒有60帧)。
当应用程序A对应的SurfaceFlingerConsumer从buffer队列中取出一个buffer后,会根据它来生成对应的wl_buffer。SurfaceFlingerConsumer可通过调用YunOS图形合成器(Wayland composer)提供的接口创建wl_buffer。wl_buffer是Wayland compositor中的wayland compositor buffer在SurfaceFlinger中的代理(proxy),wl_buffer可被Wayland composer识别,Wayland composer可通过wl_buffer确定对应的Graphic buffer以及wayland compositor buffer。
对于当前取出的buffer,应用程序A对应的SurfaceFlingerConsumer将该buffer的handle(句柄)映射为上述创建的wl_buffer的handle(即wl_buffer handle),并将wl_buffer的handle发送给Wayland composer,更具体地,是发送给Host子系统合成器中与wl_buffer对应的wayland compositor buffer。
Wayland composer根据接收到的wl_buffer handle进行合成。其中,由于wl_buffer handle指向应用程序A对应的buffer队列中被SurfaceFlingerConsumer当前取出的buffer,因此Wayland composer根据wl_buffer handle进行合成,相当于对该wl_bufferhandle对应的应用程序A的buffer队列中的buffer进行合成。
Wayland composer合成完成后,将该wl_buffer handle返回给SurfaceFlingerConsumer。SurfaceFlingerConsumer根据该返回的wl_buffer handle,将对应的当前取出的buffer放回队列。至此,本次合成处理过程完成。
此后,fb设备可将图形缓冲区渲染到帧缓冲区,从而将UI绘制到显示屏中进行显示。
应用程序A需要改变其窗口属性时,比如改变窗口位置,改变窗口透明度等,应用程序A通过SurfaceComposerClient(Android图形合成器客户端)通知SurfaceFlinger中的Layer。Layer中取出对应的wl_shell_surface,由于wl_shell_surface是Waylandcomposer中shell_surface的proxy,因此可以通过wl_shell_surface来指示Waylandcomposer需要改哪个窗口的属性。
SurfaceFlinger中的Layer通过wl_shell_surface将窗口属性发给waylandcomposer。wayland composer根据接收到的窗口属性更新相应窗口的属性。其中,shell_surface中有指向surface的指针,因此第二合成器通过wl_shell_surface可指示Waylandcomposer更改哪个窗口及传递窗口属性。
图6示例性地示出了Graphic buffer和窗口属性的传递示意图。如图所示,对于窗口属性传递过程,WindowManageService(窗口管理模块)中的SurfaceComposerClient将窗口属性信息发送给SurfaceFlinger中的Layer,由Layer将窗口属性信息发送给Weston中的shell_surface,并经过weston_surface,最终实现窗口属性重新设置。
对于buffer handle传递过程:应用程序的图形渲染器对buffer进行渲染。SurfaceFlinger中的surfaceFlingerConsumer按照设定周期从buffer队列中取buffer,并将取出的buffer的handle发送给Weston,由Weston根据该buffer handle对相应buffer进行图形合成。
上述流程中,Guest子系统中的对象与Host子系统中的对象建立起对应关系,即Guest子系统中的buffer(或称GraphicBuffer)对应Host子系统中的wl_buffer,Guest子系统中的Layer对应Host子系统中的wl_shell_surface,并且wl_buffer和wl_shell_surface均能够被Wayland composer识别,这样,SurfaceFlinger和Wayland composer中对象间存在对应关系,即,Wayland composer进程中的wl_buffer和wl_shell_surface可被映射为SurfaceFlinger进程中的GraphicBuffer和Layer,从而使得Wayland composer能够在图形处理层面实现对Android应用程序的兼容。
综上所述,YunOS将新系统与Android分别作为host子系统与guest子系统通过container技术隔离,从而减小host子系统对Guest子系统的依赖,并保证Guest子系统的可剥离性。同时又将Guest子系统中的图形系统架空,并桥接到host子系统中的图形系统,实现了双系统的统一合成渲染,实现了双系统的无缝用户体验。
基于相同的技术构思,本申请实施例提供了一种图形合成系统。
参见图7,为本申请实施例提供的图形合成系统,该系统可实现前述实施例描述的图形合成方法。该系统可包括:第一图形合成器701和第二图形合成器702,所述第一图形合成器为第一子系统的图形合成器,所述第二图形合成器为第二子系统的图形合成器;
所述第二图形合成器702,用于向第一图形合成器发送图形缓冲对象标识;
所述第一图形合成器701,用于根据所述图形缓冲对象标识所指向的图形数据存储单元中存储的图形数据进行图形合成。
优选地,所述第二图形合成器702具体用于:从图形缓冲对象队列中取出第一图形缓冲对象,创建与所述第一图形缓冲对象对应的第二图形缓冲对象,其中,所述第二图形缓冲对象为第一图形合成器701中的第三图形缓冲对象在第二图形合成器中的代理;以及,通过所述第二图形缓冲对象将所述第一图形缓冲对象的标识发送给第一图形合成器701中的第三图形缓冲对象。
其中,第二图形合成器702具体用于:
将所述第一图形缓冲对象的标识映射为所述第二图形缓冲对象的标识;
将所述第二图形缓冲对象的标识发送给第一子系统图形合成器701。
优选地,第一图形合成器701还用用于:创建与所述第一图形缓冲对象对应的第三图形缓冲对象。
优选地,第一图形合成器701还用于:完成所述合成后,向第二图形合成器返回所述第二图形缓冲对象的标识;
第二图形合成器702还用于:根据返回的所述第二图形缓冲对象的标识,将所述第二图形缓冲对象对应的第一图形缓冲对象放回所述图形缓冲对象队列。
优选地,图形数据存储单元中存储的图形数据是第二子系统的应用程序处理得到的。
优选地,所述第一子系统为Host子系统,所述第二子系统为Guest子系统。
基于相同的技术构思,本申请实施例提供了一种窗口设置系统。
参见图8,为本申请实施例提供的窗口设置系统,该系统可实现前述实施例提供的窗口设置方法。该系统可包括:第一图形合成器801和第二图形合成器802,所述第一图形合成器为第一子系统的图形合成器,所述第二图形合成器为第二子系统的图形合成器;
第二图形合成器802,用于向第一图形合成器发送窗口属性信息;
第一图形合成器801,用于根据所述窗口属性信息,设置相应窗口。
优选地,所述第二图形合成器802具体用于:
根据待设置窗口确定对应的第一图层对象;
通过与所述第一图层对象对应的第二图层对象将所述待设置窗口的窗口属性信息发送给第一图形合成器中第三图层对象;其中,所述第二图层对象为所述第三图层对象在第二图形合成器中的代理。
进一步地,第二图形合成器802还用于:根据接收到的第一事件,创建第一图层对象和第二图层对象;
第一图形合成器801还用于:根据所述第一事件,创建与所述第一图层对象或所述第二图层对象对应的第三图层对象。
其中,所述第一事件包括以下事件中的一种或多种:
第二子系统的应用程序被启动的事件;
第二图形合成器为第二子系统的应用程序创建图层的事件。
优选地,所述窗口属性信息为第二子系统的应用程序所对应的窗口属性信息。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。