基于Linux服务器的Android容器渲染资源共享方法和装置转让专利

申请号 : CN202210019061.7

文献号 : CN114022344B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李瑞亮雷小刚郭建君

申请人 : 北京蔚领时代科技有限公司

摘要 :

本申请的实施例提供了一种基于Linux服务器的Android容器渲染资源共享方法和装置,涉及互联网技术领域。该方法包括:获取第一安卓容器内目标应用生成的第一渲染对象,根据第一渲染对象生成第二渲染对象,并将第二渲染对象加载至显存;根据第一渲染对象和第二渲染对象更新渲染对象信息列表;后续根据渲染指令直接应用显存中的第二渲染对象;获取第二安卓容器内目标应用生成的第三渲染对象;根据第二渲染对象和第三渲染对象更新渲染对象信息列表;后续根据渲染指令直接应用显存中的第二渲染对象。本申请能够改善多个安卓容器内运行同样的应用,生成同样的资源会都存在GPU显存中,导致资源的浪费的问题,达到减少显存冗余数据,提升显存的使用效率的效果。

权利要求 :

1.一种基于Linux服务器的Android容器渲染资源共享方法,其特征在于,包括:获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器内的同一个应用;

根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存;

将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息;

将所述第一关联信息更新至渲染对象信息列表中;

基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象;

获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器;

根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表;

基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象。

2.根据权利要求1所述的方法,其特征在于,还包括:遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直接应用所述显存中的所述第二渲染对象。

3.根据权利要求1所述的方法,其特征在于,所述根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存,包括:在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值;

判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中;

若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。

4.根据权利要求1所述的方法,其特征在于,所述根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表,包括:在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息;

将所述第二关联信息更新至渲染对象信息列表中。

5.一种基于Linux服务器的Android容器渲染资源共享装置,其特征在于,包括:第一获取模块,用于获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器内的同一个应用;

生成模块,用于根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存;

关联模块,用于将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息;

第一更新模块,用于将所述第一关联信息更新至渲染对象信息列表中;

第一应用模块,用于基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象;

第二获取模块,用于获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器;

第二更新模块,用于根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表;

第二应用模块,用于基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象。

6.根据权利要求5所述的装置,其特征在于,还包括:遍历模块,用于遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直接应用所述显存中的所述第二渲染对象。

7.根据权利要求5所述的装置,其特征在于,所述生成模块包括:计算单元,用于在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值;

判断单元,用于判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中;

生成单元,用于若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。

8.根据权利要求5所述的装置,其特征在于,第二更新模块包括:关联单元,用于在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息;

更新单元,用于将所述第二关联信息更新至渲染对象信息列表中。

说明书 :

基于Linux服务器的Android容器渲染资源共享方法和装置

技术领域

[0001] 本申请的实施例涉及互联网技术领域,尤其涉及一种基于Linux服务器的Android容器渲染资源共享方法和装置。

背景技术

[0002] 当前,三维建模和虚拟现实渲染绝大部分集中于电影特效、游戏开发或者房地产等大型行业领域。对于渲染程序系统而言,需要不停的通过代码来操作图形处理器
(graphics processing unit,缩写GPU)、内存、中央处理器(central processing unit,缩
写CPU)等相关的硬件完成渲染。因此,完成相同的任务时,调用的资源越多,效能就越低。换
句话说也就是,优秀的系统就是资源利用率高的系统。
[0003] 在实现本发明的过程中,发明人发现,多个Android(安卓)容器内运行同样的应用,生成同样的资源会都存在GPU显存中,导致资源的浪费。

发明内容

