CN110968395A - 一种在模拟器中处理渲染指令的方法及移动终端 - Google Patents

一种在模拟器中处理渲染指令的方法及移动终端 Download PDF

Info

Publication number
CN110968395A
CN110968395A CN201911012928.0A CN201911012928A CN110968395A CN 110968395 A CN110968395 A CN 110968395A CN 201911012928 A CN201911012928 A CN 201911012928A CN 110968395 A CN110968395 A CN 110968395A
Authority
CN
China
Prior art keywords
rendering
instruction
instructions
sent
simulator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911012928.0A
Other languages
English (en)
Other versions
CN110968395B (zh
Inventor
何书杰
罗朴良
李斌飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201911012928.0A priority Critical patent/CN110968395B/zh
Publication of CN110968395A publication Critical patent/CN110968395A/zh
Priority to PCT/CN2020/122528 priority patent/WO2021078161A1/zh
Application granted granted Critical
Publication of CN110968395B publication Critical patent/CN110968395B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供一种在模拟器中处理渲染指令的方法,该方法包括:遍历待发送的渲染指令,所述待发送的渲染指令包括同步执行渲染指令和异步执行渲染指令;将遍历得到的所述异步执行渲染指令进行压缩,得到第一指令压缩包;发送所述第一指令压缩包;解压缩所述第一指令压缩包,执行解压缩得到的所述异步执行渲染指令。通过上述方案,可以提高模拟器的数据传输能力。

Description

一种在模拟器中处理渲染指令的方法及移动终端
技术领域
本申请实施例涉及电子技术领域,尤其涉及一种在模拟器中处理渲染指令的方法及移动终端。
背景技术
安卓模拟器可以在个人计算机端模拟出安卓手机端的运行环境,从而用户可以在个人计算机上运行安卓手机的应用程序(例如游戏等)。相比于在安卓手机上运行安卓应用程序,通过安卓模拟器运行安卓应用程序有以下优点:个人计算机的屏幕通常比手机屏幕大,大屏幕可以获得更好的视觉体验;不存在消耗电量、网络流量的顾虑;使用个人计算机的键盘鼠标,操控性能更流畅;可以同时运行多个安卓应用程序;个人计算机的计算性能通常强于手机,可以突破手机性能的限制(如CPU Central Processing Unit中央处理单元等);等等。在模拟器运行过程中,传输管道的带宽大小影响着渲染指令传输的快慢,如果管道带宽小,可能造成渲染指令传输较慢,会出现画面掉帧、卡顿等现象,影响用户体验。所以,亟需提高模拟器的传输能力。
发明内容
本申请实施例提供一种在模拟器中处理渲染指令,能够提高模拟器传输管道的传输能力,避免画面掉帧、卡顿等现象。
为达到上述目的,本申请实施例采用如下技术方案:
第一方面,本申请实施例提供一种在模拟器中处理渲染指令的方法,包括:遍历待发送的渲染指令,所述待发送的渲染指令包括同步执行渲染指令和异步执行渲染指令;将遍历得到的所述异步执行渲染指令进行压缩,得到第一指令压缩包;发送所述第一指令压缩包;解压缩所述第一指令压缩包,执行解压缩得到的所述异步执行渲染指令。通过对异步执行渲染指令进行压缩,提高了传输效率。
在一种可能的实现方式中,所述遍历待发送的渲染指令,包括:按照待发送的顺序逐一检测所述待发送的渲染指令。
在一种可能的实现方式中,所述执行解压缩得到的所述异步执行渲染指令,包括:将所述异步执行渲染指令发送给GPU,由所述GPU生成渲染画面。
在一种可能的实现方式中,所述方法还包括:发送遍历得到的所述同步执行渲染指令。
在一种可能的实现方式中,在所述遍历待发送的渲染指令之前,所述方法还包括:检测渲染指令的类型并进行标记。
在一种可能的实现方式中,所述检测渲染指令的类型,包括:对于返回值为void的渲染指令,标记为异步执行渲染指令;对于返回值为非void的渲染指令,标记为同步执行渲染指令。
在一种可能的实现方式中,所述检测渲染指令的类型,包括:使用指令函数符号表来检测所述渲染指令的类型。
在一种可能的实现方式中,在所述遍历待发送的渲染指令之前,所述方法还包括:检测所述模拟器中当前运行的应用所需要的第一带宽;判断所述第一带宽是否超过所述模拟器支持的最大带宽能力。
在一种可能的实现方式中,所述遍历待发送的渲染指令,包括:如果遍历得到同步执行渲染指令,则暂停遍历并发送所述同步执行渲染指令;如果遍历得到异步执行渲染指令,则继续遍历,直到遇到同步执行指令时暂停遍历。
第二方面,本申请实施例提供一种移动终端,该移动终端包括一个或多个处理器,存储器,一个或多个程序;其中,一个或多个程序被存储在存储器中并被配置为被一个或多个处理器执行,一个或多个程序包括指令,指令用于执行如第一方面所述的方法。
第三方面,本申请实施例提供一种存储介质,用于存储计算机软件指令,计算机软件指令用于执行如第一方面所述的方法。
第四方面,本申请实施例提供一种计算机程序产品,当运行计算机程序产品时,使得计算机执行如第一方面所述的方法。
通过以上方案,可以提高模拟器的传输能力,改善用户体验。
附图说明
图1为本申请实施例提供的一种模拟器传输指令的示意图;
图2为本申请实施例提供的一种操作系统的结构示意图;
图3为本申请实施例提供的一种在模拟器中处理渲染指令的方法流程图;
图4为本申请实施例提供的另一种模拟器传输指令的示意图;
图5为本申请实施例提供的另一种在模拟器中处理渲染指令的方法流程图;
图6为本申请实施例提供的另一种在模拟器中处理渲染指令的方法流程图;
图7为本申请实施例提供的另一种模拟器传输指令的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
本申请所述的移动终端可以包括诸如手机、平板电脑、可穿戴设备(例如,手表、手环、智能头盔等)、个人计算机(personal computer,PC),车载设备、智能家居设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)等。本申请一些实施例以个人计算机为例,可以理解的是,这些实施例也可应用于其他类型的移动终端。
本申请涉及的应用程序(application,app),可以简称应用,为能够实现某项或多项特定功能的软件程序。通常,移动终端中可以安装多个应用,例如,运动类应用,音乐类应用,词典类应用等。可以理解的是,应用可以是移动终端出厂时已安装的应用,也可以是用户在使用移动终端的过程中从网络下载或从其他电子设备获取的应用。第三方应用通常是指非移动终端生产商开发的应用,例如对于华为
Figure BDA0002244746790000021
手机,第三方应用可以是除了华为以外的其他开发者开发的应用。
模拟器可以在A终端上模拟出B终端的系统或运行环境,将B终端上的应用程序在A终端上运行。常见的例如安卓模拟器,可以在个人计算机端模拟出安卓手机端的运行环境,从而用户可以在个人计算机上运行安卓手机的应用程序(例如游戏等)。以安装了微软公司的
Figure BDA0002244746790000031
系统的个人计算机为例,可以在个人计算机上安装安卓模拟器软件;用户可以在安卓模拟器软件中运行安卓应用程序(例如apk文件),这些安卓应用程序可以是用户通过安卓模拟器软件下载的,也可以是用户通过除了安卓模拟器软件以外的渠道下载的(例如浏览器等)。相比于在安卓手机上运行安卓应用程序,通过安卓模拟器运行安卓应用程序有以下优点:个人计算机的屏幕通常比手机屏幕大,大屏幕可以获得更好的视觉体验;不存在消耗电量、网络流量的顾虑;使用个人计算机的键盘鼠标,操控性能更流畅;可以同时运行多个安卓应用程序;个人计算机的计算性能通常强于手机,可以突破手机性能的限制(如CPU Central Processing Unit中央处理单元等);等等。
目前使用模拟器玩游戏的过程中,会出现掉帧现象,导致画面不流畅,用户体验不佳。如图1所示,用户在个人计算机端(host端)安装模拟器客户端(guest端),模拟器客户端通过传输管道(pipe)向个人计算机端传输指令等数据,个人计算机端通过自身的GPU(Graphic Processing Unit图形处理器)对这些指令进行处理(例如对渲染指令进行渲染)。渲染是指在计算机绘图过程中从模型生成图像的过程,一般通过显卡GPU来执行。例如,当在安卓模拟器软件上运行安卓游戏应用程序时,安卓模拟器软件会向个人计算操作系统发送画面渲染指令,个人计算机通过自身GPU处理这些渲染指令并最终生成游戏画面。常见的渲染模式包括DirectX引擎渲染和OpenGL引擎渲染,由于OpenGL引擎兼容性较强,本申请以OpenGL渲染模式为例介绍模拟器的渲染过程,可以理解的是,这些例子也可以适用于DirectX引擎渲染。OpenGL(Open Graphics Library,开放图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
本申请以安卓模拟器为例,图2示出了安卓Android系统的架构示意图。Android操作系统架构分为四层,从高层到底层分为应用程序层,应用程序框架层,函数库层和Linux内核层。
1、应用程序层:
应用程序层(Applications)是Android操作系统架构的最上一层,包括Android操作系统装配的核心应用软件,例如电子邮件客户端、短信、通话、日历、地图、浏览器、联系人等。当然,对于开发者来说,开发者可以编写应用软件并安装到该层。一般而言,应用程序都是使用Java语言开发,通过调用应用程序框架层所提供的API(Application ProgrammingInterface)来完成。
2、应用程序框架层:
应用程序框架层(Application Framework),主要是为开发者提供了可以访问应用程序所使用的各种API,开发者通过应用程序框架层来与Android底层(例如函数库层、Linux内核层等)进行交互,开发自己的应用。该应用程序框架层主要是Android操作系统的一系列的服务和管理系统。应用程序框架层主要包括如下关键服务:
活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能;
内容提供器(Content Providers),用来管理不同应用程序间的数据共享和访问;
通知管理器(Notification Manager),用于控制应用程序在状态栏显示提示信息(例如警告(Alerts)、通知消息(Notifications)等)给用户;
资源管理器(Resource Manager):提供非代码资源(如字符串、图形和布局文件(Layoutfile)等)供应用程序使用;
包管理器(Package Manager)主要用于对Android操作系统的应用程序进行管理;
视图(View),具有丰富的、可扩展的视图集合,可用于构建一个应用程序,它具体包括列表(List)、网格(Grid)、文本框(TextBox)、按钮(Button),以及可嵌入的网页浏览器;
位置管理器(Location Manager),主要是让应用程序可以访问到手机当前的地理位置。
3、函数库层:
函数库层(Libraries)是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。函数库层包括一些由计算机程序C语言或C++语言编译的函数库,这些函数库能被Android操作系统中的不同的组件使用,它们通过Android应用程序框架为开发者提供服务。具体地,函数库包括libc函数库,它是专门为基于embedded linux的设备定制的;函数库还包括Android操作系统多媒体库(Media Framework),该库支持多种编码格式的音频/视频的回放和录制,同时支持静态图像文件,以及常见的音频/视频编码格式。函数库还包括界面管理库(Surface Manager),主要负责管理针对显示系统的访问,具体用于在执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。
函数库层中还包括其他的用于实现Android操作系统手机各个功能的函数库,例如:SGL(Scalable Graphics Library):基于XML(Extensible Markup Language)文件的2D图形图像处理引擎;SSL(Secure Sockets Layer):位于TVP/IP协议(TransmissionControlProtocol/InternetProtocol,传输控制协议/互联网络协议)与各种应用层协议之间,为数据通讯提供支持;OpenGL/ES:3D效果的支持;SQLite:关系型数据库引擎;Webkit:Web浏览器引擎;FreeType:位图(Bitmap)及矢量(Vector)字体支持;等等。
Android Runtime是一种在Android操作系统上的运行环境,是Android操作系统所使用的一种新的虚拟机。在Android Runtime中,采用AOT(Ahead-Of-Time)技术,应用程序在第一次安装的时候,该应用程序的字节码就会被预先编译成机器码,让程序成为真正的本地应用,之后再次运行,就省去了编译这一步骤,启动和执行都会变得更加快速。
在本申请另外的一些例子中,Android Runtime也可以由核心函数库(CoreLibraries)和Dalvik虚拟机(Dalvik Virtual Machine)代替。核心函数库提供了Java语言API(Application Programming Interface)中的大多数功能,主要通过JNI(Java NativeInterface)的方式向应用程序框架层提供调用底层程序库的接口。同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。Dalvik虚拟机使用一种JIT(Just-in-Time)的运行时编译的机制,每次启动一个进程都需要虚拟机在后台重新编译字节码,会对启动速度有一定的影响。每一个Android应用程序都运行在是一个Dalvik虚拟机中的实例中,每一个Dalvik虚拟机实例都是一个独立的进程空间。Dalvik虚拟机设计成在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。需要提出的是Dalvik虚拟机依赖于Linux内核提供基本功能(线程、底层内存管理)。可以理解的是,Android Runtime、Dalvik属于不同类型的虚拟机,本领域技术人员可以在不同情况下选用不同形式的虚拟机。
4、Linux内核层:
Android的核心系统服务,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都基于Linux内核。Linux内核同时也作为硬件和软件栈之间的抽象层。该层有许多与移动设备相关的驱动程序,主要的驱动有:显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动。键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。Flash驱动(Flash Memory Driver):基于MTD(memory technology device内存技术设备)的Flash驱动程序。照相机驱动(Camera Driver):常用的基于Linux的v4l2(Video for Linux)驱动。音频驱动(Audio Driver):常用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。WiFi驱动(WiFi Drive):基于IEEE 802.11标准的驱动程序。Binder(IPC)驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。电源管理(Power Management):比如电池电量等。
在模拟器运行过程中,传输管道pipe的带宽大小影响着渲染指令传输的快慢,如果管道带宽小,可能造成渲染指令传输较慢,从而导致个人计算机的GPU利用率低(也叫GPU饥饿现象),使得模拟器性能下降。目前市面上的模拟器支持的最大带宽能力约为1GB/s–2GB/s,可以渲染普通的1080P游戏画面(1080P画面的带宽大约是500MB/s);但随着越来越多高清游戏画面的出现,模拟器的渲染越来越力不从心,例如4K游戏画面所需的带宽大约是2GB/s,已经超过了普通模拟器所能支持的最大带宽能力,所以会出现画面掉帧、卡顿等现象,影响用户体验。所以,亟需提高模拟器的传输能力。
本申请针对以上问题,提出可以压缩渲染指令的解决方案,通过压缩渲染指令,可以减小渲染指令的传输数据量,使之降低到模拟器传输管道所能支持的带宽能力之内。这样可以顺利、及时地传输渲染指令,避免出现画面掉帧、卡顿等现象,提高渲染流畅度,改善用户体验。
然而,并不是所有渲染指令都支持压缩。渲染指令可以分为同步执行渲染指令和异步执行渲染指令。同步执行渲染指令需要同步执行且等待返回值,异步执行渲染指令需要异步执行且不需要等待返回值。同步执行某个指令,需要等待这个指令执行完成,取得返回值后才能执行其他指令,而异步执行可以并发执行,无需等待返回值。对于多条同步执行渲染指令,需要等待一个指令执行完得到返回值结果后,才能执行下一个指令,所以多条同步执行渲染指令不能一起压缩后发送。
图3提供了一种在模拟器中处理渲染指令的方法,该方法包括以下步骤:
301:遍历待发送的渲染指令,所述待发送的渲染指令包括同步执行渲染指令和异步执行渲染指令。
模拟器客户端在运行的过程中,例如打开模拟器中的游戏开始运行时,需要发送渲染指令给移动终端处理。在发送渲染指令前,模拟器客户端可以遍历待发送的渲染指令,这些待发送的渲染指令可以包括同步执行渲染指令和异步执行渲染指令。遍历可以按照待发送的渲染指令的先后顺序逐一检测。
302:将遍历得到的异步执行渲染指令进行压缩,得到第一指令压缩包。
对于遍历得到的异步执行渲染指令(也可以叫做第一异步执行渲染指令集合),模拟器客户端可以对其进行压缩,以减小传输所需要的带宽。异步执行渲染指令不需要同步执行,也不需要等待返回值,所以可以进行压缩,得到第一指令压缩包。对于同步执行渲染指令,则可以不进行压缩来传输。
303:发送第一指令压缩包。
模拟器客户端可以把渲染指令发送给移动终端来处理。由于步骤301对异步执行渲染指令进行了压缩,可以满足传输管道的带宽要求。移动终端通过传输管道介绍该第一指令压缩包。
304:解压缩第一指令压缩包,执行解压缩得到的异步执行渲染指令。
移动终端对收到的第一指令压缩包进行解压缩,得到需要渲染的异步执行渲染指令。这些渲染指令可以发送给GPU进行渲染,生成相应的渲染画面。
如图4所示,例如使用安卓模拟器运行游戏应用,模拟器客户端可以检测待发送的3条渲染指令——分别是A渲染指令,B渲染指令和C渲染指令,其中A渲染指令、B渲染指令是异步执行渲染指令,C渲染指令是同步执行渲染指令。
模拟器客户端对上述待发送的3条渲染指令进行遍历,依次得到A渲染指令和B渲染指令这两条异步执行渲染指令,模拟器客户端可以暂时保存(比如存储在系统缓存中)、不立即发送给host端,而是对这两条异步执行渲染指令进行压缩,得到第一指令压缩包。然后,模拟器客户端将第一指令压缩包发送给host端解压缩,host端得到解压缩后的A渲染指令和B渲染指令。这两条渲染指令可以发送给GPU执行,得到渲染画面。对于C渲染指令,因为是同步执行渲染指令,需要同步执行且得到返回值,所以不能压缩到第一指令压缩包,而是单独发送给host端交给GPU执行。
可选的,对于模拟器遍历到的渲染指令,可以提前检测渲染指令的类型并进行标记,例如对于返回值为void的渲染指令,可以标记为异步执行渲染指令;对于返回值为非void的渲染指令,可以标记为同步执行渲染指令。标记后对异步执行渲染指令(可压缩)和同步执行渲染指令(不可压缩)进行分类并存储。在下一次运行应用的时候,可以直接调用存储的已标记的渲染指令分类,而不需要再次检测,从而节约运行时间。可选的,除非重新安装模拟器,或者用户删除应用程序数据,才需要重新检测分类。
可选的,也可以使用指令函数符号表来提前检测渲染指令的类型并进行标记。指令函数符号表是一种预设的符号表,可以通过查表知道某条指令是同步执行渲染指令还是异步执行渲染指令。例如,对于以下渲染指令:syn-h-wb-4b-whnc-10y-whenrub-return(1),通过指令函数符号表查表可知这是一条同步执行指令。
当然,由于压缩渲染指令也要消耗时间和CPU资源,所以还有一种模拟器处理渲染指令的方法,如图5所示,包括以下步骤:
501:检测模拟器中当前运行的应用所需要的第一带宽;
模拟器中当前运行的应用,可以是已经启动的应用,也可以是用户将要启动的应用。对于不同的应用(例如普通游戏和高清游戏),所需要的带宽是不一样的。可选的,由于某些应用可以在启动后选择不同的显示模式(例如普通和高清),可以在检测到显示模式后再检测需要的带宽。
502:判断第一带宽是否超过模拟器支持的最大带宽能力。
不同的模拟器有不同的最大带宽能力。如果第一带宽没有超过模拟器支持的最大带宽能力,则不需要压缩渲染指令。
503:如果第一带宽超过模拟器支持的最大带宽能力,遍历待发送的渲染指令。
如果第一带宽超过模拟器支持的最大带宽能力,则需要压缩渲染指令,以满足传输管道的带宽要求,否则会出现画面卡顿、掉帧现象。
504:将遍历得到的异步执行渲染指令进行压缩,得到第一指令压缩包。
505:发送第一指令压缩包。
506:解压缩第一指令压缩包,执行解压缩得到的异步执行渲染指令。
通过图5的方法,可以提前对模拟器支持的最大带宽能力进行判断,如果最大带宽能力支持当前应用,则不需要压缩渲染指令。
在实际运行过程中,模拟器可能要发送很多条渲染指令,这里面既有同步执行渲染指令,也有异步执行渲染指令。图6提供了另一种模拟器中处理渲染指令的方法,包括以下步骤:
601:遍历待发送的渲染指令,所述待发送的渲染指令包括同步执行渲染指令和异步执行渲染指令。
602:如果遍历得到同步执行渲染指令,则暂停遍历,执行步骤606;如果遍历得到异步执行渲染指令,则继续遍历,当遇到同步执行指令时暂停遍历。
由于只能对异步执行渲染指令进行压缩,所以只要遍历得到同步执行渲染指令,就需要暂停遍历,先发送该同步执行渲染指令(步骤606)。如果遍历得到的是异步执行渲染指令,则暂不发送,而是继续遍历其余的异步执行渲染指令,直到遇到下一条同步执行渲染指令,然后,对于得到的这些异步执行渲染指令可以进行压缩后发送,随后发送同步执行渲染指令。
603:将步骤602遍历得到的异步执行渲染指令进行压缩,得到第一指令压缩包。
604:发送第一指令压缩包。
605:解压缩第一指令压缩包,执行解压缩得到的异步执行渲染指令。
606:发送步骤602遍历得到的同步执行渲染指令,执行该同步执行渲染指令。
607:继续遍历待发送的渲染指令,重复执行步骤602-606.
通过图6的方法,可以应对存在多条渲染指令的场景,提高传输效率。
如图7所示,例如使用安卓模拟器运行游戏应用,模拟器客户端可以检测待发送的4条渲染指令——分别是A渲染指令,B渲染指令、C渲染指令和D渲染指令,其中A渲染指令、B渲染指令和D渲染指令是异步执行渲染指令,C渲染指令是同步执行渲染指令。
模拟器客户端对上述待发送的4条渲染指令进行遍历,依次得到A渲染指令和B渲染指令这两条异步执行渲染指令,模拟器客户端可以暂时保存、不立即发送给host端,而是继续遍历,然后遇到同步执行渲染指令——C渲染指令,则暂停遍历,对得到的两条异步执行渲染指令进行压缩,得到第一指令压缩包。然后,模拟器客户端将第一指令压缩包发送给host端解压缩,host端得到解压缩后的A渲染指令和B渲染指令。这两条渲染指令可以发送给GPU执行,得到渲染画面。对于C渲染指令,因为是同步执行渲染指令,需要同步执行且得到返回值,所以不能压缩到第一指令压缩包,而是单独发送给host端交给GPU执行。然后继续遍历其余的渲染指令,如D渲染指令,因为是异步执行渲染指令,就继续遍历直到遇到下一条同步执行渲染指令。。。重复上述步骤。
下面介绍三个具体的场景:
第一个场景是使用模拟器玩高清游戏(例如画面达到4K分辨率以上)。对于这个场景,用户在打开高清游戏(或者在游戏的设置里选择高清模式)后,模拟器guest端可以收到游戏启动事件的消息。guest端可以遍历当前待发送的渲染指令,根据函数符号表将当前的渲染指令分为同步执行渲染指令和异步执行渲染指令。对于异步执行渲染指令,可以暂时不发送,而是和遍历到的其他异步执行渲染指令一起进行压缩后发送给host端执行渲染处理。对于遍历到的同步执行渲染指令,可以单独发送。
第二个场景是使用模拟器观看高清视频(例如画面达到4K分辨率以上)。用户在打开高清视频(或者在视频的播放设置里选择高清模式)后,模拟器guest端可以收到视频播放事件的消息。guest端可以遍历当前待发送的渲染指令,根据函数符号表将当前的渲染指令分为同步执行渲染指令和异步执行渲染指令。对于异步执行渲染指令,可以暂时不发送,而是和遍历到的其他异步执行渲染指令一起进行压缩后发送给host端执行渲染处理。对于遍历到的同步执行渲染指令,可以单独发送。可选的,在开始播放之前,可以先把视频需要的带宽和模拟器支持的最大带宽能力做对比,如果超出模拟器支持的最大带宽能力,则需要对遍历得到的异步执行渲染指令进行压缩。
第三个场景是使用模拟器办公的场景。用户在打开办公软件后,模拟器guest端可以收到开始办公事件的消息。guest端可以遍历当前待发送的渲染指令,根据函数符号表将当前的渲染指令分为同步执行渲染指令和异步执行渲染指令。对于异步执行渲染指令,可以暂时不发送,而是和遍历到的其他异步执行渲染指令一起进行压缩后发送给host端执行渲染处理。对于遍历到的同步执行渲染指令,可以单独发送。可选的,在开始办公之前,可以先把办公软件需要的带宽和模拟器支持的最大带宽能力做对比,如果超出模拟器支持的最大带宽能力,则需要对遍历得到的异步执行渲染指令进行压缩。
本申请还提供一种移动终端,所述移动终端包括一个或多个处理器,存储器,一个或多个程序;其中,一个或多个程序被存储在存储器中并被配置为被一个或多个处理器执行,这一个或多个程序包括指令,该指令用于执行上述图3-图7所述的方法。
本申请还提供一种存储介质,用于存储计算机软件指令,该指令用于执行上述图3-图7所述的方法。
本申请还提供一种计算机程序产品,当运行所述计算机程序产品时,使得计算机执行上述图3-图7所述的方法。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (12)

1.一种在模拟器中处理渲染指令的方法,其特征在于,所述方法包括:
遍历待发送的渲染指令,所述待发送的渲染指令包括同步执行渲染指令和异步执行渲染指令;
将遍历得到的所述异步执行渲染指令进行压缩,得到第一指令压缩包;
发送所述第一指令压缩包;
解压缩所述第一指令压缩包,执行解压缩得到的所述异步执行渲染指令。
2.根据权利要求1所述的方法,其特征在于,所述遍历待发送的渲染指令,包括:
按照待发送的顺序逐一检测所述待发送的渲染指令。
3.根据权利要求1所述的方法,其特征在于,所述执行解压缩得到的所述异步执行渲染指令,包括:
将所述异步执行渲染指令发送给GPU,由所述GPU生成渲染画面。
4.根据权利要求1-3所述的方法,其特征在于,所述方法还包括:
发送遍历得到的所述同步执行渲染指令。
5.根据权利要求1-4所述的方法,其特征在于,在所述遍历待发送的渲染指令之前,所述方法还包括:
检测渲染指令的类型并进行标记。
6.根据权利要求5所述的方法,其特征在于,所述检测渲染指令的类型,包括:
对于返回值为void的渲染指令,标记为异步执行渲染指令;对于返回值为非void的渲染指令,标记为同步执行渲染指令。
7.根据权利要求5所述的方法,其特征在于,所述检测渲染指令的类型,包括:
使用指令函数符号表来检测所述渲染指令的类型。
8.根据权利要求1-7所述的方法,其特征在于,在所述遍历待发送的渲染指令之前,所述方法还包括:
检测所述模拟器中当前运行的应用所需要的第一带宽;
判断所述第一带宽是否超过所述模拟器支持的最大带宽能力。
9.根据权利要求1-8所述的方法,其特征在于:所述遍历待发送的渲染指令,包括:
如果遍历得到同步执行渲染指令,则暂停遍历并发送所述同步执行渲染指令;
如果遍历得到异步执行渲染指令,则继续遍历,直到遇到同步执行指令时暂停遍历。
10.一种移动终端,所述移动终端包括一个或多个处理器,存储器,一个或多个程序;其中,所述一个或多个程序被存储在所处存储器中并被配置为被所述一个或多个处理器执行,所述一个或多个程序包括指令,所述指令用于执行如权利要求1-9所述的方法。
11.一种存储介质,用于存储计算机软件指令,所述计算机软件指令用于执行如权利要求1-9所述的方法。
12.一种计算机程序产品,当运行所述计算机程序产品时,使得计算机执行如权利要求1-9所述的方法。
CN201911012928.0A 2019-10-23 2019-10-23 一种在模拟器中处理渲染指令的方法及移动终端 Active CN110968395B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911012928.0A CN110968395B (zh) 2019-10-23 2019-10-23 一种在模拟器中处理渲染指令的方法及移动终端
PCT/CN2020/122528 WO2021078161A1 (zh) 2019-10-23 2020-10-21 一种在模拟器中处理渲染指令的方法及移动终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911012928.0A CN110968395B (zh) 2019-10-23 2019-10-23 一种在模拟器中处理渲染指令的方法及移动终端

Publications (2)

Publication Number Publication Date
CN110968395A true CN110968395A (zh) 2020-04-07
CN110968395B CN110968395B (zh) 2024-02-09

Family

ID=70029840

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911012928.0A Active CN110968395B (zh) 2019-10-23 2019-10-23 一种在模拟器中处理渲染指令的方法及移动终端

Country Status (2)

Country Link
CN (1) CN110968395B (zh)
WO (1) WO2021078161A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112214370A (zh) * 2020-10-28 2021-01-12 京东数字科技控股股份有限公司 一种大屏终端的调试设备及方法
CN112256219A (zh) * 2020-10-13 2021-01-22 北京小米移动软件有限公司 显示方法及装置、终端及存储介质
WO2021078161A1 (zh) * 2019-10-23 2021-04-29 华为技术有限公司 一种在模拟器中处理渲染指令的方法及移动终端
CN114025238A (zh) * 2022-01-10 2022-02-08 北京蔚领时代科技有限公司 基于Linux服务器原生安卓应用云端虚拟化方法
CN114035967A (zh) * 2022-01-10 2022-02-11 北京蔚领时代科技有限公司 一种基于服务器的资源共享渲染方法和装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526915A (zh) * 2009-04-28 2009-09-09 中国人民解放军国防科学技术大学 并行模拟中支持踪迹文件并行输入输出的方法
CN104142852A (zh) * 2014-08-04 2014-11-12 福州靠谱网络有限公司 在电脑上实现安卓模拟器图形加速方法
CN104156213A (zh) * 2014-08-12 2014-11-19 百度在线网络技术(北京)有限公司 安卓应用的运行方法及装置
US20150082298A1 (en) * 2013-09-19 2015-03-19 Qiu Shi WANG Packaging and deploying hybrid applications
CN104679486A (zh) * 2013-11-28 2015-06-03 华为技术有限公司 一种图形数据的处理方法、装置及系统
CN105224390A (zh) * 2015-09-22 2016-01-06 宁夏大学 一种虚拟桌面压缩的方法
CN107741863A (zh) * 2017-10-08 2018-02-27 深圳市星策网络科技有限公司 一种显卡的驱动方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110968395B (zh) * 2019-10-23 2024-02-09 华为技术有限公司 一种在模拟器中处理渲染指令的方法及移动终端

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526915A (zh) * 2009-04-28 2009-09-09 中国人民解放军国防科学技术大学 并行模拟中支持踪迹文件并行输入输出的方法
US20150082298A1 (en) * 2013-09-19 2015-03-19 Qiu Shi WANG Packaging and deploying hybrid applications
CN104679486A (zh) * 2013-11-28 2015-06-03 华为技术有限公司 一种图形数据的处理方法、装置及系统
WO2015078156A1 (zh) * 2013-11-28 2015-06-04 华为技术有限公司 一种图形数据的处理方法、装置及系统
CN104142852A (zh) * 2014-08-04 2014-11-12 福州靠谱网络有限公司 在电脑上实现安卓模拟器图形加速方法
CN104156213A (zh) * 2014-08-12 2014-11-19 百度在线网络技术(北京)有限公司 安卓应用的运行方法及装置
CN105224390A (zh) * 2015-09-22 2016-01-06 宁夏大学 一种虚拟桌面压缩的方法
CN107741863A (zh) * 2017-10-08 2018-02-27 深圳市星策网络科技有限公司 一种显卡的驱动方法和装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021078161A1 (zh) * 2019-10-23 2021-04-29 华为技术有限公司 一种在模拟器中处理渲染指令的方法及移动终端
CN112256219A (zh) * 2020-10-13 2021-01-22 北京小米移动软件有限公司 显示方法及装置、终端及存储介质
CN112214370A (zh) * 2020-10-28 2021-01-12 京东数字科技控股股份有限公司 一种大屏终端的调试设备及方法
CN114025238A (zh) * 2022-01-10 2022-02-08 北京蔚领时代科技有限公司 基于Linux服务器原生安卓应用云端虚拟化方法
CN114035967A (zh) * 2022-01-10 2022-02-11 北京蔚领时代科技有限公司 一种基于服务器的资源共享渲染方法和装置
CN114025238B (zh) * 2022-01-10 2022-04-05 北京蔚领时代科技有限公司 基于Linux服务器原生安卓应用云端虚拟化方法

Also Published As

Publication number Publication date
WO2021078161A1 (zh) 2021-04-29
CN110968395B (zh) 2024-02-09

Similar Documents

Publication Publication Date Title
CN110968395B (zh) 一种在模拟器中处理渲染指令的方法及移动终端
AU2019233201B2 (en) Resource configuration method and apparatus, terminal, and storage medium
US8675000B2 (en) Command buffers for web-based graphics rendering
CN108563517B (zh) 系统接口的调用方法及装置
US8957905B2 (en) Cross-environment user interface mirroring
EP2622463B1 (en) Instant remote rendering
US9928637B1 (en) Managing rendering targets for graphics processing units
CN110059004B (zh) 一种应用测试的方法、装置、设备和介质
CN111736850B (zh) 图像处理方法、装置、服务器及介质
CN111292387B (zh) 动态图片的加载方法、装置、存储介质及终端设备
CN112257135A (zh) 一种基于多线程的模型加载方法、装置、存储介质及终端
CN110399214B (zh) 一种优化显卡负载的方法、装置及计算机设备
US20240307767A1 (en) Cloud Data Processing
US20200210213A1 (en) Display method of multi-application based on android system, and terminal device
CN112023402B (zh) 游戏数据处理方法、装置、设备以及介质
WO2022150080A1 (en) Method and apparatus for media scene description
US20230418783A1 (en) Method and apparatus for media scene description
CN116546228B (zh) 用于虚拟场景的推流方法、装置、设备及存储介质
CN111971655A (zh) 用于超文本标记语言图形内容的本机运行时技术
CN114028801A (zh) 基于云端的用户输入方法、装置、设备及存储介质
CN113835816A (zh) 一种虚拟机桌面显示方法、装置、设备及可读存储介质
CN118276983B (zh) 浏览器引擎切换微内核组件的方法及嵌入式装置和家电设备
US12121807B2 (en) Image processing method using a shared GPU shader cache mechanism and apparatus, server, and medium
CN118656141A (zh) 一种管理浏览器引擎内核插件的方法及用于家电设备的嵌入式装置和家电设备
CN115705272A (zh) 一种页面测试的方法、相关装置及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant