CN112346935A - 渲染耗时的获取、显示方法、性能监控方法、装置及设备 - Google Patents
渲染耗时的获取、显示方法、性能监控方法、装置及设备 Download PDFInfo
- Publication number
- CN112346935A CN112346935A CN202011263374.4A CN202011263374A CN112346935A CN 112346935 A CN112346935 A CN 112346935A CN 202011263374 A CN202011263374 A CN 202011263374A CN 112346935 A CN112346935 A CN 112346935A
- Authority
- CN
- China
- Prior art keywords
- rendering
- instruction
- time
- game
- gpu
- 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.)
- Pending
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 504
- 238000000034 method Methods 0.000 title claims abstract description 177
- 238000012544 monitoring process Methods 0.000 title claims abstract description 29
- 230000008569 process Effects 0.000 claims abstract description 31
- 230000001960 triggered effect Effects 0.000 claims abstract description 22
- 238000012545 processing Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 4
- 230000009286 beneficial effect Effects 0.000 abstract description 10
- 230000006870 function Effects 0.000 description 51
- 238000010586 diagram Methods 0.000 description 17
- 238000004590 computer program Methods 0.000 description 10
- 238000011161 development Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 5
- 239000000306 component Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000002452 interceptive effect Effects 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000008358 core component Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 238000012806 monitoring device Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 208000001034 Frostbite Diseases 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 208000015041 syndromic microphthalmia 10 Diseases 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开一种渲染耗时的获取、显示方法、性能监控方法、装置及设备。该渲染耗时的获取方法通过在目标程序设定第一指令和第二指令,第一指令在目标程序中每一帧画面的渲染子程序执行前被触发,第二指令在渲染子程序执行后被触发,使得游戏运行过程中可以在每帧游戏画面渲染前后,触发应用性能监控程序调用图形应用程序接口对GPU渲染耗时进行查询,从而获取到精确有效的GPU渲染耗时;该方法为游戏用户提供了简易地获取GPU渲染耗时的手段,既无需获取游戏终端的管理员权限进入开发者模式进行复杂操作,也不影响游戏的正常运行,方便GPU性能信息的获取,有利于帮助用户快速定位硬件的性能问题。本申请可广泛应用于游戏技术领域。
Description
技术领域
本申请涉及游戏技术领域,尤其是一种渲染耗时的获取、显示方法、性能监控方法、装置及设备。
背景技术
互联网信息时代,供人们娱乐休闲的方式愈发多样化。在这其中,各式各样的电子游戏往往受到大众的青睐,成为放松益智、社交娱乐的重要工具。
对于广大用户来说,一款电子游戏是否受欢迎,游戏体验是他们比较关注的因素,而游戏体验的良好与否,既与游戏本身的设计有关,也与运行游戏的硬件设备有关,例如处理游戏数据的处理器,显示游戏画面的显卡等。其中,GPU(Graphics Processing Unit,图形处理器)是和游戏画面渲染计算任务相关的一种硬件设备,GPU渲染游戏画面的运算速度,对游戏画面刷新的流畅性很重要,通过确定GPU处理一帧画面运算所消耗的时间(简称为GPU渲染耗时),可以有效分析GPU的性能。但是,相关的电子游戏中,往往只是在开发阶段由游戏引擎获取GPU渲染耗时的数据提供给游戏开发者做参考,主要用于分析哪些地方存在渲染问题,便于游戏的进一步完善;而在游戏运行时,用户获取GPU渲染耗时则比较困难,可能需要获取终端设备的管理员权限进入开发者模式,对终端设备了解较少的用户很容易出现误操作。综上,游戏用户想要对GPU运行游戏时的渲染性能进行评估时,获取GPU渲染耗时十分困难,相关技术存在的问题亟需得到解决。
发明内容
本申请的目的在于至少一定程度上解决相关技术中存在的技术问题之一。
为此,本申请实施例的一个目的在于提供一种渲染耗时的获取方法、显示方法,该获取方法可有效获取游戏运行中的GPU渲染耗时信息,且实现过程简单便捷。
本申请实施例的另一个目的在于提供一种游戏性能监控方法,可帮助用户快速定位硬件设备的性能问题。
为了达到上述技术目的,本申请实施例所采取的技术方案包括:
一方面,本申请实施例提供一种渲染耗时的获取方法,该方法包括以下步骤:
响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
响应于所述目标程序中的第二指令,调用所述图形应用程序接口终止所述GPU渲染耗时查询任务;
获取所述GPU渲染耗时查询任务返回的所述渲染耗时;
其中,所述第一指令在所述目标程序中每一帧画面的渲染子程序执行前被触发,所述第二指令在所述渲染子程序执行后被触发。
另一方面,本申请实施例还提供另一种渲染耗时获取方法,该方法包括以下步骤:
运行目标程序和应用性能监控程序;
在所述目标程序中的渲染子程序执行前触发第一指令;所述第一指令用于调用应用性能监控程序向图形应用程序接口发送第一调用指令,所述第一调用指令用于触发图形应用程序接口启动GPU渲染耗时查询任务;
在所述渲染子程序执行后触发第二指令;所述第二指令用于调用所述应用性能监控程序向所述图形应用程序接口发送第二调用指令,所述第二调用指令用于触发图形应用程序接口终止所述GPU渲染耗时查询任务;
获取得到所述GPU渲染耗时查询任务返回的所述渲染耗时。
另一方面,本申请实施例还提供一种渲染耗时的显示方法,该方法包括以下步骤:
通过前面所述的渲染耗时的获取方法获取游戏运行时的GPU渲染耗时;
在所述游戏的画面上,显示所述GPU渲染耗时的信息。
另一方面,本申请实施例还提供一种游戏性能监控方法,该方法包括以下步骤:
获取游戏运行中的CPU使用率;
通过前面所述的渲染耗时的获取方法获取游戏运行中的GPU渲染耗时;
当所述CPU使用率高于第一阈值且所述GPU渲染耗时低于第二阈值,将所述CPU确定为所述游戏渲染性能的硬件瓶颈;
或者,
当所述CPU使用率低于第三阈值且所述GPU渲染耗时高于第四阈值,将所述GPU确定为所述游戏渲染性能的硬件瓶颈。
另一方面,本申请实施例还提供一种渲染耗时的获取装置,包括:
第一处理单元,用于响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
第二处理单元,用于响应于所述目标程序中的第二指令,调用所述图形应用程序接口终止所述GPU渲染耗时查询任务;
获取单元,用于获取所述GPU渲染耗时查询任务返回的所述渲染耗时;
其中,所述第一指令在所述目标程序中每一帧画面的渲染子程序执行前被触发,所述第二指令在所述渲染子程序执行后被触发。
另一方面,本申请实施例提供一种终端设备,所述终端设备搭载有图形应用程序接口,所述终端设备用于通过前面所述的渲染耗时的获取方法获取GPU渲染耗时,并显示所述GPU渲染耗时。
另一方面,本申请实施例提供一种计算机设备,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现前面所述的渲染耗时的获取方法、渲染耗时的显示方法或者游戏性能监控方法中的至少一个。
另一方面,本申请实施例还提供了一种计算机可读存储介质,其中存储有处理器可执行的程序,前面所述处理器可执行的程序在由处理器执行时用于实现前面所述的渲染耗时的获取方法、渲染耗时的显示方法或者游戏性能监控方法中的至少一个。
另一方面,本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在前面所述的计算机可读存储介质中;前面所述的计算机设备的处理器可以从前面所述的计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面所述的渲染耗时的获取方法、渲染耗时的显示方法或者游戏性能监控方法中的至少一个。
本申请的优点和有益效果将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到:
本申请实施例中渲染耗时的获取方法,通过在目标程序设定第一指令和第二指令,第一指令在目标程序中每一帧画面的渲染子程序执行前被触发,第二指令在渲染子程序执行后被触发,使得游戏运行过程中可以在每帧游戏画面渲染前后,触发应用性能监控程序调用图形应用程序接口对GPU渲染耗时进行查询,从而获取到精确、有效的GPU渲染耗时;该方法为游戏用户提供了简易地获取GPU渲染耗时的手段,既无需获取游戏终端的管理员权限进入开发者模式进行复杂操作,也不影响游戏的正常运行,方便GPU性能信息的获取。本申请实施例中游戏性能监控方法,通过将CPU使用率和GPU渲染耗时与预定的阈值分别对比,确定限制游戏渲染性能的硬件瓶颈,有利于帮助用户快速定位硬件的性能问题。
附图说明
为了更清楚地说明本申请实施例或者相关技术中的技术方案,下面对本申请实施例或者相关技术中的技术方案附图作以下介绍,应当理解的是,下面介绍中的附图仅仅为了方便清晰表述本申请的技术方案中的部分实施例,对于本领域的技术人员来说,在无需付出创造性劳动的前提下,还可以根据这些附图获取到其他附图。
图1为相关技术中一种电子游戏从开发到被实施的过程示意图;
图2为相关技术中一种电子游戏的游戏画面渲染过程的数据处理示意图;
图3为相关技术中另一种电子游戏的游戏画面渲染过程的数据处理示意图;
图4为本申请实施例中提供的一种渲染耗时的获取方法的流程示意图;
图5为本申请实施例中提供的一种渲染耗时的获取方法的终端设备获取GPU渲染耗时过程中程序与接口的交互示意图;
图6为本申请实施例中提供的另一种渲染耗时的获取方法的流程示意图;
图7为本申请实施例中提供的一种渲染一帧游戏画面时GPU执行渲染指令的示意图;
图8为本申请实施例中提供的另一种渲染一帧游戏画面时GPU执行渲染指令的示意图;
图9为本申请实施例中提供的另一种渲染一帧游戏画面时GPU执行渲染指令的示意图;
图10为相关技术中一种Unity游戏引擎的部分脚本生命周期示意图;
图11为本申请实施例中提供的一种渲染耗时的显示方法的流程示意图;
图12为本申请实施例中提供的一种终端设备的界面示意图;
图13为本申请实施例中提供的一种游戏性能监控方法的流程示意图;
图14为本申请实施例中提供的一种渲染耗时的获取装置的结构示意图;
图15为本申请实施例中提供的一种计算机设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。对于以下实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行详细说明之前,首先对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
游戏引擎:指一些已经编写好的可编辑电子游戏系统或者一些交互式实时图像应用程序的核心组件。游戏引擎主要为电子游戏的开发者提供各种编写游戏程序所需的工具,其目的在于让开发者更容易、快速地做出游戏程序而无需从零开始。相关技术中,游戏引擎可以包含以下系统:渲染引擎(包括二维图像引擎或者三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理等。
GPU渲染耗时:指在执行一帧画面的渲染任务中,GPU运算所消耗的时间。
应用程序接口(Application Programming Interface,API),又称为应用编程接口、应用程序编程接口,就是软件系统不同组成部分衔接的约定。由于软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,因此应用程序接口的设计十分重要,良好的应用程序接口可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
Hook:又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成嵌入想要临时执行的代码片段。
随着互联网技术的飞速发展,在工作学习之余,人们休闲娱乐的手段也越发多样化。在这其中,电子游戏是一种依托于终端设备实现的娱乐活动,因其丰富的游戏内容、多变的游戏体验而广受用户的喜爱。参照图1,图1示出了相关技术中一种电子游戏从开发到被实施的过程示意图,在该过程中,涉及的主体主要包括游戏开发者110、游戏平台120和用户130。
其中,游戏开发者110指的是电子游戏的制作者,例如可以包括制作电子游戏软件的企业、团体或者个人中的至少一个。游戏平台120指的是电子游戏的运营平台,在一些实施例中,游戏平台120可以是指操作系统,例如可以是Web Player平台、PC平台、IOS平台、Android平台等;在一些实施例中,游戏平台120也可以是指软件或者具有运行游戏功能的网页,例如可以是UPLAY、EPIC Games、暴雪游戏平台、Origin、Steam、WeGame等;在一些实施例中,游戏平台120也可以是指游戏的后台服务器,该后台服务器可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云存储等业务的云服务器;在一些实施例中,游戏平台120也可以是指为家用游戏机或者多功能掌上游戏机等硬件设备设计的专用系统。
用户130是电子游戏的玩家,用户130可以通过终端设备运行电子游戏。在一些实施例中,终端设备可以是家用游戏机、多功能掌上游戏机、智能手机、平板电脑、笔记本电脑或者台式计算机等的任意一种。
当一款电子游戏被游戏开发者110制作完成后,可以将该游戏的资源,例如包含游戏应用程序、环境配置、注册表等的压缩包上传到对应的游戏平台120发布,用户可以在游戏平台120上进行在线游戏,或者通过游戏平台120下载对应的游戏安装包安装到终端设备上游玩。当然,可以理解的是,游戏开发者110也可以通过游戏平台120对游戏内容进行调整,例如进行版本更新、BUG维护等工作。
对于游戏开发者110来说,由于游戏的更新迭代速度较快,而且绝大部分的游戏玩法已经固定化、模式化,例如比较典型的第一人称射击游戏(First-person shootinggame,FPS)、多人在线战术竞技游戏(Multiplayer Online Battle Arena,MOBA)等,同种类型的游戏可能有很多种,只是在设定和细节上存在一定的区别。如果开发这些游戏都从头开始编写代码,将会造成大量的重复劳动。而游戏引擎的出现良好地解决了这一问题,它是一种包括大量已编写好的可编辑电子游戏系统或者一些交互式实时图像应用程序的核心组件,可以为游戏开发者110提供各种编写电子游戏所需的工具,有助于容易、快速地做出游戏程式而不用从零开始。例如,在制作某一款第一人称射击类游戏时,游戏开发者110通过游戏引擎可以借用类似题材的游戏中的部分代码作为新游戏的基本框架,以节省大量开发时间和费用。通过游戏引擎制作出的游戏,只需要在游戏的资源包中搭载相应游戏引擎的环境配置,就能够供用户游玩,用户无需单独下载游戏引擎。相关技术中,运用比较多的游戏引擎包括Unity引擎、Creation引擎、Unreal引擎、Frostbite引擎等。随着电子游戏的画面进入3D时代后,游戏引擎的使用不但能够令游戏开发工作事半功倍,还能带来丰富的游戏画面和细节的纹理表现,很大程度上提高了电子游戏的质量。
对于广大的用户130而言,一款电子游戏是否受欢迎,游戏体验是其最关注的部分。而游戏体验不但和游戏本身的质量有关,也和用户所使用硬件设备的性能,即电子游戏运行的硬件环境相关。如果用户所使用的硬件设备本身性能不佳或者出现了故障,可能游戏运行的效果会受到较大的影响。其中,GPU是主要用来处理游戏画面渲染工作的硬件设备之一,GPU的性能对游戏画面刷新的流畅性很重要,若用户终端设备的GPU性能较差,游戏画面往往会出现掉帧、卡顿或者显示错误的情况;CPU作为处理游戏运行数据的中枢,其性能也和游戏画面的渲染效果及呈现效果存在较大的关系。如果用户在游戏运行过程中出现了画面显示的问题,一般通过对CPU和GPU进行分析便可以大致定位出游戏性能出现问题的原因。对于用户来说,CPU的性能可以通过CPU利用率等信息进行分析,但是GPU的渲染性能更偏底层,分析起来就不是很方便,例如GPU渲染一帧游戏画面运算所消耗的时间(简称为GPU渲染耗时)对用户来说就很难得到。相关技术中,GPU渲染耗时一般是由游戏引擎或者游戏平台提供给游戏开发者110,用于辅助游戏的开发,例如进行游戏画面渲染瓶颈的定位。当游戏开发完毕,搭载对应的游戏引擎环境发布后,用户侧的终端设备在运行游戏时是无法使用这些信息的,可能需要用户130获取终端设备的管理员权限,进入开发者模式才能实现,对于用户来说是比较困难的,很容易出现操作失误。而如果采用Hook(钩子)技术,即在游戏运行时,通过替换游戏程序中的部分代码,嵌入一段执行查询GPU渲染耗时任务的程序,这相当于临时改变了游戏本身的功能,对游戏运行的稳定性会造成不利影响,可能导致游戏的崩溃,比较影响用户的体验。
有鉴于此,本申请实施例中,提供一种渲染耗时的获取方法,该方法可有效获取游戏运行中的GPU渲染耗时信息,既无需获取游戏终端的管理员权限进入开发者模式进行复杂操作,也不影响游戏的正常运行,且实现过程简单,便于开发人员实施后供用户侧获取。
在对本申请实施例中提供的渲染耗时的获取方法进行详细说明之前,首先对相关技术中游戏画面的渲染过程做简单介绍。参照图2,图2示出了相关技术中一种电子游戏的游戏画面渲染过程的数据处理示意图,当电子游戏被开发出来后,其以游戏程序的形式被发布到游戏平台上,当游戏程序在用户侧的终端设备上运行时,终端设备的CPU主要用于确认游戏画面中的哪些对象需要被渲染,当收集完毕需要被渲染的每一个对象的数据后,CPU将这些数据整合成渲染指令序列的形式,通过调用图形应用程序接口向GPU发送需要处理的渲染任务,该渲染指令序列经过显卡驱动翻译后被GPU执行,GPU完成游戏画面的渲染数据计算工作,并将结果存入到帧缓冲区中,帧缓冲区中的帧被发送到显示器上,即可向用户呈现出渲染后的游戏画面。
参照图3,简单来说,在游戏的运行过程中,硬件设备协同负责处理游戏程序,其中CPU负责每一帧游戏画面所涉及整体工作的协调,对于渲染工作的实际执行,则是CPU形成对应的游戏画面的渲染指令,通过相应的接口(和驱动)向GPU传输渲染指令序列,GPU从序列中接收渲染指令,负责处理完成相关数据的计算。图3中,对于一帧游戏画面所涵盖的游戏程序310,一般包括输入子程序,负责接收用户的操作指令;更新子程序,负责处理由用户的操作指令引起的游戏逻辑进程;渲染子程序3101,负责游戏画面的渲染工作,渲染子程序的处理过程涵盖了从CPU开始确定渲染对象、发送渲染指令给图像应用程序接口到GPU完成一帧画面的渲染工作的全部过程。游戏画面一般包括连续的多个帧,以图3中的第N-1帧、第N帧、第N+1帧(N为整数,且N大于等于2)为一组连续帧序列为例,CPU在处理第N-1帧、第N帧和第N+1帧时均会对应生成渲染指令发送给GPU运算,这些连续发送的渲染指令即为前述的渲染指令序列,图3中的渲染指令序列包括3个渲染指令。当然,应当理解的是,以上仅为连续帧序列的一种举例说明,实际游戏画面的帧数、渲染指令个数并不固定。
本申请实施例中提供一种渲染耗时的获取方法,该方法的执行主体可以是终端设备,该终端设备搭载有图形应用程序接口,可以是前述的家用游戏机、多功能掌上游戏机、智能手机、平板电脑、笔记本电脑或者台式计算机中的任意一种。参照图4和图5,图4为本申请实施例中在终端设备上实现渲染耗时的获取方法的一种可选的流程图,图5为本申请实施例中终端设备获取GPU渲染耗时过程中程序与接口的交互示意图。下面结合图4及图5对终端设备上实现渲染耗时的获取方法的过程做详细说明,图4中的步骤主要包括步骤410至步骤440:
步骤410、运行目标程序和应用性能监控程序;
步骤420、在目标程序中的渲染子程序执行前触发第一指令;第一指令用于使得应用性能监控程序向图形应用程序接口发送第一调用指令,第一调用指令用于调用图形应用程序接口启动GPU渲染耗时查询任务;
步骤430、在渲染子程序执行后触发第二指令;第二指令用于使得应用性能监控程序向图形应用程序接口发送第二调用指令,第二调用指令用于调用图形应用程序接口终止GPU渲染耗时查询任务;
步骤440、获取得到GPU渲染耗时查询任务返回的渲染耗时。
本申请实施例中,目标程序既可以是游戏程序本身,也可以是游戏程序中包括渲染子程序的一部分程序。终端设备上运行目标程序时,可以通过应用性能监控程序调用图形应用程序接口获取GPU渲染耗时,该过程主要涉及目标程序、应用性能监控程序和图形应用程序接口之间的交互。具体地,目标程序可以从游戏开发者发布的游戏资源中下载,该目标程序基于对应的游戏引擎环境可以在终端设备上被运行;应用性能监控程序主要用于获取渲染耗时,独立于游戏本身,例如可以是游戏插件、应用性能监控软件或者是依赖宿主程序运行的小程序等;图形应用程序接口是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口,这种接口一般由多种不同的函数调用组成,可以附带简单的函数功能,主要用来绘制从简单的图形比特到复杂的三维景象。例如该图形应用程序接口可以是OpenGL、OpenCL、Vulkan、OpenGL ES、WebGL、Metal、Directx等的任意一种,图形应用程序接口一般由显卡驱动自带,即终端设备在安装显卡驱动时可搭载图形应用程序接口。
本申请实施例中,可以由游戏开发者在目标程序中设定两个指令,分别记为第一指令和第二指令,其中,第一指令在目标程序中每一帧画面的渲染子程序执行前或者开始执行时触发,第一指令的目标对象是应用性能监控程序。具体地,游戏开发者可以提示用户设定好对应的应用性能监控程序以保证第一指令的顺利触发,例如可以在游戏资源中额外加入具有应用性能监控程序的游戏插件,或者提示用户安装对应的应用性能监控程序软件。设置第一指令的目的是通知该应用性能监控程序此时目标程序正在或者将要开始执行一帧画面的渲染任务(即渲染子程序),使得应用性能监控程序开始进行该帧画面GPU渲染耗时的获取;同样,第二指令的目标对象也是应用性能监控程序,设置第二指令的目的是通知该应用性能监控程序此时目标程序已经完成了一帧画面的渲染任务,使得应用性能监控程序结束该帧画面GPU渲染耗时的获取。应当说明的是,本申请实施例中的第一指令和第二指令作用的目标对象相同,即接收第一指令的应用性能监控程序和接收第二指令的应用性能监控程序为同一个应用性能监控程序;第一指令用于通知该应用性能监控程序开始GPU渲染耗时获取任务,第二指令用于通知该应用性能监控程序结束基于前面第一指令发起的GPU渲染耗时获取任务。并且可以理解的是,本申请实施例中,第一指令和第二指令的作用是为了向应用性能监控程序发送通知,第一指令和第二指令对于游戏来说无需返回结果,执行的情况也与游戏本身无关。换句话说,具体GPU渲染耗时的获取任务由应用性能监控程序执行,对于目标程序,也即游戏本身并无实质的改动,因此第一指令和第二指令的触发,并不会对游戏本身的运行产生负面的影响。
参照图5,当应用性能监控程序接收到第一指令后,向图形应用程序接口发送第一调用指令,第一调用指令用于调用图形应用程序接口启动GPU渲染耗时查询任务;当应用性能监控程序接收到第二指令后,向图形应用程序接口发送第二调用指令,第二调用指令用于调用图形应用程序接口终止GPU渲染耗时查询任务。结合图3,对于游戏画面的渲染来说,CPU可能需要一部分时间确定渲染对象,生成渲染指令,以及将渲染指令提交到接口,而实际GPU执行渲染指令完成渲染的过程只是执行渲染子程序的一部分,所以可以清晰得知执行渲染子程序的过程并不等价于GPU渲染的过程。而处理渲染任务时,由于需要调用图形应用程序接口告知GPU需要处理的具体数据,因此,从图形应用程序接口处确定GPU渲染耗时更为精确、合理。本申请实施例中,通过目标程序触发应用性能监控程序,进而调用图形应用程序接口来确定GPU渲染耗时,一方面可以有效减少对游戏本身的运行造成干扰,提高游戏运行的稳定性,另一方面可以使得GPU渲染耗时的确定结果相对更为准确,有利于帮助用户精准定位硬件的性能问题。
基于上述图5实施例中的阐述,本申请实施例中,还提供了另一种获取渲染耗时的方法,该方法的执行主体是前述的应用性能监控程序,该方法可以应用于终端设备中,例如将该应用性能监控程序安装在终端设备即可,该方法也可以应用于服务器中,还可以应用于终端或服务器中的软件,用于实现一部分的软件功能,例如可以应用于游戏插件、应用性能监控软件或者依赖宿主程序运行的小程序等,但并不局限于以上形式。参照图6,图6是本申请实施例提供的另一种渲染耗时的获取方法的一个可选的流程图,图6中所示出的方法主要包括步骤610至步骤630。
步骤610、响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
参照图5,本申请实施例中,对于图5中的应用性能监控程序而言,其可以在游戏运行的过程中同步运行,用于获取当前的GPU渲染耗时,具体地,该应用性能监控程序的运行位置则可以灵活调整,例如可以和游戏一起运行同一终端设备上,也可以是运行在服务器上,用于获取GPU渲染耗时为用户提供应用性能监控的服务。当目标程序运行到每一帧画面的渲染子程序执行前的某一个时刻(该时刻位于上一帧画面的渲染子程序执行后),触发目标程序中设定的第一指令,此时应用性能监控程序响应于该第一指令,向图形应用程序接口发送第一调用指令,第一调用指令用于调用图形应用程序接口启动GPU渲染耗时查询任务。
步骤620、响应于目标程序中的第二指令,调用图形应用程序接口终止GPU渲染耗时查询任务;
当目标程序运行到每一帧画面的渲染子程序执行后的某一个时刻(该时刻位于下一帧画面的渲染子程序执行前),触发目标程序中设定的第二指令,此时应用性能监控程序响应于该第二指令,向图形应用程序接口发送第二调用指令,第二调用指令用于调用图形应用程序接口终止GPU渲染耗时查询任务。
步骤630、获取GPU渲染耗时查询任务返回的渲染耗时;
本申请实施例中,当一帧游戏画面对应的游戏子程序中第一指令和第二指令都被触发后,即可完成一个GPU渲染耗时查询任务的闭环,应用性能监控程序可以由此获取到该任务返回的渲染耗时。由于图形应用程序接口的种类存在不同,因此对应GPU执行渲染指令的过程也存在一定的差别,本申请实施例中,针对GPU执行渲染指令的具体情况,提供了多种GPU渲染耗时查询任务的执行方式。下面结合附图对GPU渲染耗时查询任务的详细过程进行说明。
具体地,参照图7,图7中为一种渲染一帧游戏画面时GPU执行渲染指令的示意图,在该实施例中,GPU从图形应用程序接口获取的渲染指令被依序执行,前一个渲染指令执行完毕后执行下一个渲染指令。将渲染指令按照执行开始的时间顺序进行编号,记为第一渲染指令、第二渲染指令、第三渲染指令……第M渲染指令(M为正整数),GPU从第一渲染指令开始执行,执行完毕后立即执行第二渲染指令,第二渲染指令执行完毕后立即执行第三渲染指令,以此类推,直至本帧游戏画面的最后一个渲染指令即第M渲染指令被执行完毕后结束渲染工作。
这种情况下,调用图形应用程序接口执行GPU渲染耗时查询任务时,第一调用指令可以是一个用于触发图形应用程序接口记录渲染起始时间的指令,记为第一查询指令,当图形应用程序接口接收到第一查询指令时,通过设定好的函数自动记录下一个渲染指令开始执行的时间。由于第一查询指令在每一帧游戏画面的渲染子程序执行前被应用性能监控程序下发,因此此时GPU处理的下一个渲染指令就是一帧将要开始渲染的游戏画面的第一个渲染指令,对应图7中即为第一渲染指令。类似地,第二调用指令可以是一个用于触发图形应用程序接口记录渲染结束时间的指令,记为第二查询指令,当图形应用程序接口接收到第二查询指令时,通过设定好的函数自动记录上一个渲染指令执行完成的时间。由于第二查询指令在每一帧游戏画面的渲染子程序执行后被应用性能监控程序下发,因此此时GPU处理的上一个渲染指令就是一帧已经完成渲染的游戏画面的最后一个渲染指令,对应图7中即为第M渲染指令。通过第一渲染指令确认该帧游戏画面的渲染起始时间,通过第M渲染指令确定该帧游戏画面的渲染结束时间,渲染起始时间和渲染结束时间之间的时间间隔即为需要获取的GPU渲染耗时,因此,通过渲染结束时间和渲染起始时间的差值,即可确定渲染耗时。举例来说,例如图7所示出的某帧游戏画面的第一渲染指令在14分16秒720毫秒开始被执行,第M渲染指令在14分16秒732毫秒被执行完毕,则可以计算出此帧游戏画面的GPU渲染耗时为12毫秒。
参照图8,图8为另一种渲染一帧游戏画面时GPU执行渲染指令的示意图,GPU从图形应用程序接口获取的渲染指令被依序执行,前一个渲染指令执行完毕后执行下一个渲染指令。将渲染指令按照执行开始的时间顺序进行编号,记为第一渲染指令、第二渲染指令、第三渲染指令……第M渲染指令(M为正整数),GPU从第一渲染指令开始执行,执行完毕后执行第二渲染指令,第二渲染指令执行完毕后执行第三渲染指令,以此类推,直至本帧游戏画面的最后一个渲染指令即第M渲染指令被执行完毕后结束渲染工作。
这种情况下,调用图形应用程序接口执行GPU渲染耗时查询任务时,第一调用指令可以是一个用于触发图形应用程序接口开始记录执行各个渲染指令的耗时的指令,将此时的第一调用指令记为第三查询指令,执行各个渲染指令的耗时记为第一耗时,当图形应用程序接口接收到第三查询指令时,通过设定好的函数开始记录各个渲染指令执行的第一耗时。图8中,第一渲染指令对应的第一耗时为T1,第二渲染指令对应的第一耗时为T2……第M渲染指令对应的第一耗时为TM。类似地,第二调用指令可以是一个用于触发图形应用程序接口结束记录执行各个渲染指令的第一耗时的指令,将此时的第二调用指令记为第五查询指令,当图形应用程序接口接收到第五查询指令时,通过设定好的函数终止记录各个渲染指令执行的第一耗时。由于第三查询指令在每一帧游戏画面的渲染子程序执行前被应用性能监控程序下发,第五查询指令在该帧游戏画面的渲染子程序执行后被应用性能监控程序下发,因此此时第三查询指令和第五查询指令之间记录的是一帧完整游戏画面的所有渲染指令各自对应的第一耗时,对应图8中即为T1、T2、T3……TM。而GPU渲染耗时正是指GPU处理一帧游戏画面运算所消耗的时间,也即处理该帧游戏画面对应的渲染指令的总耗时,因此,对处理该帧游戏画面记录得到的各个第一耗时进行求和,即可得到需要的GPU渲染耗时。
举例来说,例如图8所示出的某帧游戏画面,在GPU中通过四个渲染指令完成了渲染任务的运算(即M等于4),四个渲染指令分别为第一渲染指令、第二渲染指令、第三渲染指令和第四渲染指令,其中第一渲染指令对应的第一耗时T1为2毫秒,第二渲染指令对应的第一耗时T2为3毫秒,第三渲染指令对应的第一耗时T3为4毫秒,第四渲染指令对应的第一耗时T4为5毫秒,则可以计算出此帧游戏画面的GPU渲染耗时为14毫秒。本申请实施例中,相对于图7所示出的执行GPU渲染耗时查询任务的实施例,通过各个渲染指令的第一耗时的总和来确定GPU渲染耗时,可以避免统计入执行各个渲染指令之间的非GPU实际处理时间,有效减少了因为渲染指令下发延迟可能导致的渲染耗时误差,能够使得确定的渲染耗时结果更加精确,便于清晰反映出GPU真实的工作性能。
参照图9,图9为另一种渲染一帧游戏画面时GPU执行渲染指令的示意图,GPU从图形应用程序接口获取的渲染指令被依序执行,前一个渲染指令执行开始后的某个时间点开始执行下一个渲染指令。将渲染指令按照执行开始的时间顺序进行编号,记为第一渲染指令、第二渲染指令、第三渲染指令……第M渲染指令(M为正整数),GPU从第一渲染指令开始执行,执行开始后继续执行第二渲染指令,第二渲染指令执行开始后继续执行第三渲染指令,以此类推,直至本帧游戏画面的最后一个渲染指令即第M渲染指令被执行完毕后结束渲染工作。
这种情况下,调用图形应用程序接口执行GPU渲染耗时查询任务时,第一调用指令可以是一个用于触发图形应用程序接口开始记录执行各个渲染指令的时序信息的指令,将此时的第一调用指令记为第四查询指令,当图形应用程序接口接收到第四查询指令时,通过设定好的函数开始记录各个渲染指令执行的时序信息。图9中,第一渲染指令对应的时序信息为TS1,第二渲染指令对应的时序信息为TS2……第M渲染指令对应的时序信息为TSM。例如TS1可以表示从14分16秒750毫秒开始,到14分16秒752毫秒结束,说明执行第一渲染指令的用时为2毫秒,将图8中渲染指令对应的耗时记为第二耗时,则此时第一渲染指令对应的第二耗时为2毫秒。类似地,第二调用指令可以是一个用于触发图形应用程序接口结束记录执行各个渲染指令的时序信息的指令,将此时的第二调用指令记为第六查询指令,当图形应用程序接口接收到第六查询指令时,通过设定好的函数终止记录各个渲染指令执行的时序信息。由于第四查询指令在每一帧游戏画面的渲染子程序执行前被应用性能监控程序下发,第六查询指令在该帧游戏画面的渲染子程序执行后被应用性能监控程序下发,因此此时第四查询指令和第六查询指令之间记录的是一帧完整游戏画面的所有渲染指令各自对应的时序信息,对应图9中即为TS1、TS2、TS3……TSM。
前述图7和图8中的实施例中,GPU是单渲染线程的,只能同步处理渲染指令,即处理完成一个渲染指令后才能开始处理下一个渲染指令,而本申请实施例中,可以通过多线程异步处理渲染指令,因此实际GPU渲染耗时要小于各个渲染指令对应的第二耗时的总和。这种情况下,可以先根据各个渲染指令对应的时序信息确定其对应第二耗时,例如第一渲染指令对应的第二耗时为2毫秒,然后确定执行各个渲染指令的重叠耗时,重叠耗时是指顺序处在后面的渲染指令与顺序处在它前面的至少一个渲染指令的执行时间重叠的那部分时间段。举例来说,例如对于第二渲染指令来说,其时序信息为从14分16秒751.5毫秒开始,到14分16秒754毫秒结束,说明执行第二渲染指令的第二耗时为2.5毫秒,第二渲染指令与前面的第一渲染指令重叠的部分执行时间段(即在该段时间内,同时执行了第一渲染指令和第二渲染指令)为14分16秒751.5毫秒至14分16秒752毫秒,该段时间段即为第二渲染指令的重叠耗时,即图9中所示的TD1。本申请实施例中,在每帧游戏画面所对应全部的第二耗时中剔除重叠耗时后,再对第二耗时进行求和,即可得到需要的渲染耗时。举例而言,例如图9所示出的某帧游戏画面,在GPU中通过四个渲染指令完成了渲染任务的运算(即M等于4),四个渲染指令分别为第一渲染指令、第二渲染指令、第三渲染指令和第四渲染指令,其中第一渲染指令对应的第二耗时T1为2毫秒,第二渲染指令对应的第二耗时T2为2.5毫秒,第三渲染指令对应的第二耗时T3为3毫秒,第四渲染指令对应的第一耗时T4为3毫秒,其中第二渲染指令与其之前的渲染指令的重叠耗时为0.5毫秒,第三渲染指令与其之前的渲染指令的重叠耗时为0毫秒,第四渲染指令与其之前的渲染指令的重叠耗时为的重叠耗时为1毫秒,则可以计算得到此帧游戏画面的GPU渲染耗时为9毫秒。可以理解的是,前述图7、图8和图9实施例中涉及到的数值仅用于说明技术原理,并不意味着对实际的GPU渲染耗时进行限定或者论证。
下面结合具体的游戏引擎所对应的游戏程序以及图形应用程序接口对本申请实施例中的渲染耗时的获取方法进行详细说明,应当理解的是,以下实施例仅为对本申请的示范性说明,并不对本申请的实际应用形成限制。
本申请实施例中,以Unity引擎为例进行说明,Unity引擎是一种实时3D互动内容创作和运营平台,因其易于使用、兼容大多数游戏平台,而且学习门槛低,所以使用比较广泛。参照图10,图10所示出的是Unity引擎的部分脚本生命周期(其中省略了循环路径和部分具体的函数),图10中脚本程序的各个部分从上到下依次被执行,其中,初始化子程序常用于在游戏开始前对数据或者游戏逻辑进行初始化;物理运算子程序常用于对游戏对象做物理操作或者检测碰撞、触发条件;输入事件子程序用于获取用户的输入指令,例如鼠标的点击或者移动;游戏逻辑子程序则用于执行游戏的逻辑设定,其中包含有更新函数(Update函数)和后更新函数(LateUpdate,也叫延迟更新函数),当游戏程序启动后,每帧画面渲染场景时都会调用上述的两个函数;渲染子程序部分包括场景渲染、物件图标渲染和界面渲染;渲染完成后,等待CPU的工作完成,则执行等待帧结束回调函数(WaitForEndOfFrame);后续是结束阶段的销毁、退出等子程序。可以看到,对于Unity引擎制作的游戏程序来说,在一帧游戏画面的渲染过程中,其渲染子程序执行前所执行的函数步骤是后更新函数,而子程序执行后所执行的函数步骤是等待帧结束回调函数。以该游戏程序作为目标程序为例,此时,第一指令的设定位置可以是与后更新函数同步执行,即目标程序执行到游戏逻辑子程序的后更新函数时,第一指令被触发;第二指令的设定位置可以是与等待帧结束回调函数同步执行,即目标程序执行到等待帧结束回调函数时,第二指令被触发。具体地,Unity引擎中提供了自定义事件回调机制(GL.IssuePluginEvent机制),该机制允许游戏程序发送一个用户定义的事件到本地代码插件,本申请实施例中,可以利用该机制实现第一指令和第二指令的触发,该本地代码插件既可以是应用性能监控程序,也可以是用于向应用性能监控程序或者服务器转发第一指令和第二指令的插件。
对于图形应用程序接口而言,一般Android平台的游戏多采用OpenGL ES(OpenGLfor Embedded Systems),OpenGL ES是OpenGL(Open Graphics Library,开放图形库或者“开放式图形库)的子集,专为针对手机、PDA和游戏主机等嵌入式设备而设计。本申请实施例中,以图6所示出的实施例为例,若该图形应用程序接口为OpenGL ES,则该步骤610中调用图形应用程序接口启动GPU渲染耗时查询任务可以是向OpenGL ES调用一个发起查询函数(glBeginQuery函数),发起对GL_TIME_ELAPSED(OpenGL ES的接口工作耗时)的查询;对应的,步骤620中调用图形应用程序接口终止GPU渲染耗时查询任务则可以是向OpenGL ES调用结束查询函数(glEndQuery函数),结束对GL_TIME_ELAPSED的查询,并获取GL_TIME_ELAPSED的查询结果作为GPU渲染耗时。使用OpenGL ES类型接口的GPU在执行渲染指令时是同步的,其可以采用图7或者图8所示出的实施例来确定GPU渲染耗时。对于IOS平台来说,其专用的图形应用程序接口Metal在被GPU使用时渲染指令是异步执行的,一般采用图9所示出的实施例来确定GPU渲染耗时。
参照图11,本申请实施例中,还提供一种渲染耗时的显示方法,该显示方法可应用于终端设备中,该方法的执行主体既可以是前述的终端设备,也可以是前述的应用性能监控程序。图11中示出的是本申请实施例中提供的渲染耗时的显示方法一个可选的流程示意图,该方法主要包括步骤1110至步骤1120:
步骤1110、通过如图4或者图6所示的渲染耗时的获取方法获取游戏运行时的GPU渲染耗时;
步骤1120、在游戏的画面上,显示GPU渲染耗时的信息。
本申请实施例中,终端设备可以采用如图4所示出的渲染耗时的获取方法获取游戏运行时的GPU渲染耗时信息并显示在游戏的画面上,也可以是应用性能监控程序采用如图6所示出的渲染耗时的获取方法获取游戏运行时的GPU渲染耗时信息,并通过终端设备显示在游戏的画面上。具体地,请参照图12,图12中示出了一种在游戏画面上显示GPU渲染耗时信息的方式,在通过前述的渲染耗时的获取方法获取到当前GPU渲染耗时信息后,可以在游戏画面的某个角落通过硬件状态提示框1210将其显示出来。例如图12中,硬件状态提示框1210显示出了“当前GPU渲染耗时为15毫秒”的信息。当然,可以理解的是,实际显示上述GPU渲染耗时的实施方式可以是多种多样的,例如可以以透明水印的方式在游戏画面中显示出来,也可以每间隔一段时间以滚动播报的形式显示出来。需要说明的是,由于实际游戏画面的刷新速度很快,因此上述的GPU渲染耗时信息可以不是实时的,例如可以每隔预定的时间段取该段时间刷新的其中一帧画面的GPU渲染耗时,作为该段时间的GPU渲染耗时信息显示出来。例如可以每1分钟取一次GPU渲染耗时,将该数值作为GPU渲染耗时信息显示一分钟。
可以理解的是,图4或者图6所示的渲染耗时的获取方法实施例中的内容均适用于本渲染耗时的显示方法实施例中,本渲染耗时的显示方法实施例在确定渲染耗时的过程中所具体实现的功能与图4或者图6所示的渲染耗时的获取方法实施例相同,并且达到的有益效果与图4或者图6所示的渲染耗时的获取方法实施例所达到的有益效果也相同。
参照图13,本申请实施例中,还提供一种游戏性能监控方法,类似地,该游戏性能监控方法可应用于终端中,也可应用于服务器中,还可以应用于终端或服务器中的软件,用于实现一部分的软件功能,但并不局限于以上形式。图13中示出的是本申请实施例中提供的游戏性能监控方法一个可选的流程示意图,该方法主要包括步骤1310至步骤1330:
步骤1310、获取游戏运行中的CPU使用率;
本申请实施例中,CPU使用率表示的是运行的程序占用的CPU资源。在其他条件一致的情况下(例如运行的其他程序一样),对于同一台终端设备运行不同的游戏,游戏对应的CPU使用率越高,说明该种游戏占用的CPU硬件资源越多;对于不同的终端设备运行同样的游戏,终端设备对应的CPU使用率越高,说明该终端设备的CPU性能越差。
步骤1320、通过如图4或者图6所示的渲染耗时的获取方法获取游戏运行中的GPU渲染耗时;
步骤1330、当CPU使用率高于第一阈值且GPU渲染耗时低于第二阈值,将CPU确定为游戏渲染性能的硬件瓶颈;
或者,
当CPU使用率低于第三阈值且GPU渲染耗时高于第四阈值,将GPU确定为游戏渲染性能的硬件瓶颈。
本申请实施例中,获取终端设备运行游戏过程中的CPU使用率和GPU耗时,通过与预设的性能阈值作对比,来确定两个硬件中哪个较大程度上制约了游戏的渲染性能。其原理在于,由于游戏渲染性能和CPU、GPU均相关,且绝大多数情况下,往往CPU和GPU是无法同时处在最佳运行性能的。若CPU的运行性能较好,则GPU渲染的速度跟不上,出现CPU利用率较低,而渲染耗时较高的情况;若GPU的运行性能较好,则CPU下发渲染指令的速度跟不上,出现CPU利用率较高,而渲染耗时较低的情况。因此,本申请实施例中,针对CPU使用率设定一个第一阈值和一个第三阈值,第三阈值小于或者等于第一阈值,针对GPU耗时设定一个第二阈值和一个第四阈值,第二阈值小于或者等于第四阈值。当CPU使用率高于第一阈值且GPU渲染耗时低于第二阈值时,说明CPU的性能较差,是制约游戏渲染性能的主要因素,可以将其定为游戏渲染性能的硬件瓶颈;当CPU使用率低于第三阈值且GPU渲染耗时高于第四阈值时,说明GPU的性能较差,是制约游戏渲染性能的主要因素,可以将其定为游戏渲染性能的硬件瓶颈。举例而言,例如本申请实施例中,第一阈值可以设定为80%,第二阈值可以设定为10毫秒,第三阈值可以设定为60%,第四阈值可以设定为14毫秒。应当理解的是,上述的数值仅为举例说明,并不代表该实施例实际使用中的具体情况。
需要补充说明的是,虽然本申请实施例中的渲染耗时的获取方法主要是为了解决用户获取GPU耗时信息不便的问题,但这并不意味着本申请实施例不能被其他类型的人员实施。例如,对于游戏开发者来说,其也同样可以采用本申请实施例中提供的渲染耗时的获取方法获取GPU渲染耗时,采用本申请实施例中提供的游戏性能监控方法分析游戏的运行性能。
参照图14,本申请实施例还公开了一种渲染耗时的获取装置,包括:
第一处理单元1410,用于响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
第二处理单元1420,用于响应于目标程序中的第二指令,调用图形应用程序接口终止GPU渲染耗时查询任务;
获取单元1430,用于获取GPU渲染耗时查询任务返回的渲染耗时;
其中,第一指令在目标程序中每一帧画面的渲染子程序执行前被触发,第二指令在渲染子程序执行后被触发。
可以理解的是,图6所示的渲染耗时的获取方法实施例中的内容均适用于本渲染耗时的获取装置实施例中,本渲染耗时的获取装置实施例所具体实现的功能与图6所示的渲染耗时的获取方法实施例相同,并且达到的有益效果与图6所示的渲染耗时的获取方法实施例所达到的有益效果也相同。
本申请实施例还提供一种终端设备,该终端设备用于通过如图4所示出的方法获取GPU渲染耗时,并显示GPU渲染耗时。
可以理解的是,图4所示的渲染耗时的获取方法实施例中的内容均适用于本终端设备实施例中,本终端设备实施例所具体实现的功能与图4所示的渲染耗时的获取方法实施例相同,并且达到的有益效果与图4所示的渲染耗时的获取方法实施例所达到的有益效果也相同。
参照图15,本申请实施例还公开了一种计算机设备,包括:
至少一个处理器1510;
至少一个存储器1520,用于存储至少一个程序;
当至少一个程序被至少一个处理器1510执行,使得至少一个处理器1510实现如图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例中的任一种。
可以理解的是,如图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例中的内容均适用于本计算机设备实施例中,本计算机设备实施例所具体实现的功能与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例相同,并且达到的有益效果与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例所达到的有益效果也相同。
本申请实施例还公开了一种计算机可读存储介质,其中存储有处理器可执行的程序,处理器可执行的程序在由处理器执行时用于实现如图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例。
可以理解的是,图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例中的内容均适用于本计算机可读存储介质实施例中,本计算机可读存储介质实施例所具体实现的功能与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例相同,并且达到的有益效果与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例所达到的有益效果也相同。
本申请实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在上述的计算机可读存储介质中;图15所示的计算机设备的处理器可以从上述的计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例。
可以理解的是,图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例中的内容均适用于本计算机程序产品或计算机程序实施例中,本计算机程序产品或计算机程序实施例所具体实现的功能与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例相同,并且达到的有益效果与图4或者图6所示的渲染耗时的获取方法实施例、图11所示的渲染耗时的显示方法实施例、图13所示的游戏性能监控方法实施例所达到的有益效果也相同。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或方框有时能以相反顺序被执行。此外,在本申请的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本申请,但应当理解的是,除非另有相反说明,功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本申请是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本申请。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本申请的范围,本申请的范围由所附权利要求书及其等同方案的全部范围来决定。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的上述描述中,参考术语“一个实施方式/实施例”、“另一实施方式/实施例”或“某些实施方式/实施例”等的描述意指结合实施方式或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。
尽管已经示出和描述了本申请的实施方式,本领域的普通技术人员可以理解:在不脱离本申请的原理和宗旨的情况下可以对这些实施方式进行多种变化、修改、替换和变型,本申请的范围由权利要求及其等同物限定。
以上是对本申请的较佳实施进行了具体说明,但本申请并不限于实施例,熟悉本领域的技术人员在不违背本申请精神的前提下可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (15)
1.一种渲染耗时的获取方法,其特征在于,包括以下步骤:
响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
响应于所述目标程序中的第二指令,调用所述图形应用程序接口终止所述GPU渲染耗时查询任务;
获取所述GPU渲染耗时查询任务返回的所述渲染耗时;
其中,所述第一指令在所述目标程序中每一帧画面的渲染子程序执行前被触发,所述第二指令在所述渲染子程序执行后被触发。
2.根据权利要求1所述的方法,其特征在于,所述调用图形应用程序接口启动GPU渲染耗时查询任务,包括:
向所述图形应用程序接口发送第一查询指令,所述第一查询指令用于触发所述图形应用程序接口记录渲染起始时间。
3.根据权利要求2所述的方法,其特征在于,所述调用所述图形应用程序接口终止所述GPU渲染耗时查询任务,包括:
向所述图形应用程序接口发送第二查询指令,所述第二查询指令用于触发所述图形应用程序接口记录渲染结束时间。
4.根据权利要求3所述的方法,其特征在于,所述渲染耗时通过以下步骤确定:
获取所述渲染起始时间和所述渲染结束时间;
根据所述渲染结束时间和所述渲染起始时间的差值,确定所述渲染耗时。
5.根据权利要求1所述的方法,其特征在于,所述调用图形应用程序接口启动GPU渲染耗时查询任务,包括:
向所述图形应用程序接口发送第三查询指令,所述第三查询指令用于触发所述图形应用程序接口开始记录执行各个渲染指令的第一耗时。
6.根据权利要求5所述的方法,其特征在于,所述渲染耗时通过以下步骤确定:
获取各个所述渲染指令对应的所述第一耗时;
对各所述第一耗时进行求和,得到所述渲染耗时。
7.根据权利要求1所述的方法,其特征在于,所述调用图形应用程序接口启动GPU渲染耗时查询任务,包括:
向所述图形应用程序接口发送第四查询指令,所述第四查询指令用于触发所述图形应用程序接口开始记录执行各个渲染指令的时序信息。
8.根据权利要求7所述的方法,其特征在于,所述渲染耗时通过以下步骤确定:
获取各个渲染指令对应的所述时序信息;
根据所述时序信息,确定所述图形应用程序接口执行各个所述渲染指令的第二耗时和重叠耗时;
在各所述第二耗时中剔除所述重叠耗时,对各所述第二耗时进行求和,得到所述渲染耗时。
9.一种渲染耗时的获取方法,其特征在于,包括以下步骤:
运行目标程序和应用性能监控程序;
在所述目标程序中的渲染子程序执行前触发第一指令;所述第一指令用于使得所述应用性能监控程序向图形应用程序接口发送第一调用指令,所述第一调用指令用于调用图形应用程序接口启动GPU渲染耗时查询任务;
在所述渲染子程序执行后触发第二指令;所述第二指令用于使得所述应用性能监控程序向所述图形应用程序接口发送第二调用指令,所述第二调用指令用于调用图形应用程序接口终止所述GPU渲染耗时查询任务;
获取得到所述GPU渲染耗时查询任务返回的所述渲染耗时。
10.一种渲染耗时的显示方法,其特征在于,包括以下步骤:
通过权利要求1-9中任一项所述渲染耗时的获取方法获取游戏运行时的GPU渲染耗时;在所述游戏的画面上,显示所述GPU渲染耗时的信息。
11.一种游戏性能监控方法,其特征在于,包括以下步骤:
获取游戏运行中的CPU使用率;
通过权利要求1-9中任一项所述渲染耗时的获取方法获取游戏运行中的GPU渲染耗时;
当所述CPU使用率高于第一阈值且所述GPU渲染耗时低于第二阈值,将所述CPU确定为所述游戏渲染性能的硬件瓶颈;
或者,
当所述CPU使用率低于第三阈值且所述GPU渲染耗时高于第四阈值,将所述GPU确定为所述游戏渲染性能的硬件瓶颈。
12.一种渲染耗时的获取装置,其特征在于,包括:
第一处理单元,用于响应于目标程序中的第一指令,调用图形应用程序接口启动GPU渲染耗时查询任务;
第二处理单元,用于响应于所述目标程序中的第二指令,调用所述图形应用程序接口终止所述GPU渲染耗时查询任务;
获取单元,用于获取所述GPU渲染耗时查询任务返回的所述渲染耗时;
其中,所述第一指令在所述目标程序中每一帧画面的渲染子程序执行前被触发,所述第二指令在所述渲染子程序执行后被触发。
13.一种终端设备,所述终端设备搭载有图形应用程序接口,其特征在于:
所述终端设备用于通过如权利要求9所述的渲染耗时的获取方法获取GPU渲染耗时,并显示所述GPU渲染耗时。
14.一种计算机设备,其特征在于,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1-11任一项所述的方法。
15.一种计算机可读存储介质,其中存储有程序,其特征在于:所述程序被处理器执行时用于实现如权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011263374.4A CN112346935A (zh) | 2020-11-12 | 2020-11-12 | 渲染耗时的获取、显示方法、性能监控方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011263374.4A CN112346935A (zh) | 2020-11-12 | 2020-11-12 | 渲染耗时的获取、显示方法、性能监控方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112346935A true CN112346935A (zh) | 2021-02-09 |
Family
ID=74363467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011263374.4A Pending CN112346935A (zh) | 2020-11-12 | 2020-11-12 | 渲染耗时的获取、显示方法、性能监控方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112346935A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113489789A (zh) * | 2021-07-06 | 2021-10-08 | 广州虎牙科技有限公司 | 云游戏耗时数据的统计方法、装置、设备及存储介质 |
CN113672468A (zh) * | 2021-08-24 | 2021-11-19 | 北京字节跳动网络技术有限公司 | 一种负载监控方法及装置 |
CN115350479A (zh) * | 2022-10-21 | 2022-11-18 | 腾讯科技(深圳)有限公司 | 渲染处理方法、装置、设备及介质 |
CN115398891A (zh) * | 2021-04-23 | 2022-11-25 | 腾讯美国有限责任公司 | 通过多次测量进行的估计 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164839A (zh) * | 2013-03-07 | 2013-06-19 | 华为技术有限公司 | 一种绘图方法、装置及终端 |
CN103930885A (zh) * | 2011-11-16 | 2014-07-16 | 微软公司 | 测量网页渲染时间 |
US20160335736A1 (en) * | 2012-07-31 | 2016-11-17 | Intel Corporation | Hybrid rendering systems and methods |
CN107102936A (zh) * | 2017-05-27 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 一种流畅度的评估方法和移动终端以及存储介质 |
CN107797904A (zh) * | 2017-09-12 | 2018-03-13 | 福建天晴数码有限公司 | 一种测量响应时间的方法及终端 |
CN110764986A (zh) * | 2019-10-12 | 2020-02-07 | 北京奇艺世纪科技有限公司 | 页面流畅度检测方法及装置 |
-
2020
- 2020-11-12 CN CN202011263374.4A patent/CN112346935A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103930885A (zh) * | 2011-11-16 | 2014-07-16 | 微软公司 | 测量网页渲染时间 |
US20160335736A1 (en) * | 2012-07-31 | 2016-11-17 | Intel Corporation | Hybrid rendering systems and methods |
CN103164839A (zh) * | 2013-03-07 | 2013-06-19 | 华为技术有限公司 | 一种绘图方法、装置及终端 |
CN107102936A (zh) * | 2017-05-27 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 一种流畅度的评估方法和移动终端以及存储介质 |
CN107797904A (zh) * | 2017-09-12 | 2018-03-13 | 福建天晴数码有限公司 | 一种测量响应时间的方法及终端 |
CN110764986A (zh) * | 2019-10-12 | 2020-02-07 | 北京奇艺世纪科技有限公司 | 页面流畅度检测方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115398891A (zh) * | 2021-04-23 | 2022-11-25 | 腾讯美国有限责任公司 | 通过多次测量进行的估计 |
CN113489789A (zh) * | 2021-07-06 | 2021-10-08 | 广州虎牙科技有限公司 | 云游戏耗时数据的统计方法、装置、设备及存储介质 |
CN113672468A (zh) * | 2021-08-24 | 2021-11-19 | 北京字节跳动网络技术有限公司 | 一种负载监控方法及装置 |
CN115350479A (zh) * | 2022-10-21 | 2022-11-18 | 腾讯科技(深圳)有限公司 | 渲染处理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112346935A (zh) | 渲染耗时的获取、显示方法、性能监控方法、装置及设备 | |
CN102576470B (zh) | 用于纹理获取装载的自动实时着色器修改 | |
CN102549547B (zh) | 纹理的自动运行时标识 | |
CN107018191B (zh) | 一种控制游戏的方法和装置 | |
US11341706B2 (en) | Virtual scene display method and apparatus, and storage medium | |
CN107251004A (zh) | 通过使用欺骗时钟及细粒度频率控制实现的向后兼容性 | |
CN112947969B (zh) | 一种页面离屏渲染方法、装置、设备和可读介质 | |
US20240189724A1 (en) | Videogame telemetry data and game asset tracker for session recordings | |
CN112631691A (zh) | 游戏界面动效编辑方法、装置、处理设备及介质 | |
US20180124453A1 (en) | Dynamic graphic visualizer for application metrics | |
Liu et al. | A benchmarking framework for interactive 3d applications in the cloud | |
Ostrowski et al. | Automated regression testing within video game development | |
CN111309421B (zh) | 界面资源的加载方法、装置、终端及存储介质 | |
Li et al. | MOBILE OS ARCHITECTURE TRENDS. | |
CN111290960A (zh) | 应用程序的流畅度检测方法、装置、终端及存储介质 | |
Aversa et al. | Unity Game Optimization: Enhance and extend the performance of all aspects of your Unity games | |
JP2012123726A (ja) | シミュレーション装置及びシミュレーションプログラム | |
Mehta | Learn OpenGL ES: for mobile game and graphics development | |
CN110569184A (zh) | 一种测试方法及终端设备 | |
CN113617022A (zh) | 一种加快游戏应用启动速度的方法及装置 | |
CN111111197B (zh) | 一种基于DirectX平台的游戏引擎数据处理系统及方法 | |
Manas et al. | Android high performance programming | |
Saarinen | Evaluating cross-platform mobile app performance with video-based measurements | |
KR20220155422A (ko) | 정보 디스플레이 방법 및 장치, 단말기, 저장 매체 및 컴퓨터 프로그램 제품 | |
Tejado López | Creation of an interactive environment through the development of a Videogame Engine |
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 |