[0004] 本申请的实施例提供了一种基于Linux服务器的Android容器渲染资源共享方法和装置,能够改善多个安卓容器内运行同样的应用,生成同样的资源会都存在GPU显存中,
导致资源的浪费的问题。
[0005] 在本申请的第一方面,提供了一种基于Linux服务器的Android容器渲染资源共享方法,包括:
[0006] 获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器内的同一个应用;
[0007] 根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存;
[0008] 将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息;
[0009] 将所述第一关联信息更新至渲染对象信息列表中;
[0010] 基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对
象;
[0011] 获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器;
[0012] 根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表;
[0013] 基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对
象。
[0014] 通过采用以上技术方案,获取第一安卓容器内目标应用生成的第一渲染对象,根据第一渲染对象生成第二渲染对象,并将第二渲染对象加载至显存;再将第一渲染对象和
第二渲染对象进行关联,得到第一关联信息;再将第一关联信息更新至渲染对象信息列表
中;再基于更新关联信息的渲染对象信息列表,在第一渲染对象后获取从第一安卓容器内
目标应用生成的渲染对象的渲染指令,直接应用显存中的第二渲染对象;再获取第二安卓
容器内目标应用生成的第三渲染对象; 根据第二渲染对象和第三渲染对象,更新渲染对象
信息列表;再基于更新关联信息的渲染对象信息列表,在第三渲染对象后获取从第二安卓
容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象;
综上使得不同安卓容器内(即第一安卓容器和第二安卓容器)运行的同样的应用(即目标应
用)共享一份显存资源(即第二渲染对象),能够改善多个安卓容器内运行同样的应用,生成
同样的资源会都存在GPU显存中,导致资源的浪费的问题,达到减少显存冗余数据,提升显
存的使用效率的效果。
[0015] 在一种可能的实现方式中,还包括:
[0016] 遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直接应用所述显存中
的所述第二渲染对象。
[0017] 在一种可能的实现方式中,所述根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存,包括:
[0018] 在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值;
[0019] 判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中;
[0020] 若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0021] 在一种可能的实现方式中,所述根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表,包括:
[0022] 在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息;
[0023] 将所述第二关联信息更新至渲染对象信息列表中。
[0024] 在本申请的第二方面,提供了一种基于Linux服务器的Android容器渲染资源共享装置,包括:
[0025] 第一获取模块,用于获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器内
的同一个应用;
[0026] 生成模块,用于根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存;
[0027] 关联模块,用于将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息;
[0028] 第一更新模块,用于将所述第一关联信息更新至渲染对象信息列表中;
[0029] 第一应用模块,用于基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存
中的所述第二渲染对象;
[0030] 第二获取模块,用于获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器;
[0031] 第二更新模块,用于根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表;
[0032] 第二应用模块,用于基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存
中的所述第二渲染对象。
[0033] 在一种可能的实现方式中,还包括:
[0034] 遍历模块,用于遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直接应
用所述显存中的所述第二渲染对象。
[0035] 在一种可能的实现方式中,所述生成模块包括:
[0036] 计算单元,用于在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值;
[0037] 判断单元,用于判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中;
[0038] 生成单元,用于若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0039] 在一种可能的实现方式中,第二更新模块包括:
[0040] 关联单元,用于在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息;
[0041] 更新单元,用于将所述第二关联信息更新至渲染对象信息列表中。
[0042] 在本申请的第三方面,提供了一种基于Linux服务器的Android容器渲染资源共享系统,包括:Linux服务器;
[0043] 所述Linux服务器包括:
[0044] 多个安卓容器,用于运行目标应用;
[0045] 渲染器,与所述多个安卓容器连接,用于接收所述目标应用生成的渲染对象和渲染指令,并对所述渲染对象进行渲染处理;
[0046] 显存,与所述渲染器连接,用于加载所述渲染对象的数据;
[0047] 网络接口控制器,用于与外界搭建关联。
[0048] 在一种可能的实现方式中,还包括:用户客户端和目标应用管理平台;
[0049] 所述Linux服务器与所述网络接口控制器连接,所述用户客户端与所述网络接口控制器连接,所述目标应用管理平台与所述网络接口控制器连接。
[0050] 应当理解,发明内容部分中所描述的内容并非旨在限定本申请的实施例的关键或重要特征,亦非用于限制本申请的范围。本申请的其它特征将通过以下的描述变得容易理
解。

附图说明

[0051] 结合附图并参考以下详细说明,本申请各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
[0052] 图1示出了本申请实施例中基于Linux服务器的Android容器渲染资源共享系统的结构图。
[0053] 图2示出了本申请实施例中基于Linux服务器的Android容器渲染资源共享方法的流程图。
[0054] 图3示出了本申请实施例中第一安卓容器和第二安卓容器渲染资源共享的示意图。
[0055] 图4示出了本申请实施例中基于Linux服务器的Android容器渲染资源共享装置的结构图。

具体实施方式

[0056] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0057] 本申请实施例提供的基于Linux服务器的Android容器渲染资源共享方法可以应用于互联网技术领域。
[0058] 图1示出了本申请实施例中基于Linux服务器的Android容器渲染资源共享系统的结构图。参见图1,本实施例中基于Linux服务器的Android容器渲染资源共享系统包括
Linux服务器1。其中,Linux服务器1包括Android系统容器集13、渲染器、显存和网络接口控
制器14。
[0059] 在本申请实施例中,Android系统容器集13包括多个安卓容器,用于运行目标应用。渲染器与多个安卓容器连接,用于接收目标应用生成的渲染对象和渲染指令,并对渲染
对象进行渲染处理。显存与渲染器连接,用于加载渲染对象的数据。网络接口控制器14用于
与外界搭建关联。
[0060] 在本申请实施例中, Android系统容器(安卓容器)内包含Android运行环境,即Guest端, 包括游戏应用和非游戏应用的需渲染的应用在安卓容器内运行。
[0061] 在本申请实施例中,多个安卓容器包括但不限于第一安卓容器和第二安卓容器,目标应用是运行在第一安卓容器和第二安卓容器内的同一个应用。第一安卓容器和第二安
卓容器内的目标应用均与渲染器连接。
[0062] 可选的,渲染器为共享的硬件图形渲染器(Render)。
[0063] 在本申请实施例中,共享的硬件图形渲染器运行在Linux服务器1的Host端,可以使用Linux服务器1的硬件显卡进行图形加速,负责接收来宾账户(Guest)发送过来的渲染
指令和渲染素材数据进行渲染操作。
[0064] 在本申请实施例中,共享的硬件图形渲染器在Android容器服务器12中,Android容器服务器12还包括音频编码器、RTC栈和硬件视频编码器。显存为GPU显存15,Android容
器服务器12中的共享的硬件图形渲染器通过硬件视频编码器与GPU显存15连接,使得共享
的硬件图形渲染器接收到目标应用生成的渲染对象和渲染指令与GPU显存15建立联系。
[0065] 在本申请实施例中,Android容器服务器中的RTC栈与网络接口控制器14连接,使得Linux服务器1与外界搭建关联。Android容器服务器12还与Android容器管理器11连接,
使得Android容器管理器11对Linux服务器1中的每一个安卓容器进行管理。
[0066] 在一些实施例中,所述系统还包括:用户客户端3和目标应用管理平台2。
[0067] Linux服务器1与网络接口控制器14连接,用户客户端3与网络接口控制器14连接,目标应用管理平台2与网络接口控制器14连接。
[0068] 在本申请实施例中,Linux服务器1、用户客户端3和目标应用管理平台2通过所述网络接口控制器14连接。用户客户端3包括手机、平板电脑、笔记本电脑、智能电视和台式电
脑。目标应用管理平台2包括游戏管理平台和非游戏应用管理平台。
[0069] 图2示出了本申请实施例中基于Linux服务器的Android容器渲染资源共享方法的流程图。参见图2,本实施例中基于Linux服务器的Android容器渲染资源共享方法包括:
[0070] 步骤201:获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器内的同一个应
用。
[0071] 在本申请实施例中,第一安卓容器内目标应用发出渲染指令给Render,Render获取渲染指令后,根据渲染指令生成第一渲染对象的名称,并将名称发送给目标应用。目标应
用在接收到名称后,通过高速通信管道把渲染数据(第一渲染对象,即渲染素材)发送至
Render。目标应用为需渲染处理的应用,包括游戏应用和非游戏应用。
[0072] 可选的,选取游戏应用为目标应用。
[0073] 在本申请实施例中,游戏应用生成的渲染对象(渲染资源)包括几何、视点、纹理以及照明信息。
[0074] 在本申请实施例中,后续将选取纹理资源(纹理对象)为渲染对象对基于Linux服务器的Android容器渲染资源共享方法进行具体阐述。
[0075] 在本申请实施例中, 第一安卓容器内的游戏应用生成的第一纹理对象(第一渲染对象)。第一纹理对象(第一渲染对象)为第一安卓容器内的游戏应用直接生成的原始纹理
对象。Render获取第一纹理对象(第一渲染对象)。获取到的第一纹理对象(第一渲染对象)
用于生成第二纹理对象(第二渲染对象)。
[0076] 步骤202:根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0077] 在本申请实施例中,第二渲染对象为经过基于Linux服务器的Android容器渲染资源共享系统处理后的共享渲染对象。Render将生成第二渲染对象,并加载第二渲染对象的
数据。
[0078] 在本申请实施例中,将共享渲染对象的数据加载在GPU显存中,便于后续根据目标应用再生成的同样渲染对象进行应用。GPU显存中仅储存一份共享渲染对象的数据。后续第
一安卓容器内的游戏应用在生成相同的第一渲染对象,需获取同样的渲染数据资源时,再
生成的同样渲染对象的数据即为直接调取的共享渲染对象的数据。
[0079] 步骤203:将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息。
[0080] 在本申请实施例中,将第一渲染对象中名称的数据与第二渲染对象中中名称的数据关联,同时将第一渲染对象中的渲染数据对应的哈希值与第二渲染对象中的渲染数据对
应的哈希值关联,获得渲染对象和哈希值一一对应的关联信息(即第一关联信息)。
[0081] 步骤204:将所述第一关联信息更新至渲染对象信息列表中。
[0082] 在本申请实施例中,渲染对象信息列表包括渲染对象名称和哈希值。将第一关联信息更新至渲染对象信息列表中,即为将第一渲染对象的名称数据和哈希值与第二渲染对
象的名称数据和哈希值更新至渲染对象信息列表。
[0083] 例如,第一渲染对象用A表示,计算出的第一渲染对象中的渲染数据的哈希值用A1表示;第二渲染对象用B表示,计算出的第二渲染对象中的渲染数据的哈希值用B1表示,则
渲染对象信息列表如表1所示:
[0084] 表1:渲染对象信息列表
[0085]渲 染 对 象 哈 希 值
A A1
B B1
…… ……
[0086] 其中,因为第二渲染对象根据第一渲染对象生成,并对第一渲染对象和第二渲染对象进行关联,所以A1与B1为相同的哈希值。
[0087] 步骤205:基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第
二渲染对象。
[0088] 在本申请实施例中,渲染指令为只读渲染指令。在第一安卓容器内目标应用生成第一渲染对象后,待需要对第一渲染对象后生成的渲染对象进行渲染,第一安卓容器内目
标应用发出所有引用第一渲染对象的渲染指令时,因为第一渲染对象中的数据与第二渲染
对象中的数据相同,对应的哈希值也相同,所以目标应用可直接应用显存中的第二渲染对
象。
[0089] 步骤206:获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器。
[0090] 在本申请实施例中,第二安卓容器内目标应用与第一安卓容器内目标应用位同一个应用,即运行在多个安卓容器内的同一个应用。
[0091] 基于Linux服务器的Android容器渲染资源共享系统中的共享的硬件图形渲染器获取第三渲染对象。获取到的第三渲染对象用于更新渲染对象信息列表。
[0092] 步骤207:根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表。
[0093] 在本申请实施例中,第三渲染对象用C表示,计算出的第三渲染对象中渲染数据的哈希值用C1表示,则更新的渲染对象信息列表如表2所示:
[0094] 表2:更新的渲染对象信息列表
[0095]渲 染 对 象 哈 希 值
A A1
B B1
C C1
…… ……
[0096] 其中,上述处理的数据中,第三渲染对象中的数据与第二渲染对象加载的资源为相同的渲染数据,由于根据渲染数据计算出的哈希值也是相同的,因此,共享的硬件图形渲
染器可在渲染对象信息列表中获取该哈希值的信息。
[0097] 步骤208:基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第
二渲染对象。
[0098] 在本申请实施例中,渲染指令为只读渲染指令。在第二安卓容器内目标应用生成第三渲染对象后,待需要对第三渲染对象后生成的渲染对象进行渲染,第二安卓容器内目
标应用发出所有引用第三渲染对象的渲染指令时,因为第三渲染对象中的数据与第二渲染
对象中的数据相同,对应的哈希值也相同,所以目标应用可直接应用显存中的第二渲染对
象。
[0099] 此时,共享的硬件图形渲染器不再将第三渲染对象中的数据加载进显存,而是选择将第三渲染对象与第二渲染对象的关联关系添加至渲染对象信息列表,更新渲染对象信
息列表。
[0100] 图3示出了本申请实施例中第一安卓容器和第二安卓容器渲染资源共享的示意图。参见图3,在此需要说明,步骤201至步骤208中,处理的多个安卓容器内生成的渲染对象
均为目标应用的共有资源。
[0101] 在本申请实施例中,对第一安卓容器和第二安卓容器中各个容器独有的资源仍储存至GPU显存中,不对其做资源共享处理,仅对第一安卓容器和第二安卓容器中相同数据
(即安卓容器中共享资源)做资源共享处理。
[0102] 通过采用以上技术方案,获取第一安卓容器内目标应用生成的第一渲染对象,根据第一渲染对象生成第二渲染对象,并将第二渲染对象加载至显存;再将第一渲染对象和
第二渲染对象进行关联,得到第一关联信息;再将第一关联信息更新至渲染对象信息列表
中;再基于更新关联信息的渲染对象信息列表,在第一渲染对象后获取从第一安卓容器内
目标应用生成的渲染对象的渲染指令,直接应用显存中的第二渲染对象;再获取第二安卓
容器内目标应用生成的第三渲染对象; 根据第二渲染对象和第三渲染对象,更新渲染对象
信息列表;再基于更新关联信息的渲染对象信息列表,在第三渲染对象后获取从第二安卓
容器内目标应用生成的渲染对象的渲染指令,直接应用所述显存中的所述第二渲染对象;
综上使得不同安卓容器内(即第一安卓容器和第二安卓容器)运行的同样的应用(即目标应
用)共享一份显存资源(即第二渲染对象),能够改善多个安卓容器内运行同样的应用,生成
同样的资源会都存在GPU显存中,导致资源的浪费的问题,达到减少显存冗余数据,提升显
存的使用效率的效果。
[0103] 在一些实施例中,所述方法还包括:步骤109。
[0104] 步骤109:遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直接应用所
述显存中的所述第二渲染对象。
[0105] 在本申请实施例中,若安卓容器为两个以上,则除第一安卓容器和第二安卓容器之外其余的安卓容器内运行同样的应用(即目标应用)可直接应用显存中的第二渲染对象。
[0106] 此时,共享的硬件图形渲染器不再将除第一安卓容器和第二安卓容器之外其余的安卓容器生成的渲染对象的数据加载进显存,而是选择将渲染对象之间的关联关系添加至
渲染对象信息列表,更新渲染对象信息列表。
[0107] 在一些实施例中,步骤102中包括:步骤A1‑步骤A3。
[0108] 步骤A1:在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值。
[0109] 步骤A2:判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中。
[0110] 步骤A3:若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0111] 在本申请实施例中,图片哈希算法包括均值哈希算法、差值哈希算法和感知哈希算法。
[0112] 可选的,选用差值哈希算法计算第一渲染数据的哈希值。具体计算方式如下:
[0113] 缩小尺寸:将第一渲染对象(图片)收缩到8x9(高x宽)的大小,以便它有72的像素点。
[0114] 转化为灰度图:把缩放后的图片转化为256阶的灰度图。
[0115] 计算差异值:dHash算法工作在相邻像素之间,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值。
[0116] 获得指纹:如果左边的像素比右边的更亮,则记录为1,否则为0。
[0117] 在本申请实施例中还包括:如果第一渲染对象和哈希值在渲染对象信息列表中,则Render直接应用相关联的渲染对象。
[0118] 在一些实施例中,步骤107中包括:步骤B1‑步骤B2。
[0119] 步骤B1:在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息。
[0120] 步骤B2:将所述第二关联信息更新至渲染对象信息列表中。
[0121] 在本申请实施例中,将第三渲染对象中的数据与第二渲染对象中的数据关联,同时将第三渲染对象中的数据对应的哈希值与第二渲染对象中的数据对应的哈希值关联,获
得渲染对象和哈希值一一对应的关联信息(即第二关联信息)。
[0122] 下面,将以Texture纹理资源为例,对基于Linux服务器的Android容器渲染资源共享方法中的步骤201至步骤208进行说明。具体实现方法如下:
[0123] 第一安卓容器内的游戏应用生成第一纹理对象。
[0124] 加载纹理数据时,计算该纹理数据的哈希值。
[0125] Render在纹理对象信息列表中查找是否存在第一纹理对象以及该哈希值的信息。
[0126] 如果存在,则Render直接应用相关联的渲染对象。
[0127] 如果不存在,则Render生成第二纹理对象,并正常加载该纹理数据。
[0128] 将该哈希值以及第一纹理对象和第二纹理对象的关联关系等信息记录在纹理对象信息列表中。
[0129] 后续Render在执行第一安卓容器发过来的所有引用第一纹理对象的只读渲染指令时,都根据上述第一纹理对象和第二纹理对象的对应关系,直接应用第二纹理对象。
[0130] 第二安卓容器内的游戏应用生成第三纹理对象。
[0131] 加载与上述纹理资源相同的资源时,由于计算出的哈希数值与上述哈希数值是相同的,因此Render可以在纹理对象信息列表中查找到该哈希值的信息,此时Render不再将
该纹理数据加载进显存,而是在纹理对象信息列表中添加第二纹理对象和第三纹理对象的
关联关系。
[0132] 后续Render在执行第二安卓容器发过来的所有引用第三纹理对象的只读渲染指令时,都根据上述第二纹理对象和第三纹理对象的对应关系,直接应用纹第二纹理对象。
[0133] 通过上述方式,运行在Host端上的硬件图形渲染器(Render,即共享的硬件图形渲染器),同时为多个安卓容器(Guest)内的游戏提供渲染服务,这样就使得原本在不同游戏
进程内加载的渲染资源,现在加载在同一个Render进程内的,进而相同的资源可以只加载
一份,同时提供给不同的游戏做渲染操作,从而共用一份份显存资源。
[0134] 综上所述,基于Linux服务器的Android容器渲染资源共享方法,可实现同一个应用(即目标应用)共享一份显存资源。
[0135] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为
依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知
悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请
所必须的。
[0136] 以上是关于方法实施例的介绍,以下通过装置实施例,对本申请所述方案进行进一步说明。
[0137] 图4示出了本申请实施例的一种基于Linux服务器的Android容器渲染资源共享装置的结构图。参见图4,该基于Linux服务器的Android容器渲染资源共享装置包括第一获取
模块401、生成模块402、关联模块403、第一更新模块404、第一应用模块405、第二获取模块
406、第二更新模块407和第二应用模块408。
[0138] 第一获取模块401,用于获取第一安卓容器内目标应用生成的第一渲染对象,所述第一安卓容器为多个安卓容器中任意一个安卓容器,所述目标应用为运行在多个安卓容器
内的同一个应用。
[0139] 生成模块402,用于根据所述第一渲染对象生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0140] 关联模块403,用于将将所述第一渲染对象和所述第二渲染对象进行关联,得到第一关联信息。
[0141] 第一更新模块404,用于将所述第一关联信息更新至渲染对象信息列表中。
[0142] 第一应用模块405,用于基于更新关联信息的渲染对象信息列表,在所述第一渲染对象后获取从所述第一安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显
存中的所述第二渲染对象。
[0143] 第二获取模块406,用于获取第二安卓容器内目标应用生成的第三渲染对象,所述第二安卓容器为多个安卓容器中除所述第一安卓容器之外的任意一个安卓容器。
[0144] 第二更新模块407,用于根据所述第二渲染对象和所述第三渲染对象,更新渲染对象信息列表。
[0145] 第二应用模块408,用于基于更新关联信息的渲染对象信息列表,在所述第三渲染对象后获取从所述第二安卓容器内目标应用生成的渲染对象的渲染指令,直接应用所述显
存中的所述第二渲染对象。
[0146] 在一些实施例中,还包括:
[0147] 遍历模块409,用于遍历多个安卓容器中除所述第一安卓容器和所述第二安卓容器之外的其余每一个安卓容器,基于更新关联信息的渲染对象信息列表,获取渲染指令,直
接应用所述显存中的所述第二渲染对象。
[0148] 在一些实施例中,生成模块402包括:计算单元、判断单元和生成单元。
[0149] 计算单元,用于在加载所述第一渲染对象时,计算所述第一渲染对象的哈希值。
[0150] 判断单元,用于判断所述第一渲染对象和所述哈希值是否在渲染对象信息列表中。
[0151] 生成单元,用于若不存在,则根据所述哈希值生成第二渲染对象,并将所述第二渲染对象加载至显存。
[0152] 在一些实施例中,第二更新模块407包括:关联单元和更新单元。
[0153] 关联单元,用于在加载所述第一安卓容器和所述第二安卓容器中相同数据时,将所述第二渲染对象和所述第三渲染对象进行关联,得到第二关联信息。
[0154] 更新单元,用于将所述第二关联信息更新至渲染对象信息列表中。
[0155] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,所述描述的模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0156] 应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤
的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一
部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻
执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他
步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0157] 以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本申请的保护范围。