CN119690537B - 运行性能获取方法、装置、设备、存储介质及程序产品 - Google Patents
运行性能获取方法、装置、设备、存储介质及程序产品Info
- Publication number
- CN119690537B CN119690537B CN202411758168.9A CN202411758168A CN119690537B CN 119690537 B CN119690537 B CN 119690537B CN 202411758168 A CN202411758168 A CN 202411758168A CN 119690537 B CN119690537 B CN 119690537B
- Authority
- CN
- China
- Prior art keywords
- code
- component
- execution
- virtual
- line
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种运行性能获取方法、装置、设备、存储介质及程序产品,涉及计算机技术领域。该方法包括:显示虚拟场景中的虚拟组件;响应于接收到针对虚拟组件的组件编辑操作,显示与虚拟组件对应的组件运行代码;在执行组件运行代码驱动虚拟组件的情况下,显示虚拟组件对应的组件性能信息;组件性能信息包括用于表征至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。能够通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,从而有助于高效定位存在性能问题的操作代码,提高代码调整效率。本申请可应用于社交媒体场景、游戏内容创作场景、编程学习场景、多媒体分享场景等多种支持代码创作的场景。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种运行性能获取方法、装置、设备、存储介质及程序产品。
背景技术
随着网络游戏的发展,用户生成内容(User Generated Content,UGC)作为一种大众创新的模式越来越受到欢迎,使得玩家可以通过编程写入代码的方式参与创作过程。
相关技术中,为了统计编写代码的执行情况,代码创作者可以基于UGC方式编写脚本代码的同时,额外自行编写帧率统计代码以检测本端执行脚本代码时的运行帧率,并将运行帧率作为脚本代码的运行情况。
然而上述方式中仅仅能够反映代码执行的大致情况,若存在脚本代码编写纰漏或者代码执行性能较差等问题,代码创作者无法基于运行帧率确定脚本代码中出现问题的代码位置,影响代码调整和修复效率。
发明内容
本申请实施例提供了一种运行性能获取方法、装置、设备、存储介质及程序产品,能够通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,从而有助于高效定位存在性能问题的操作代码,提高代码调整效率,保障虚拟组件在虚拟场景中的驱动稳定性。所述技术方案如下。
一方面,提供了一种运行性能获取方法,所述方法包括:
显示虚拟场景中的虚拟组件;
响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,所述组件运行代码包括用于在所述虚拟场景中驱动所述虚拟组件状态变换的至少一个操作代码;
在执行所述组件运行代码驱动所述虚拟组件的情况下,显示所述虚拟组件对应的组件性能信息;所述组件性能信息包括用于表征所述至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。
另一方面,提供了一种运行性能获取装置,所述装置包括:
显示模块,用于显示虚拟场景中的虚拟组件;
显示模块,还用于响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,所述组件运行代码包括用于在所述虚拟场景中驱动所述虚拟组件状态变换的至少一个操作代码;
显示模块,还用于在执行所述组件运行代码驱动所述虚拟组件的情况下,显示所述虚拟组件对应的组件性能信息;所述组件性能信息包括用于表征所述至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述本申请实施例中任一所述的运行性能获取方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述本申请实施例中任一所述的运行性能获取方法。
另一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中任一所述的运行性能获取方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
基于对虚拟场景中虚拟组件的组件编辑操作,显示与虚拟组件对应的组件运行代码,从而在执行组件运行代码驱动虚拟组件的情况下,显示包括操作代码的操作执行信息的组件性能信息。借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的获取系统的结构框图;
图2是本申请一个示例性实施例提供的运行性能获取方法的流程图;
图3是本申请另一个示例性实施例提供的运行性能获取方法的流程图;
图4是本申请再一个示例性实施例提供的运行性能获取方法的流程图;
图5是本申请一个示例性实施例提供的虚拟场景的界面示意图;
图6是本申请一个示例性实施例提供的组件编辑面板的界面示意图;
图7是本申请一个示例性实施例提供的基于虚拟地图游玩虚拟场景的流程图;
图8是本申请一个示例性实施例提供的虚拟组件与组件运行代码对应的示意图;
图9是本申请一个示例性实施例提供的事件回调流程图;
图10是本申请一个示例性实施例提供的相关技术的帧率曲线示意图;
图11是本申请一个示例性实施例提供的运行性能获取装置的结构框图;
图12是本申请一个示例性实施例提供的终端的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先,针对本申请实施例中涉及的名词进行简单介绍。
虚拟场景:是应用程序在终端上运行时显示(或提供)的虚拟场景。该虚拟场景可以是对真实场景的仿真场景,也可以是半仿真半虚构的场景,还可以是纯虚构的场景。虚拟场景可以是二维虚拟场景、2.5维虚拟场景和三维虚拟场景中的任意一种,本申请对此不加以限定。下述实施例以虚拟场景是三维虚拟场景来举例说明。
虚拟组件:是虚拟场景中用于模仿真实场景的元素。示例性的,虚拟组件在虚拟场景中占据一定的体积。示例性的,虚拟组件包括:虚拟地形、虚拟建筑、虚拟动植物、虚拟道具、虚拟载具、虚拟对象等。例如,虚拟地形包括:地面、山川、水流、石块、台阶等;虚拟建筑包括:房屋、围墙、集装箱、以及建筑内部的固定设施:桌椅、柜子、床等;虚拟动植物包括:树木、花草、飞鸟等;虚拟道具包括:虚拟攻击道具、药箱、空投等;虚拟载具包括:汽车、船舶、直升机等;虚拟对象包括:人物、动物、动漫人物等。
相关技术中,为了统计编写代码的执行情况,代码创作者可以基于UGC方式编写脚本代码的同时,额外自行编写帧率统计代码以检测本端执行脚本代码时的运行帧率,并将运行帧率作为脚本代码的运行情况。然而上述方式中仅仅能够反映代码执行的大致情况,若存在脚本代码编写纰漏或者代码执行性能较差等问题,代码创作者无法基于运行帧率确定脚本代码中出现问题的代码位置,影响代码调整和修复效率。
在本申请实施例中,介绍了一种运行性能获取方法,能够通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,从而有助于高效定位存在性能问题的操作代码,提高代码调整效率,保障虚拟组件在虚拟场景中的驱动稳定性。本申请实施例提出的运行性能获取方法可以应用于社交媒体场景、游戏内容创作场景、编程学习场景、多媒体分享场景等多种支持代码创作的场景中,此处不加以限定。
需要进行说明的是,本申请在收集用户的相关数据之前以及在收集用户的相关数据的过程中,都可以显示提示界面、弹窗或输出语音提示信息,该提示界面、弹窗或语音提示信息用于提示用户当前正在搜集其相关数据,使得本申请仅仅在获取到用户对该提示界面或者弹窗发出的确认操作后,才开始执行获取用户相关数据的相关步骤,否则(即未获取到用户对该提示界面或者弹窗发出的确认操作时),结束获取用户相关数据的相关步骤,即不获取用户的相关数据。换句话说,本申请所采集的所有用户数据都是在用户同意并授权的情况下进行采集的,且相关用户数据的收集、使用和处理需要遵守相关地区的相关法律法规和标准。
其次,对本申请实施例中涉及的获取系统进行说明,本申请实施例提供的运行性能获取方法可以由终端单独执行实现,也可以由服务器执行实现,或者由终端和服务器通过数据交互实现,本申请实施例对此不加以限定。可选地,以终端和服务器交互执行运行性能获取方法为例进行说明。
示意性的,请参考图1,该获取系统中涉及终端110、服务器120,终端110和服务器120之间通过通信网络130连接。
在一些实施例中,终端110显示虚拟场景中的虚拟组件。
示意性的,虚拟组件是虚拟场景内待通过代码编辑方式驱动的组件,虚拟组件诸如虚拟对象、虚拟载具等。
可选地,终端110上安装有一款游戏客户端,在运行游戏客户端的过程中显示虚拟场景,虚拟场景中包括虚拟组件;或者,终端110响应于接收到组件部署操作,在虚拟场景中显示部署的虚拟组件等。
在一些实施例中,终端110响应于接收到针对虚拟组件的组件编辑操作,显示与虚拟组件对应的组件运行代码。
示意性的,虚拟组件是待通过代码编辑方式驱动的组件,若针对虚拟组件执行组件编辑操作,即代表使用终端110的代码创作者为虚拟组件编写驱动其变换状态的组件运行代码。
可选地,将针对虚拟组件的长按操作作为组件编辑操作;或者,将针对虚拟组件中预设组件位置的位置触发操作作为组件编辑操作等。
其中,组件运行代码包括用于在虚拟场景中驱动虚拟组件状态变换的至少一个操作代码。
示意性的,组件运行代码由至少一个操作代码组成,操作代码是计算机处理器(Central Processing Unit,CPU)可以执行的最小单位操作;通常情况下一个操作代码用于指示一个特定的计算或控制操作,如数据处理操作(加法、减法、乘法、除法等)、数据移动操作(如将一个数据从一个寄存器复制到另一个寄存器等)、控制流程操作(如跳转、分支、循环等)等;综合至少一个操作代码以驱动虚拟组件在虚拟场景中实现状态变换。
状态变换诸如运动状态变化(如从静止到奔跑等)、组件姿态变化(如从站立到下蹲等)、组件位置变换(如从A地瞬移到B地等),此处对于虚拟组件在虚拟场景中的状态变化情况不加以限定。
在一些实施例中,在执行组件运行代码驱动虚拟组件的情况下,终端110显示虚拟组件对应的组件性能信息。
其中,组件性能信息包括用于表征至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。其中第i个操作代码是至少一个操作代码中任意一个操作代码。
可选地,终端110执行组件运行代码以驱动虚拟组件时,终端110以操作代码为分析维度检测组件运行代码的代码运行情况,从而分析操作代码的执行情况并得到操作代码的操作执行信息;将更细粒度的操作执行信息作为组件性能信息,从而为代码创作者呈现更加精细的代码运行情况。
可选地,终端110将代码创作者编写的组件运行代码通过通信网络发送至服务器120,由服务器120执行组件运行代码模拟驱动虚拟场景中的虚拟组件,从而获取包括操作代码对应的操作执行信息的组件性能信息,并通过通信网络130将组件性能信息发送至终端110,以便终端110在终端屏幕上渲染显示虚拟组件的组件性能信息。
在一些实施例中,操作终端110的代码创作者能够基于显示的组件性能信息中第i个操作代码的操作执行信息,针对性地确定执行组件运行代码时可能存在消耗较大问题的操作代码,从而有助于在组件运行代码中的至少一个操作代码实现精准定位目的,提高代码调整的针对性和代码调整效率,保障代码创作者的组件运行代码的编写体验,也有助于保障虚拟组件在虚拟场景中的运行稳定性。
值得注意的是,上述终端包括但不限于手机、平板电脑、便携式膝上笔记本电脑、智能语音交互设备、智能家电、车载终端等移动终端,也可以实现为台式电脑等;上述服务器可以是独立的物理服务器、专用服务器(Dedicate Server)等,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是云服务器。
结合上述名词简介和应用场景,对本申请提供的运行性能获取方法进行说明,以该方法应用于终端为例进行说明,如图2所示,该方法包括如下步骤210至步骤230。
步骤210,显示虚拟场景中的虚拟组件。
示意性的,虚拟场景是在计算机生成的虚拟环境或模拟空间中创建的场景,虚拟场景通常是数字化的。
可选地,虚拟场景是显示在终端上的场景。例如:终端上安装有客户端,客户端是运行在终端上的应用程序,负责处理用户输入,实现渲染图形、播放音效等功能;在终端运行客户端的过程中显示虚拟场景。
可选地,虚拟场景是基于虚拟现实(Virtual Reality,VR)技术显示的场景,使用对象可以通过VR设备(如:头戴式显示器、手柄、动作捕捉设备等)观察虚拟场景并与虚拟场景互动,实现为VR场景的虚拟场景与现实世界隔离。
可选地,虚拟场景是基于增强现实(Augmented Reality,AR)技术显示的场景,增强现实技术是将虚拟元素(如:图像、文字、三维模型等)叠加到真实世界的视图中的技术;与虚拟现实技术不同,AR技术不需要使用对象完全进入虚拟世界中,而是增强使用对象对现实世界的感知,并通过屏幕(如:智能手机、AR眼镜等)在现实世界中显示虚拟视图作为虚拟场景。
示意性的,虚拟组件是构成虚拟场景的元素、对象等。虚拟组件通常实现为图形、虚拟物体、虚拟对象等数字化对象,虚拟组件存在于虚拟场景中,使用对象可以看到虚拟组件,也可以与虚拟组件交互。
在一些实施例中,虚拟组件是预先显示在虚拟场景中的元素。
示意性的,虚拟场景在构建时即预先设定至少一个虚拟组件,如至少一个虚拟组件包括虚拟对象A1、虚拟对象A2、虚拟建筑B1、虚拟宠物P1、虚拟宠物P2等,虚拟组件是至少一个虚拟组件中任意一个虚拟组件。
在一些实施例中,虚拟组件是基于组件创建操作显示的元素。
示意性的,虚拟场景在构建时预先未设定虚拟组件或者设定了其他的虚拟组件,组件创建操作是用于在虚拟场景中针对性创建虚拟组件的操作;若显示虚拟场景的情况下接收到组件创建操作,可以基于组件创建操作在虚拟场景中显示创建的虚拟组件。
可选地,组件创建操作是针对虚拟场景中创建区域的指定手势触发操作(如长按操作、双击操作等),或者,组件创建操作是针对组件增加控件的控件触发操作(如点击操作、长按操作等)等。
步骤220,响应于接收到针对虚拟组件的组件编辑操作,显示与虚拟组件对应的组件运行代码。
可选地,虚拟组件是虚拟场景内待通过代码编辑方式驱动的组件;接收到针对虚拟组件的组件编辑操作,即代表需要为虚拟组件针对性地编辑代码以驱动虚拟组件在虚拟场景中实现状态变换。
示意性的,在虚拟场景中显示虚拟组件之初,虚拟组件无法在虚拟场景中实现状态变换。例如:显示的虚拟组件为虚拟对象A,虚拟对象A在未接收到组件编辑操作前仅仅实现为静止的虚化状态,虚拟对象A的皮肤、表情、姿态、动作等均需要基于代码编辑过程配置,即需要通过组件编辑操作配置虚拟组件。
可选地,虚拟组件是虚拟场景内待通过代码补充方式灵活驱动的组件;接收到针对虚拟组件的组件编辑操作,即代表需要为虚拟组件针对性地补充代码以驱动虚拟组件在虚拟场景中实现更加灵活地状态变换。
示意性的,在虚拟场景中显示虚拟组件之初,虚拟组件可以在虚拟场景中实现基础的状态变换,但是无法实现较为灵活的状态变换。例如:显示的虚拟组件为虚拟对象A,虚拟对象A在未接收到组件编辑操作前仅具有静止状态和前进步行状态,为了使得虚拟对象A具有更加丰富的皮肤状态、动作状态(如前进奔跑、变向奔跑等)等,需要基于组件编辑操作更丰富地配置虚拟组件。
其中,组件编辑操作是用于编辑驱动虚拟组件的组件运行代码的操作。
可选地,在一款客户端内提供有代码编辑功能,代码编辑功能用于为使用客户端的使用对象提供代码创作的渠道;使用对象可以触发代码编辑功能以自定义地创作虚拟组件乃至虚拟地图的脚本代码,使用对象自定义创作的脚本代码可以称为用户原创内容(User Generated Content,UGC)。
例如:在一款游戏客户端运行过程中显示有虚拟场景,使用对象可以对虚拟场景内至少一个虚拟组件分别执行进行自定义的代码编辑过程,以得到与至少一个虚拟组件分别对应的组件运行代码,组件运行代码即使用对象创作的脚本代码。
在一些实施例中,将在虚拟组件对应的代码编辑栏中的代码编辑操作作为针对虚拟组件的组件编辑操作。
示意性的,在虚拟组件周侧预先显示有与虚拟组件对应的代码编辑区域,代码编辑操作是在代码编辑区域中输入代码的操作。
在一些实施例中,基于对虚拟组件的组件触发操作显示与虚拟组件对应的代码编辑区域,接收在代码编辑区域内的代码输入操作确定组件运行代码。其中,组件编辑操作包括组件触发操作和代码输入操作。
其中,组件运行代码包括用于在虚拟场景中驱动虚拟组件状态变换的至少一个操作代码。
示意性的,状态变换包括动作变化、样式变换、状态幅度变换等多种形式中的至少一种,状态变换的实现情况通常与虚拟组件本身息息相关。例如:以虚拟组件为虚拟对象为例,状态变换诸如从静止状态变化为奔跑状态,从白色皮肤变换为黄色皮肤等,此处不加以限定。
示意性的,组件运行代码用于在虚拟场景中驱动虚拟组件实现状态变换,且组件运行代码包括至少一个操作代码,以通过至少一个操作代码实现状态变换的目的。
示意性的,操作代码可以简称操作码(Operation Code,OpCode),操作码是二进制编码,表示需要执行的基本操作类型(如数据处理操作、数据传输操作);操作码通常与操作数结合称为代码指令,其中操作数是与操作码配合的部分,表示操作码所作用的数据或者数据的存储位置等。一个代码指令通常包括至少一个操作码以及由每个操作码执行的至少一个操作数。
步骤230,在执行组件运行代码驱动虚拟组件的情况下,显示虚拟组件对应的组件性能信息。
示意性的,在获取组件运行代码后,通过执行组件运行代码的方式可以驱动虚拟组件在虚拟场景中进行状态变换,并在组件运行代码执行的过程中检测代码执行情况,通过获取虚拟组件对应的组件性能信息以渲染显示。
可选地,由代码创作者编写组件运行代码时,通过代码创作者对应的终端执行组件运行代码以驱动虚拟组件,终端获取虚拟组件的组件性能信息并渲染显示。
可选地,代码创作者对应的终端将组件运行代码发送至服务器,由服务器执行组件运行代码以驱动虚拟组件,服务器获取虚拟组件的组件性能信息后发送至代码创作者对应的终端,从而在终端上渲染显示组件性能信息。
其中,组件性能信息包括用于表征至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。
示意性的,组件性能信息不仅能够展现组件运行代码的整体执行情况,还可以展现组件运行代码中至少一个操作代码的操作执行信息,操作执行信息能够更细粒度地展现组件运行代码的执行情况,如显示操作代码对应的代码行数以及相应的操作执行信息,从而有助于代码创作者基于组件性能信息精准定位操作执行信息较大(如代表消耗性能较高)的操作代码,提高对组件运行代码的整体把握性。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
在一个可选的实施例中,以针对第i个操作代码进行分析为例,获取第i个操作代码对应的操作执行代价,以及确定第i个操作代码对应的代码执行行号,从而综合操作执行代价和代码执行行号确定需要显示的组件性能信息。示意性的,如图3所示,上述图2所示出的步骤230还可以实现为如下步骤310至步骤330。
步骤310,在遍历执行组件运行代码中的至少一个操作代码的过程中,针对第i个操作代码,获取操作执行代价。
其中,操作执行代价用于表征执行前i个操作代码的资源消耗之和。
示意性的,第i个操作代码是至少一个操作代码中的任意一个操作代码,在遍历执行至少一个操作代码的过程中,每个操作代码分别对应一个码执行代价,码执行代价代表执行操作代码所消耗的CPU资源,即码执行代价用于描述时间资源、缓存资源、寄存器资源等多种资源中的至少一种资源的消耗情况。
通过累计码执行代价的方式获取与至少一个操作代码对应的操作执行代价;可选地,操作执行代价可以简称为Cost。
例如:组件运行代码中存在3个操作代码,依次为操作代码1、操作代码2、操作代码3;其中操作代码1和操作代码2的码执行代价均为1,即执行操作代码1需要消耗1个资源,执行操作代码2需要消耗1个资源,操作代码3的码执行代价为2,即执行操作代码3需要消耗2个资源;操作代码1对应的操作执行代价即为1(操作代码1的执行代价);操作代码2对应的操作执行代价即为2(操作代码1和操作代码2的执行代价之和);操作代码3对应的操作执行代价即为4(操作代码1、操作代码2和操作代码3的执行代价之和)。
步骤320,从组件运行代码中确定第i个操作代码对应的代码执行行号。
示意性的,组件运行代码包括至少一个代码行,每个代码行中可能包括一个操作代码,也可能包括多个操作代码,还可能不包括操作代码(如代码行的内容为空,简称为null,代表操作执行代码行中“没有值”或为“无效值”,如string name=null;代表name变量没有任何值,它没有指向任何有效的对象或字符串)。
示意性的,每个代码行对应一个代码行序号,代码行序号用于唯一表征代码行,如第一行代码行的代码行序号为1,第二行代码行的代码行序号为2等。
其中,代码执行行号是从组件运行代码中确定的当前正在执行的代码的代码行的序号,也可以理解为当前正在执行的操作代码所处的代码行的代码行序号。
示意性的,第i个操作代码对应的代码执行行号用于表征第i个操作代码所处的代码行,在组件运行代码的执行过程中,代码执行行号会实时变化。例如:从1变成2变成3等,代表执行组件运行代码时当前处理的代码行的情况。
步骤330,基于操作执行代价和代码执行行号显示组件性能信息。
示意性的,综合第i个操作代码对应的操作执行代价和第i个操作代码对应的代码执行行号,显示与第i个操作代码对应的操作执行信息作为组件性能信息。
在一些实施例中,将第i个操作代码对应的操作执行代价和代码执行行号之间的对应关系作为组件性能信息。
例如:第i个操作代码对应的操作执行代价为23,代码执行行号为16,则显示的组件性能信息为:16——23,代表执行至第16行代码消耗16个CPU资源等。
在一个可选的实施例中,在操作执行代价达到预设的代价阈值的情况下,获取与第i个操作代码对应的统计基准行数,以及与第i个操作代码对应的统计基准时刻。
示意性的,代价阈值是预先设定的代价数值,如20、50等数值,代价阈值用于评估操作执行代价的情况。
可选地,在累计至少一个操作代码分别对应的码执行代价并实时得到与至少一个操作代码分别对应的操作执行代价时,将实时累计确定的操作执行代价与代价阈值相比较,以确定操作执行代价是否达到代价阈值。
在一些实施例中,若第i个操作代码对应的操作执行代价未达到代价阈值,继续执行第i个操作代码之后的其他操作代码,并在执行过程中累计操作代码的码执行代价,从而实时更新操作执行代价的数值。
在一些实施例中,若第i个操作代码对应的操作执行代价未达到代价阈值,确定第i个操作代码对应的代码执行行号,建立代码执行行号与操作执行代价之间的对应关系,并作为虚拟组件在执行时刻下的组件性能信息,以便显示在代码创作者的终端屏幕上。
在一些实施例中,若第i个操作代码对应的操作执行代价达到代价阈值,调用预设的钩子函数以评估当前获取的操作执行代价,从而便于提取用于显示在终端屏幕上的组件性能信息。
示意性的,预设的钩子函数(Hook)是基于第i个操作代码额外获取更多信息以评估操作执行代价的函数,当第i个操作代码对应的操作执行代价达到代价阈值,获取与第i个操作代码对应的统计基准行数,以及与第i个操作代码对应的统计基准时刻,统计基准行数和统计基准时刻是调用钩子函数时需要分析的信息。
其中,统计基准行数用于表征最近一次达到代价阈值的代码行的结束行号,统计基准时刻用于表征最近一次达到代价阈值的代码行的结束时刻。
示意性的,统计基准行数是从组件运行代码中确定的、作为代码行比较基准的代码行序号,统计基准行数小于代码执行行号,且在未达到一定条件(该条件与操作执行代价的置零过程相关,下文会加以介绍)下通常保持不变(与代码执行行号的实时变化相区别);统计基准时刻是作为时刻比较基准的时刻,统计基准时刻小于执行时刻,且在未达到一定条件(该条件也与操作执行代价的置零过程相关,下文会加以介绍)下通常保持不变(与执行时刻的实时变化相区别)。
示意性的,若当前累计的操作执行代价之前并未置零过,统计基准时刻通常为开始执行当前虚拟组件对应的组件运行代码的开始时刻,统计基准行数通常为当前虚拟组件对应的组件运行代码的首行(即为1);若当前累计的操作执行代价之前置零过,统计基准时刻是最近一次置零操作执行代价时组件运行代码的最近一次执行时刻,统计基准行数是最近一次置零操作执行代价时组件运行代码中该操作代码的代码结束行等,后续会对置零过程加以说明。
在一个可选的实施例中,基于第i个操作代码对应的统计基准时刻以及第i个操作代码对应的执行时刻,获取累计消耗时长。
示意性的,将第i个操作代码对应的执行时刻与第i个操作代码对应的统计基准时刻之差作为累计消耗时长,累计消耗时长代表累计的操作执行代价达到代价阈值的过程中消耗的时长,如累计消耗时长代表操作执行代价从零累计至代价阈值的过程中消耗的时长。
在一个可选的实施例中,基于第i个操作代码对应的统计基准行数和代码执行行号,得到累计执行行数。
其中,累计执行行数用于表征参与确定操作执行代价的至少一个操作执行代码行的代码行数量。
示意性的,将代码执行行号与统计基准行数的差值加一作为累计执行行数(之所以加一,是为了避免丢失计算统计基准行数指示的操作执行代码行,以及为了避免修饰计算代码执行行号指示的操作执行代码行),累计执行行数代表累计的操作执行代价达到代价阈值的过程中所经过的操作执行代码行的数量,如累计执行行数代表操作执行代价从零累计至代价阈值的过程中所经过的操作执行代码行的行数。
在一个可选的实施例中,基于累计消耗时长和累计执行行数,获取与至少一个操作执行代码行分别对应的代码行执行代价,以及,显示表征操作执行代码行和的代码行执行代价之间对应关系的组件性能信息。
在一些实施例中,将累计消耗时长和累计执行行数之商,作为行执行代价。
其中,行执行代价用于表征代表执行操作执行代码的平均资源消耗情况。
示意性的,获取累计消耗时长与累计执行行数之间的商值作为行执行代价,通过累计行执行代价的方式获取与至少一个操作执行代码分别对应的代码行执行代价;行执行代价代表执行累计执行行数的操作执行代码的过程中,每执行一个操作执行代码行所消耗的时间资源(如时钟周期)作为CPU资源;以商值作为行执行代价,代表将消耗的CPU资源的平均值作为每一个操作代码行对应的消耗情况。
在一些实施例中,针对至少一个操作执行代码行中的第n个操作执行代码行,获取第n个操作执行代码行对应的代码行执行代价,以及,获取与至少一个操作执行代码行分别对应的代码行执行代价。
其中,第n个操作执行代码行对应的代码行执行代价用于表征执行前n个操作执行代码行的资源消耗之和,n为正整数。
示意性的,第n个操作执行代码行是至少一个操作执行代码中的任意一个操作执行代码行,采用累计计算方式对操作执行代码行分别对应的行执行代价进行累加,以计算得到第n个操作执行代码行对应的代码行执行代价,从而该累计计算方式确定与至少一个操作执行代码行分别对应的代码行执行代价。
例如:至少一个操作执行代码行包括操作执行代码行1、操作执行代码行2和操作执行代码行3;若计算得到的行执行代价为1,则基于累计计算过程,确定操作执行代码行1对应的代码行执行代价为1,操作执行代码行2对应的代码行执行代价为2(累计过程中在1的基础上加1),操作执行代码行3对应的代码行执行代价为3(累计过程中在2的基础上加1)等,从而确定了至少一个操作执行代码行分别对应的代码行执行代价。
示意性的,考虑到代码行执行代价的累加计算过程中,至少一个操作执行代码行中可能存在内容为空的情况,此时代表操作执行代码行中没有操作码,若对该操作执行代码行赋予行执行代价以累计计算没有意义,因此以0作为针对内容为空的操作执行代码行执行累计计算的数值;以计算得到的行执行代价作为针对内容不为空的操作执行代码行执行累计计算的数值。
例如:至少一个操作执行代码行包括操作执行代码行1、操作执行代码行2、操作执行代码行3以及操作执行代码行4;其中操作执行代码行1、操作执行代码行3以及操作执行代码行4的内容不为空,操作执行代码行2的内容为空;若计算得到的行执行代价为1,则基于累计计算过程,确定操作执行代码行1对应的代码行执行代价为1,操作执行代码行2对应的代码行执行代价为1(累计过程中在1的基础上加0),操作执行代码行3对应的代码行执行代价为2(累计过程中在1的基础上加1),操作执行代码行4对应的代码行执行代价为3(累计过程中在2的基础上加1)等,从而确定每个操作执行代码行分别对应的代码行执行代价。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
可选地,获取至少一个操作执行代码行与代码行执行代价之间的对应关系;基于对应关系得到表征至少一个操作执行代码行分别对应的代码行执行代价的组件性能信息,显示表征操作执行代码行和的代码行执行代价之间对应关系的组件性能信息。
示意性的,对应关系代表是操作执行代码行与代码行执行代价之间一一对应的关系,如基于上述内容确定至少一个操作执行代码行分别对应的代码行执行代价后,通过建立对应关系的方式,使得组件性能信息表示至少一个操作执行代码行分别对应的代码行执行代价。例如:组件性能信息为:35行(操作执行代码行)——38,代表执行至35行时的累计消耗资源为38个CPU资源等,此处不加以限定。
在一些实施例中,响应于获取与至少一个操作执行代码行分别对应的代码行执行代价,将操作执行代价置零,以及,将执行时刻更新设置为下一个统计基准时刻,以及,将代码执行行号更新设置为下一个统计基准行数。
示意性的,在操作执行代价达到预设的代价阈值并进行上述过程后,由于已经将操作执行代码行和的代码行执行代价之间对应关系作为组件性能信息展现在终端界面上,为了避免在已经达到代价阈值的操作执行代价的基础上持续累加,可以对操作执行代价置零;同时,为了避免执行第i个操作代码之后的操作代码时继续采用之前统计基准行数和统计基准时刻,以此次采集的执行时刻和代码执行行号作为更新的信息,使得执行时刻更新设置为下一个统计基准时刻,以及,将代码执行行号更新设置为下一个统计基准行数,从而便于继续累计新一轮的操作执行代价。
在一些实施例中,执行组件运行代码中的第i+1个操作代码。
示意性的,在将操作执行代价置零,将执行时刻更新设置为下一个统计基准时刻,将代码执行行号更新设置为下一个统计基准行数后,继续执行组件运行代码中位于第i个操作代码之后的第i+1个操作代码,直至在上述性能评估的同时执行完毕组件运行代码中的全部操作代码。
例如:在针对虚拟组件的组件运行代码的某一轮代码执行评估过程(如第一轮代码执行评估过程)中,当前统计的操作执行代价为21,达到代价阈值20;确定当前时刻为15,代码执行行号为20,统计基准行数为1,统计基准时刻为0;在基于上述过程获取与至少一个操作执行代码行分别对应的代码行执行代价后,将操作执行代价23置零,将统计基准行数更新设置为代码执行行号20,将统计基准时刻更新设置为当前时刻15,并开始下一轮的代码执行评估过程;若在下一轮代码执行评估过程中累计的操作执行代价再次达到代价阈值,则可以重新执行该过程直至执行完毕组件运行代码中的全部操作代码。
示意性的,借助操作执行代价置零过程以及更新统计基准时刻和统计基准行数的过程,能够避免持续累积操作执行代价导致计算资源量较大的问题,以便保持持续地性能检测,提高检测效率。
可选地,每一轮代码执行评估过程中代价阈值可能设置为相同的数值,也可能设置为不同的数值;在一个代码执行评估过程中也可能会实时调整代价阈值的数值,此处不加以限定。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
在本申请实施例中,介绍了综合操作执行代价和代码执行行号显示组件性能信息的内容。在统计虚拟组件的组件性能信息时,针对性地考虑了组件运行代码中操作代码的执行情况,通过建立代码执行行号与操作执行代价之间的关系以显示组件性能信息,有助于代码创作者基于组件性能信息针对性地定位到操作执行代价较高的代码行;其中操作执行代价达到代价阈值时还会更针对性地建立操作执行代码行与代码行执行代价的对应关系,从而使得代码创作者更高效地定位到代价行执行代价较高的操作执行代码行处,便于代码创作者更高效地修改操作执行代码行处的代码内容,提高代码调整效率,激发代码创作者编辑更优良代码的动力。
在一个可选的实施例中,可以通过虚拟机实现执行组件运行代码并获取组件性能信息的目的。虚拟机可以部署在服务器,以由服务器运行组件运行代码并获取组件性能信息;虚拟机还可以部署在代码创作者对应的第一终端,以由第一终端运行组件运行代码并获取组件性能信息;虚拟机还可以部署在其他使用对象对应的第二终端,以由第二终端运行组件运行代码并获取组件性能信息。示意性的,如图4所示,以执行主体为第一终端为例,上述图2所示出的实施例还可以实现为如下步骤410至步骤433;其中,步骤431介绍了服务器获取组件性能信息的内容,步骤432介绍了第一终端获取组件性能信息的内容,步骤433介绍了第二终端获取组件性能信息的内容。
步骤410,显示虚拟场景中的虚拟组件。
如图5所示,为虚拟场景中显示虚拟组件的界面示意图。
在一些实施例中,代码创作者进入游戏客户端的UGC模式中,点击创建新的虚拟地图后,在虚拟地图中创建虚拟组件510,从而在虚拟地图对应的虚拟场景中显示虚拟组件510。
示意性的,创建的新的虚拟地图中存在一些预设的虚拟元素(也可以称为虚拟组件,但为便于和需要进行代码编辑的虚拟组件区分,所以称为虚拟元素),如虚拟地面、虚拟建筑、主控虚拟对象等。可选地,基于代码创作者所创建的虚拟地图的差异,其中显示的预设的虚拟元素也可能存在差异。例如:在平原虚拟地图中显示的预设的虚拟元素为虚拟草地,在雪景虚拟地图中显示的基础的虚拟元素为虚拟雪地等,此处不加以限定。
如图5所示,区别于虚拟地图中存在的实体状态的虚拟对象520(预设的虚拟元素),在虚拟地图中显示的虚拟组件510为一个呈现虚化状态的虚拟对象,该虚拟状态可以作为提示代码创作者针对虚拟组件510执行代码编辑过程,以为虚拟组件510编写与之对应的组件运行代码。
步骤420,响应于接收到针对虚拟组件的组件编辑操作,显示与虚拟组件对应的组件运行代码。
在一个可选的实施例中,接收针对虚拟组件的组件触发操作,显示代码编辑界面;响应于接收到在代码编辑界面上的代码输入操作作为组件编辑操作,显示与虚拟组件对应的组件运行代码。
其中,代码编辑界面用于以代码编写形式编辑驱动虚拟组件的信息。
在一些实施例中,代码创作者可以针对虚拟组件打开组件编辑面板,并选择代码编辑功能以为虚拟组件添加组件运行代码,也即:接收组件编辑操作以显示组件运行代码的过程。
可选地,代码创作者对虚拟组件的任意区域执行第一触发操作以打开组件编辑面板,第一触发操作诸如点击操作、长按操作、滑动操作等;或者,代码创作者对虚拟组件的预设触发区域执行第二触发操作以打开组件编辑面板,第二触发操作是针对预设触发区域执行的触发操作,诸如针对预设触发区域执行点击操作、长按操作、滑动操作等。
如图5所示,虚拟组件510上显示有预设触发区域511,若将接收到针对预设触发区域511的点击操作作为组件编辑操作,则可以显示虚拟组件对应的组件编辑面板。
如图6所示,为组件编辑面板的界面示意图,其中组件编辑面板中包括多个编辑功能,如多个编辑功能可以实现不同的编辑效果;如代码编辑功能用于为虚拟组件编辑组件运行代码、组件样式调整功能用于为虚拟组件配置组件样式(颜色、尺寸等)等。
若接收到针对组件编辑面板中代码编辑功能的选择,则可以在组件编辑面板的代码编辑区域为虚拟组件添加组件运行代码。如图6所示,接收针对组件编辑面板中代码编辑功能610的选择操作作为组件触发操作(如点击操作、长按操作等),显示与虚拟组件对应的代码编辑区域620作为代码编辑界面;将针对代码编辑区域620的代码输入操作作为组件编辑操作,以得到为虚拟组件配置的组件运行代码。
在一些实施例中,为虚拟组件编辑代码的代码编辑界面还可以实现为积木搭建界面。
示意性的,积木搭建界面是通过编辑积木实现可视化编程的界面,编程积木是可视化编程中用于表示编程逻辑的基本单元。
示意性的,积木搭建界面用于承载使用对象在可视化编程中选择应用的编程积木,以便使用对象可以在积木搭建界面内对编程积木进行拖放、组合、配置等布局调整操作;编程积木为可视化编程中的图形化元素,不同的编程积木分别代表编程中的不同概念和操作,用于实现不同的逻辑功能。
在一些实施例中,多个编程积木分别对应积木类型,积木类型即可视化编程中实现的逻辑功能的类型。将编程积木理解为封装有数据执行逻辑的数据块,则在积木搭建界面中应用编程积木的过程即采纳该数据执行逻辑的过程;示意性的,编程积木对应的积木类型即数据执行逻辑对应的逻辑功能类型,如:数学运算逻辑功能对应数学运算类型的编程积木、条件判断逻辑功能对应条件判断类型的编程积木、字符串操作逻辑功能对应字符串操作类型的编程积木等。
基于编程积木的搭建过程,能够通过可视化形式为虚拟组件编辑可视化的组件运行代码,降低组件运行代码的编辑难度。也即:组件运行代码不仅可以实现为如图6所示的文本代码形式,也可以实现为基于编程积木组件的积木代码形式,此处不加以限定。
其中,组件运行代码包括用于在虚拟场景中驱动虚拟组件状态变换的至少一个操作代码。
示意性的,操作代码简称操作码,操作码是二进制编码,表示需要执行的基本操作类型(如数据处理操作、数据传输操作);可选地,通过虚拟机遍历执行至少一个操作代码的过程中,每个操作代码都会消耗CPU资源。
在一个可选的实施例中,响应于接收到针对组件运行代码的代码确认操作,建立组件运行代码与虚拟组件之间的第一绑定关系,以及,建立组件运行代码与第一代码标识之间的第二绑定关系。
其中,第一代码标识用于唯一表征组件运行代码。
示意性的,代码确认操作是用于确认当前编辑的虚拟组件的组件运行代码的操作。如图6所示,将针对保存控件630的控件触发操作作为代码确认操作,从而将当前显示在代码编辑区域620内的代码作为与虚拟组件对应的组件运行代码。
示意性的,虚拟组件是待进行代码编辑的组件,虚拟场景中包括至少一个虚拟组件,针对每个虚拟组件都可以采用代码编辑操作为虚拟组件编辑代码,从而基于代码确认操作确定至少一个虚拟组件分别对应的组件运行代码。
可选地,基于代码确认操作确定为至少一个虚拟组件分别编写的组件运行代码,与相应的虚拟组件之间的第一绑定关系,从而通过第一绑定关系可以确定与虚拟组件对应的唯一组件运行代码。
同理,代码标识是用于唯一表征为虚拟组件编辑的组件运行代码的标识;建立组件运行代码与第一代码标识之间的第二绑定关系,从而通过第一绑定关系可以确定与虚拟组件对应的唯一的第一代码标识。
例如:在针对虚拟组件A进行代码编辑并接收到代码确认操作后,确定与虚拟组件A对应的组件运行代码a;建立组件运行代码a与虚拟组件A之间的第一绑定关系,以及,建立组件运行代码a与第一代码标识1之间的第二绑定关系。
借助代码标识可以唯一确定虚拟组件,借助唯一确定的虚拟组件可以确定相应的组件运行代码。如:借助代码标识1可以唯一确定虚拟组件A,借助唯一确定的虚拟组件A可以确定相应的组件运行代码a,以便针对性地执行组件运行代码。
步骤431,接收服务器发送的组件性能信息,显示组件性能信息。
其中,服务器在执行组件运行代码的情况下采集组件性能信息。
示意性的,若通过服务器执行组件运行代码,第一终端可以将编写的组件运行代码发送至服务器(如通过安装的第一客户端发送至第一客户端对应的后台服务器),之后服务器通过执行组件运行代码以模拟驱动虚拟组件,并通过预先编写的性能检测代码分析组件运行代码的执行过程中的代码执行性能,得到组件性能信息。
可选地,组件性能信息包括平均帧率、至少一个最小帧率、代码运行消耗数据和至少一个最小帧率分别对应的代码运行消耗数据中的至少一种。
示意性的,平均帧率用于表示执行组件运行代码的预设时间段内显示的虚拟组件实现状态变换时的帧率平均值;帧率代表执行组件运行代码的单位时间内(如1秒内)虚拟组件在虚拟场景内的状态变换的状态画面帧数量,如帧率为24FPS(每秒传输帧数,FramePer Second),则代表1秒内显示24个状态画面帧,帧率越大则代表代码执行消耗数据量越大,帧率越小则代表代码执行消耗数据量越小。
至少一个最小帧率用于表示执行组件运行代码的预设时间段内显示的虚拟组件实现状态变换时统计的至少一个最小的帧率;如最小的一个帧率或者最小的3个帧率等,此处不加以限定。
其中,代码运行消耗数据是用于反映代码运行过程中资源消耗情况的数据;代码运行消耗数据包括操作执行代价和代码行执行代价中的至少一种,关于操作执行代价和代码行执行代价的获取方式在图3所示出的实施例中进行了详细说明,此处不加以赘述;其中,在显示代码行执行代价时,通常将与代码行执行代码具有对应关系的操作执行代码行结合显示(即结合作为组件性能信息),便于代码创作者针对性地定位操作执行代码行。
至少一个最小帧率分别对应的代码运行消耗数据,代表至少一个最小帧率下代码运行消耗数据,即至少一个最小帧率下的操作执行代价和/或代码行执行代价,此处不加以赘述。
此外,还可以显示基于代码运行消耗数据显示代价中位数、代价平均值等多种形式作为组件性能信息,此处不加以限定。
其中,服务器还用于运行第一客户端的程序逻辑以及将基于程序逻辑生成的逻辑信息发送至第一终端渲染显示,逻辑信息包括组件性能信息和画面信息中的至少一种。
示意性的,程序逻辑是第一客户端中负责执行数据处理的逻辑部分,基于程序逻辑生成的逻辑信息用于发送至第一终端渲染显示,以减少第一终端的数据处理量;如将执行组件运行代码的处理过程通过服务器执行,从而由服务器统计组件性能信息,以便发送至终端予以渲染显示;同理,画面信息是其他需要显示在终端界面上的信息,如虚拟对象的位置信息等,此处不加以限定。
可选地,服务器可以实现为物理服务器,还可以实现为云服务器,以服务器实现为云服务器、第一客户端实现为一款云游戏应用程序为例进行说明。基于第一客户端为云游戏应用程序,因此第一终端只需要通过第一客户端接收云服务器发送的逻辑信息并渲染显示即可,无需第一终端参与数据处理过程,其中包括通过云服务器执行组件运行代码并采集代码运行过程中的组件性能信息的过程。
步骤432,在第一终端执行组件运行代码驱动虚拟组件的情况下,采集组件性能信息,显示组件性能信息。
示意性的,若通过第一终端执行组件运行代码,服务器可以将用于评估性能信息的性能检测代码发送至第一终端,第一终端可以执行组件运行代码以驱动虚拟组件,并通过性能检测代码分析组件运行代码的执行过程中的代码执行性能,得到组件性能信息。
可选地,组件性能信息包括平均帧率、至少一个最小帧率、代码运行消耗数据和至少一个最小帧率分别对应的代码运行消耗值中的至少一种。
步骤433,在第二终端执行组件运行代码驱动虚拟组件的情况下,接收第二终端采集的、服务器转发的组件性能信息,显示组件性能信息。
其中,第二终端是第一终端之外的其他终端,第二终端上安装有第一客户端;第一终端可以将组件运行代码发送至服务器,服务器转发组件运行代码和性能检测代码至第二终端,第二终端在执行组件运行代码驱动虚拟组件时,通过性能检测代码分析组件运行代码的执行过程中的代码执行性能,得到组件性能信息。
之后第二终端可以将组件性能信息发送至服务器,以通过服务器将组件性能信息转发至第一终端,从而在第一终端上渲染显示组件性能信息。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
在本申请实施例中,介绍了通过不同主体统计得到组件性能信息的方式。通过服务器统计组件性能信息有助于提高信息获取的准确性,通过第一终端统计组件性能信息可以提高信息获取效率,通过第二终端统计组件性能信息有助于着眼于其他使用对象的生产环境而获得更针对性的组件性能信息;采用上述至少一种方式获取组件性能信息(如可以采用一种方式获取,也可以综合多种方式获取的组件性能信息平均、加权等得到更多维度的信息),提高信息显示的全面性和针对性,便于代码创作者更好地编辑调整组件运行代码。
在一个可选的实施例中,虚拟场景对应虚拟地图,在代码创作者编写其中至少一个虚拟组件分别对应的组件运行代码后,基于代码确认操作发布虚拟地图至服务器,从而有助于使用对象进入虚拟地图以游玩虚拟场景。示意性的,如图7所示,上述图2示出的步骤230之后还可以包括如下步骤710。
步骤710,响应于接收到针对组件运行代码的代码确认操作,向第一客户端对应的服务器发送与虚拟场景对应的虚拟地图。
其中,虚拟地图用于进入包括虚拟组件的虚拟场景,第一客户端用于显示虚拟场景。
在一些实施例中,虚拟地图是代码创建者创建的地图,虚拟地图对应的虚拟场景中存在至少一个虚拟组件,基于针对虚拟组件执行组件编辑操作的过程,使得每个虚拟组件分别对应一个组件运行代码;因此若一个虚拟场景中包括多个虚拟组件,则一个虚拟场景对应多个组件运行代码。
如图8所示,其中示出虚拟场景中包括多个虚拟组件,其中至少一个虚拟组件分别对应一个组件运行代码,如虚拟组件810的组件运行代码811;也可能存在未编辑组件运行代码的虚拟组件,如虚拟组件820等,此处不加以限定。
在一些实施例中,响应于接收到代码确认操作,确定虚拟组件与组件运行代码之间的对应关系;响应于接收到地图构建完成操作,发布虚拟地图。
示意性的,若虚拟地图中包括多个虚拟组件,建立每个虚拟组件与对应的组件运行代码之间的对应关系,从而确定与多个虚拟组件分别对应的组件运行代码;针对虚拟场景执行地图构建完成操作,如存在地图保存控件,将针对地图保存控件的触发操作作为地图构建完成操作,即代表确定虚拟地图对应的虚拟场景中包含的虚拟组件的组件运行代码;基于地图构建完成操作发布虚拟地图,以便第一客户端下的多个使用对象都可以游玩代码创作者创作的虚拟地图。
例如:在虚拟地图发布成功后,第一客户端下的多个游戏使用对象均可以在代码开发模式下查找由基于代码编辑操作自行开发的虚拟地图,从而通过点击虚拟地图的方式游玩虚拟地图对应的虚拟场景。
此外,代码创作者对应的终端上显示有作品管理界面,作品管理界面中包括代码创作者自行创建的至少一个虚拟地图,使得代码创作者也可以对虚拟地图触发以游玩虚拟地图对应的虚拟场景;另外,代码创作者还可以对虚拟地图触发以在虚拟地图对应的虚拟场景内调整虚拟组件对应的组件运行代码,以便改善虚拟地图的运行情况(即至少一个虚拟组件的组件运行情况)。
在一些实施例中,响应于接收到代码确认操作,服务器接收终端发送的虚拟组件对应的组件运行代码,并执行组件运行代码以获取组件性能信息。
例如:基于代码确认操作即将组件运行代码发送至服务器以模拟执行并评估性能,从而有助于提高服务器获取组件性能信息的效率,也有助于更及时地在代码创作者的终端上显示组件性能信息。
在一些实施例中,服务器基于虚拟地图执行组件运行代码模拟驱动虚拟组件并获取组件性能信息。
可选地,响应于接收到地图构建完成操作,服务器接收终端发送的虚拟组件对应的组件运行代码,并执行组件运行代码以获取组件性能信息。
例如:基于地图构建完成操作确定至少一个虚拟组件分别对应的组件运行代码后,将至少一个组件运行代码组成的代码集合发送至服务器,代码集合与虚拟地图相对应;服务器基于代码集合模拟执行至少一个组件运行代码,并评估至少一个组件运行代码分别对应的组件性能信息,从而有助于避免中断与服务器多次数据传输导致效率较低的问题,也有助于服务器基于虚拟地图整体更真实地模拟代码执行过程,之后代码创作者的终端上可以显示服务器发送的组件性能信息,以便代码创作者基于组件性能信息实现性能评估目的。
其中,组件性能信息的分析维度十分全面,不仅可以反映组件运行代码的整体运行情况,还可以通过组件运行代码中至少一个操作代码的操作执行信息,反映组件运行代码中至少一个代码行分别对应的代码消耗代价;服务器可以将组件性能信息发送至代码创作者对应的终端,以便代码创作者可以基于终端上渲染显示的组件性能信息中的代码行,针对性地在组件运行代码中定位到组件性能消耗较大的代码,从而有助于更加高效地调整组件运行代码。
在一个可选的实施例中,响应于接收到针对虚拟地图的地图进入操作,显示虚拟地图对应的虚拟场景;在执行虚拟场景中至少一个虚拟组件分别对应的组件运行代码的情况下,显示与至少一个虚拟组件分别对应的组件性能信息。
示意性的,地图进入操作为进入虚拟地图的操作,基于地图进入操作显示与虚拟地图对应的虚拟场景;虚拟场景中包括至少一个虚拟组件,每个虚拟组件分别对应一个组件运行代码,在执行至少一个虚拟组件分别对应的组件运行代码时,获取与至少一个虚拟组件分别对应的组件性能信息,或者,选择获取其中任意的一个或者多个虚拟组件的组件性能信息,并渲染显示在屏幕上。
在一个可选的实施例中,确定虚拟场景中至少一个虚拟组件分别对应的组件运行代码;在执行组件运行代码驱动至少一个虚拟组件的过程中,获取至少一个虚拟组件分别对应的组件性能信息;在以第一样式显示至少一个虚拟组件中的第一虚拟组件的情况下,显示第一虚拟组件对应的第一组件性能信息。
示意性的,虚拟组件对应组件运行代码,组件运行代码对应代码标识(或者虚拟组件对应代码标识);若第一终端在第一客户端运行过程中实时检测性能,则在执行至少一个虚拟组件分别对应的组件运行代码时,若执行至虚拟组件B对应的组件运行代码b时,可以第一样式显示虚拟组件B(第一虚拟组件),并显示第一虚拟组件对应的第一组件性能信息,第一样式区别于其他虚拟组件(当前未被性能检测的虚拟组件)的第二样式,如第一样式为高亮样式,第二样式为普通样式等,从而在代码创作者的第一终端的界面上更好地展现界面效果。
示意性的,通过第一样式显示虚拟组件的过程,可以建立代码执行和界面表现之间的关系,有助于强化组件性能信息的指向性,便于代码创作者更针对性地确定所需要进行代码调整的虚拟组件的情况,提高代码调整效率。
此外,在组件运行代码的执行过程中,基于组件运行代码的内容可能存在如下事件触发情况中的至少一个。
(1)虚拟组件初始化时执行,会在当前帧游戏结束后执行。
示意性的,如图9所示,在以游戏客户端为例的代码执行过程中,若当前帧开始后执行游戏逻辑,并判断是否有事件回调;若是,则执行步骤910,若不是,则执行步骤920至步骤930。
其中,步骤910即代表在当前帧游戏结束后执行组件运行代码的内容。例如:虚拟组件中的组件执行代码指示绽放烟花,则在当前帧游戏结束后播放绽放烟花的特效。
(2)组件代码注册了检测游戏内事件(如玩家死亡、玩家收到攻击等),则在事件触发时执行。
其中,如图9所示的步骤920至步骤930即代表在存在触发事件的情况下再执行虚拟组件的组件执行代码,如在玩家死亡的情况下执行组件运行代码以播放玩家回家特效等。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
在一个可选的实施例中,相关技术下,若客户端内配置有UGC代码编辑功能,则安装游戏客户端的终端的使用对象可以基于UGC代码编辑功能实现自定义编辑组件运行代码的目的,基于UGC编辑组件运行代码的使用对象还可以称为代码创作者。
代码创作者为了可以量化自定义的组件运行代码的运行情况,通常会自行编写检测代码,检测代码用于检测执行组件运行代码过程中的帧率,以评估组件运行代码的编辑优良性。
其中,代码创作者可以在本端(如代码创作者使用终端1编辑组件运行代码,则本端为终端1)执行组件运行代码的过程,通过检测代码检测组件运行代码执行过程中的帧率,从而在本端显示帧率曲线变化图。如图10所示,为帧率曲线变化示意图,其中示出建议帧率基准1010、不推荐帧率基准1020以及帧率曲线1030,若帧率曲线位于建议帧率基准1010附近,则代表当前组件运行代码的帧率较高,代码执行较为优良;若帧率曲线位于不推荐帧率基准1020附近,则代表当前组件运行代码的帧率较低,代码执行较差。
然而,代码创作者创作的检测代码只能在本端执行,以检测组件运行代码在本端执行过程中的帧率,从而评估代码编辑的优良性。
但是,本端提供的测试环境和在其他终端上执行的生产环境(如代码创作者希望基于组件运行代码运行虚拟组件的过程显示在其他终端上)通常并不相同,因此若仅基于测试环境评估帧率以确定组件运行代码的执行情况,存在较大的偶然性,并不利于代码创作者针对性地分析、调整代码;另外,本端采集得到的帧率仅仅能够大致反映组件运行代码的整体运行情况,代码创作者无法基于如图7所示的帧率曲线图定位到性能较低(如帧率较小)的代码位置,从而导致代码创作者无法高效地调整组件运行代码,影响代码创作者的创作积极性,也不利于得到较为优良的组件运行代码以稳定驱动虚拟组件。
在一个可选的实施例中,基于上述相关技术的技术问题,提供在检测得到的组件性能信息中包括用于表征操作代码的执行情况的操作执行信息的方式,将组件性能信息显示在代码创作者的终端上,有助于代码创作者基于操作执行信息针对性地定位组件运行代码中存在问题的操作代码处,提高代码分析和调整效率。
可选地,以一款游戏客户端内配置有UGC代码编辑功能为例,终端上若安装有游戏客户端,则终端的使用对象可以基于UGC代码编辑功能实现自定义编辑组件运行代码的目的,基于UGC编辑组件运行代码的使用对象还可以称为代码创作者;游戏客户端与服务器通信连接,服务器通常实现为游戏客户端的后台服务器;游戏客户端可以将代码创作者编辑的组件运行代码发送至服务器,若由服务器执行组件运行代码以模拟驱动虚拟组件,则还可以将上述运行性能获取方法称为“一种UGC组件运行代码执行于服务器的CPU性能评估方案”。
可选地,由游戏客户端对应的游戏平台还可以预先配置性能检测代码;在服务器执行组件运行代码的过程中,服务器通过性能检测代码检测驱动虚拟组件时虚拟组件的组件性能信息;或者,由代码创作者的终端自行检测组件运行代码以获得组件性能信息,从而在本端渲染显示组件性能信息;也可以由其他终端使用者(非代码创作者但是使用客户端的使用对象)操作的终端检测组件运行代码以获得组件性能信息,并通过服务器发送至代码创作者的终端显示组件性能信息,此处仅为示意性的举例,对于组件性能信息的获取主体不加以限定。
在一个可选的实施例中,对基于UGC功能编辑的组件运行代码执行过程中的性能检测过程进行如下说明。
如图5所示,为虚拟场景中显示虚拟组件的界面示意图。
在一些实施例中,代码创作者进入游戏客户端的UGC模式中,点击创建新的虚拟地图后,在虚拟地图中创建虚拟组件510,从而在虚拟地图对应的虚拟场景中显示虚拟组件510。
在一些实施例中,代码创作者可以针对虚拟组件打开组件编辑面板,并选择代码编辑功能以为虚拟组件添加组件运行代码,也即:接收组件编辑操作以显示组件运行代码的过程。
可选地,代码创作者对虚拟组件的任意区域执行第一触发操作以打开组件编辑面板,第一触发操作诸如点击操作、长按操作、滑动操作等;或者,代码创作者对虚拟组件的预设触发区域执行第二触发操作以打开组件编辑面板,第二触发操作是针对预设触发区域执行的触发操作,诸如针对预设触发区域执行点击操作、长按操作、滑动操作等。
如图5所示,虚拟组件510上显示有预设触发区域511,若将接收到针对预设触发区域511的点击操作作为组件编辑操作,则可以显示虚拟组件对应的组件编辑面板。
如图6所示,为组件编辑面板的界面示意图,接收针对组件编辑面板中代码编辑功能610的选择操作(如点击操作、长按操作等),显示与虚拟组件对应的代码编辑区域620;将针对代码编辑区域620的代码输入操作作为组件编辑操作,以得到为虚拟组件配置的组件运行代码。
在一些实施例中,创建的新的虚拟地图对应的虚拟场景中存在至少一个虚拟组件,基于针对虚拟组件执行组件编辑操作的过程,使得每个虚拟组件分别对应一个组件运行代码;因此若一个虚拟场景中包括多个虚拟组件,则一个虚拟场景对应多个组件运行代码。
可选地,响应于接收到代码确认操作,确定虚拟对象与组件运行代码之间的对应关系;响应于接收到地图构建完成操作,发布虚拟地图。
在一些实施例中,响应于接收到代码确认操作,服务器接收终端发送的虚拟组件对应的组件运行代码,并执行组件运行代码以获取组件性能信息。
在一些实施例中,响应于接收到地图构建完成操作,服务器接收终端发送的虚拟组件对应的组件运行代码,并执行组件运行代码以获取组件性能信息。
其中,组件性能信息的分析维度十分全面,不仅可以反映组件运行代码的整体运行情况,还可以通过组件运行代码中至少一个操作代码的操作执行信息,反映组件运行代码中至少一个代码行分别对应的代码消耗代价;服务器可以将组件性能信息发送至代码创作者对应的终端,以便代码创作者可以基于终端上渲染显示的组件性能信息中的代码行,针对性地在组件运行代码中定位到组件性能消耗较大的代码,从而有助于更加高效地调整组件运行代码。
在一些实施例中,组件性能信息包括平均帧率、最低帧率、全局游戏过程中,组件代码消耗值、最低帧率时组件代码消耗值等多种信息中的至少一种。
在一个可选的实施例中,以服务器执行组件运行代码为例,服务器中部署有虚拟机(如组件运行代码为Lua语言的脚本代码,采用Lua虚拟机等),将组件运行代码加载至虚拟机,从而通过虚拟机执行组件运行代码。
在一些实施例中,通过虚拟机遍历执行组件运行代码中包括的至少一个操作代码。
示意性的,操作代码简称操作码,操作码是二进制编码,表示需要执行的基本操作类型。可选地,通过虚拟机遍历执行至少一个操作代码的过程中,每个操作代码都会消耗CPU资源。
CPU资源包括时间资源、缓存资源、寄存器资源等多种资源;时间资源用于表示执行操作代码时CPU消耗的时长;缓存资源基于所操作的操作数是否缓存而确定,若操作数已缓存,则缓存资源消耗较少,若操作数未缓存,则缓存资源消耗较多;寄存器资源用于表征操作码执行操作数时访问寄存器的情况,如访问较多则消耗的寄存器资源较多,访问较少则消耗的寄存器资源较少等。
可选地,针对组件运行代码中至少一个操作代码的任意的第i个操作代码,获取操作执行代价,操作执行代价用于表征执行前i个操作代码的资源消耗之和。
也即:在遍历执行至少一个操作代码的过程中,每个操作代码分别对应一个码执行代价,码执行代价代表执行操作代码所消耗的CPU资源,即码执行代价用于描述时间资源、缓存资源、寄存器资源等多种资源中的至少一种资源的消耗情况;累计码执行代价以获取与操作代码对应的操作执行代价,操作执行代价可以简称为Cost。
可选地,在简化性能评估模式中,可以通过“Cost+1”表示执行某个操作码会消耗1个单位的CPU资源,1个单位的CPU资源既可以是一个时钟周期,也可以是其他硬件资源的消耗单位;也即:Cost+1这一概念实际上是为方便分析和计算CPU性能开销而设定的一个假设单位,通常指一个操作码的基本消耗,即执行该操作码所需的基本CPU资源。
示意性的,在CPU设计或者性能评估中,码执行代码可以通过操作码执行所花费的时间周期衡量,则“Cost+1”可以理解为执行某个操作码会消耗1个时钟周期。
例如,伪代码表示为每个OpCode对Cost+1:CurrentCost+=1;
其中,CurrentCost即代表通过累计码执行代价获取的操作执行代价,每执行一个操作码默认消耗1个CPU资源,此处“1”仅为示意性的举例,具体代码运行时消耗CPU资源更为复杂,在此不加以限定。
示意性的,复杂操作的操作码可能会消耗更多的CPU资源,如以时钟周期表示CPU资源,则代表复杂操作的操作码会消耗更多的时钟周期(需要更多的时间)。
例如:执行一个加法指令(ADD)的操作代码可能消耗1个时钟周期,那么它的码执行代价就是Cost+1,复杂操作(如乘法、除法)等操作代码可能消耗多个时钟周期或更多资源,其码执行代价可能是Cost+2或更高。
因此,复杂的操作码对应更大的码执行代码,使得累计得到的操作执行代价也更大,因此需要基于复杂的操作码更针对性地确定操作执行代价。
例如,伪代码表示为复杂的操作码额外加上配置的执行代价的为代表表示为:
其中,SpecialOpCode代表复杂的操作码中特殊操作码,特殊操作码是用于标识某些特定功能的指令,特殊操作码执行的操作可能不是处理器的常规操作,而是为了特殊目的而设计的;普通的操作码通常对应常规的算术、逻辑、数据传输等操作,而特殊操作码则通常用于一些不常见的任务,例如:系统调用、特殊的控制流操作(如跳转、异常处理等)、数据加密、数据流控制、异常管理等。针对特殊操作码,采用GetSpecialOpCodeCost(OpCode)获取特殊操作码对应的额外执行代价,额外执行代价是码执行代价与默认执行代价(如1)之差;也可以针对特殊操作码直接累计对应的码执行代价,此时默认执行代价时不加入累计,此处不加以限定。
其中,OP_CALL代表复杂的操作码中调用操作码(也可以称为函数调用指令),调用操作码是用于控制流转移的指令;在大多数计算机体系结构中,CALL是一种关键的指令,它会将当前程序的执行流转移到指定的函数(子程序)地址,并通常会将返回地址(即调用指令的下一条指令的地址)保存在栈中,以便在函数执行完后能够返回。针对调用操作码,采用GetFunctionCallCost()获取调用操作码对应的额外执行代价,额外执行代价是码执行代价与默认执行代价(如1)之差;也可以针对调用操作码直接累计对应的码执行代价,此时默认执行代价时不加入累计,此处不加以限定。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
在一个可选的实施例中,在执行组件运行代码的过程中,针对任意第i个操作代码获取操作执行代价后,将操作执行代价与预设的代价阈值比较。
示意性的,代价阈值是预先设定的代价数值,如20、50等数值,代价阈值可以表示为“IntervalCheckCost”;代价阈值用于评估累计码执行代价得到的操作执行代价的情况。
在一些实施例中,若操作执行代价未达到代价阈值,继续执行第i个操作代码之后的其他操作代码,并在执行过程中累计操作代码的码执行代价,从而更新操作执行代价的数值。
在一些实施例中,若操作执行代价未达到代价阈值,确定第i个操作代码对应的代码执行行号,建立代码执行行号与操作执行代价之间的对应关系,并作为虚拟组件在执行时刻下的组件性能信息,以便显示在代码创作者的终端屏幕上。
在一些实施例中,若操作执行代价达到代价阈值,调用预设的钩子函数以评估当前获取的操作执行代价,从而便于提取用于显示在终端屏幕上的组件性能信息。
可选地,获取执行组件运行代码时的执行时刻,以及,获取组件运行代码中的代码执行行号,以及,获取组件运行代码对应的统计基准行数,以及,获取组件运行代码对应的统计基准时刻。
其中,执行时刻是执行第i个操作代码后得到的操作执行代价达到代价阈值情况下的当前时刻,因此执行时刻与第i个操作代码相对应;代码执行行号是执行第i个操作代码后得到的操作执行代价达到代价阈值情况下,从组件运行代码中确定的当前正在执行的代码的代码行序号,因此代码执行行号与第i个操作代码相对应,且在组件运行代码的执行过程中会实时变化;统计基准行数是从组件运行代码中确定的、作为代码行比较基准的代码行序号,统计基准行数小于代码执行行号,且在未达到一定条件(下文会加以介绍,该条件与钩子函数相关)下通常保持不变;统计基准时刻是作为时刻比较基准的时刻,统计基准时刻小于执行时刻,且在未达到一定条件(下文会加以介绍,该条件与钩子函数相关)下通常保持不变。
示意性的,当前(Current)时刻可以表示为CurTime、代码执行行号可以表示为CurLine、统计基准行数可以表示为StartLine、统计基准时刻可以表示为StartTime。
可选地,基于执行时刻与统计基准时刻,获取累计消耗时长。
示意性的,将执行时刻与统计基准时刻之差作为累计消耗时长,累计消耗时长代表累计的操作执行代价达到代价阈值的过程中消耗的时长,如累计消耗时长代表操作执行代价从零累计至代价阈值的过程中消耗的时长。
例如:累计消耗时长可以表示为DeltaTime=CurTime-StartTime。
可选地,基于代码执行行号和统计基准行数,获取累计执行行数。
示意性的,将代码执行行号与统计基准行数的差值加一作为累计执行行数,累计执行行数代表累计的操作执行代价达到代价阈值的过程中所经过的操作执行代码行的数量,如累计执行行数代表操作执行代价从零累计至代价阈值的过程中所经过的操作执行代码行的行数。
例如:累计执行行数可以表示为CurLine-StartLine+1。
示意性的,操作执行代码行代表统计基准行数至代码执行行号之间经过的代码行,则统计基准行数至代码执行行号之间共计存在累计执行行数的操作执行代码行。例如:统计基准行数为1,代表从组件运行代码的第1个代码行开始执行;代码执行行号为5,代表当前执行至组件运行代码的第5个代码行开始统计分析;则共计执行的操作执行代码行的数量为5=(5-1+1)。
在一些实施例中,基于累计消耗时长和累计执行行数,获取与至少一个操作执行代码行分别对应的代码行执行代价。
示意性的,获取累计消耗时长与累计执行行数之间的商值作为行执行代价,通过累计行执行代价的方式获取与至少一个操作执行代码分别对应的代码行执行代价;行执行代价代表执行累计执行行数的操作执行代码的过程中,每执行一个操作执行代码行所消耗的时间资源(如时钟周期)作为CPU资源;以商值作为行执行代价,代表将消耗的CPU资源的平均值作为每一个操作代码行对应的消耗情况。
例如:行执行代价可以表示为AvgCost=DeltaTime/(CurLine-StartLine+1)。例如:累计消耗时长DeltaTime为5ms,累计执行行数CurLine-StartLine+1为5,则每个操作代码行对应的行执行代价为1ms。
可选地,采用累计行执行代价的方式获取与至少一个操作执行代码行分别对应的代码行执行代价。
示意性的,考虑到代码行执行代价的累加计算过程中,至少一个操作执行代码行中可能存在内容为空的情况,此时代表操作执行代码行中没有操作码,若对该操作执行代码行赋予行执行代价以累计计算没有意义,因此以0作为针对内容为空的操作执行代码行执行累计计算的数值;以计算得到的行执行代价作为针对内容不为空的操作执行代码行执行累计计算的数值。
例如:以伪代码形式表示此过程如下所示。
其中,CodeRecord[CurrentCodeId].Line[line]==null代表操作执行代码行的内容为空,则通过CodeRecord[CurrentCodeId].Line[line]=0,以0作为针对内容为空的操作执行代码行执行累计计算的数值;若操作执行代码行的内容不为空,通过CodeRecord[CurrentCodeId].Line[line]+=AvgCost,以计算得到的行执行代价作为针对内容不为空的操作执行代码行执行累计计算的数值。
在一个可选的实施例中,获取用于确定操作执行代价的至少一个操作执行代码行与代码行执行代价之间的对应关系;基于对应关系得到表征至少一个操作执行代码行分别对应的代码行执行代价的组件性能信息。
示意性的,对应关系代表是操作执行代码行与代码行执行代价之间一一对应的关系,如基于上述内容确定至少一个操作执行代码行分别对应的代码行执行代价后,通过建立对应关系的方式,使得组件性能信息表示至少一个操作执行代码行分别对应的代码行执行代价。
在一些实施例中,获取至少一个操作执行代码行分别对应的代码行执行代价后,将执行时刻更新设置为下一个统计基准时刻,将代码执行行号更新设置为下一个统计基准行数,将操作执行代价至零,并执行之后的操作代码。
示意性的,表达为如下形式。
//设置StartTime=CurTime:StartTime=CurTime;
//设置StartLine=CurLine:StartLine=CurLine;
//重置Cost为0:CurrentCost=0。
在一些实施例中,在执行上述过程前通常还需要设置初始化过程;针对每个虚拟组件分别对应的组件运行代码(Code),可以采用唯一的代码标识(CodeId)区别,示意性的,初始化伪代码如下所示。
CodeRecord代表组件运行代码的执行日志数据;Line用于指示采用累加方式获取代价。
示意性的,组件运行代码过程基于组件运行代码对应的代码标识CodeId实现,表示为function ExecuteComponentCode(CodeId);组件运行代码过程的伪代码如下所示。
以上伪代码仅为示意性的举例,基于上述伪代码通过虚拟机执行组件运行代码并获取性能的内容已在上述内容介绍,此处不加以赘述。
值得注意的是,以上仅为示意性的举例,本申请实施例对此不加以限定。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
在本申请实施例中,能够在平衡服务器成本和性能的场景下,使得游戏玩家得到真实性能反馈,并且精确到代码行数和性能消耗,使得代码创作者基于这些反馈可以更针对性地改善组件运行代码编写过程的游戏体验;此外,产品开发场景也可以获得实时的性能数据,便于游戏开发平台精准定位缺陷并改善产品。
图11是本申请一个示例性实施例提供的运行性能获取装置的结构框图,如图11所示,该装置包括如下部分:
显示模块1110,用于显示虚拟场景中的虚拟组件;
显示模块1110,还用于响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,所述组件运行代码包括用于在所述虚拟场景中驱动所述虚拟组件状态变换的至少一个操作代码;
显示模块1110,还用于在执行所述组件运行代码驱动所述虚拟组件的情况下,显示所述虚拟组件对应的组件性能信息;所述组件性能信息包括用于表征所述至少一个操作代码中第i个操作代码的执行情况的操作执行信息,i为正整数。
在一个可选的实施例中,所述显示模块1110还用于在遍历执行所述组件运行代码中的所述至少一个操作代码的过程中,针对所述第i个操作代码,获取操作执行代价,所述操作执行代价用于表征执行前i个操作代码的资源消耗之和;从所述组件运行代码中确定所述第i个操作代码对应的代码执行行号,所述代码执行行号用于表征所述第i个操作代码所处的代码行;基于所述操作执行代价和所述代码执行行号显示所述组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于在所述操作执行代价达到预设的代价阈值的情况下,获取与第i个操作代码对应的统计基准行数,以及与所述第i个操作代码对应的统计基准时刻;所述统计基准行数用于表征最近一次达到所述代价阈值的代码行的结束行号,所述统计基准时刻用于表征最近一次达到所述代价阈值的代码行的结束时刻;基于所述第i个操作代码对应的统计基准时刻以及所述第i个操作代码对应的执行时刻,获取累计消耗时长;将所述第i个操作代码对应的统计基准行数和所述代码执行行号的差值,作为累计执行行数,所述累计执行行数用于表征参与确定所述操作执行代价的至少一个操作执行代码行的代码行数量;基于所述累计消耗时长和所述累计执行行数,获取与所述至少一个操作执行代码行分别对应的代码行执行代价,以及,显示表征操作执行代码行和的代码行执行代价之间对应关系的所述组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于基于所述累计消耗时长和所述累计执行行数,得到行执行代价,所述行执行代价用于表征代表执行所述操作执行代码的平均资源消耗情况;针对所述至少一个操作执行代码行中的第n个操作执行代码行,获取第n个操作执行代码行对应的代码行执行代价,以及,获取与所述至少一个操作执行代码行分别对应的代码行执行代价;所述第n个操作执行代码行对应的代码行执行代价用于表征执行前n个操作执行代码行的资源消耗之和,n为正整数。
在一个可选的实施例中,所述显示模块1110还用于响应于获取与所述至少一个操作执行代码行分别对应的代码行执行代价,将所述操作执行代价置零;以及,将所述执行时刻更新设置为下一个统计基准时刻,以及,将所述代码执行行号更新设置为下一个统计基准行数;执行所述组件运行代码中的第i+1个操作代码。
在一个可选的实施例中,所述显示模块1110还用于在执行所述组件运行代码驱动所述虚拟组件的情况下,获取所述组件性能信息;所述组件性能信息包括平均帧率、至少一个最小帧率、代码运行消耗数据和所述至少一个最小帧率分别对应的代码运行消耗数据中的至少一种,所述代码运行消耗数据包括操作执行代价和代码行执行代价中的至少一种;显示所述虚拟组件对应的所述组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于在第一终端执行所述组件运行代码驱动所述虚拟组件的情况下,采集所述组件性能信息,显示所述虚拟组件对应的所述组件性能信息;或者,在第二终端执行所述组件运行代码驱动所述虚拟组件的情况下,接收所述第二终端采集的、所述服务器转发的所述组件性能信息,显示所述虚拟组件对应的所述组件性能信息;所述第二终端是所述第一终端之外的其他终端,所述第二终端上安装有所述第一客户端。
在一个可选的实施例中,接收服务器发送的组件性能信息,所述服务器在执行所述组件运行代码的情况下采集所述组件性能信息;所述服务器用于运行第一客户端的程序逻辑以及将基于所述程序逻辑生成的逻辑信息发送至第一终端渲染显示,所述逻辑信息包括所述组件性能信息和画面信息中的至少一种;显示所述虚拟组件对应的组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于响应于接收到针对所述组件运行代码的代码确认操作,向第一客户端对应的服务器发送与所述虚拟场景对应的所述虚拟地图,所述虚拟地图用于进入包括所述虚拟组件的所述虚拟场景。
在一个可选的实施例中,所述显示模块1110还用于响应于接收到针对所述虚拟地图的地图进入操作,显示所述虚拟地图对应的所述虚拟场景;在执行所述虚拟场景中至少一个虚拟组件分别对应的组件运行代码的情况下,显示与所述至少一个虚拟组件分别对应的组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于确定所述虚拟场景中至少一个虚拟组件分别对应的组件运行代码;在执行所述组件运行代码驱动所述至少一个虚拟组件的情况下,获取所述至少一个虚拟组件分别对应的所述组件性能信息;在以第一样式显示所述至少一个虚拟组件中的第一虚拟组件的情况下,显示所述第一虚拟组件对应的第一组件性能信息。
在一个可选的实施例中,所述显示模块1110还用于接收针对所述虚拟组件的组件触发操作,显示代码编辑界面,所述代码编辑界面用于以代码编写形式编辑驱动所述虚拟组件的信息;响应于接收到在所述代码编辑界面上的所述代码输入操作作为所述组件编辑操作,显示与所述虚拟组件对应的所述组件运行代码。
在一个可选的实施例中,所述显示模块1110还用于响应于接收到针对所述组件运行代码的代码确认操作,建立所述组件运行代码与所述虚拟组件之间的第一绑定关系,以及,建立所述组件运行代码与第一代码标识之间的第二绑定关系;所述第一代码标识用于唯一表征所述组件运行代码。
综上所述,借助组件性能信息可以在展现组件运行代码的整体执行情况的过程中,通过操作执行信息更针对性地展现组件运行代码中操作代码的执行情况,避免只能了解虚拟组件执行的大致信息,而导致调整组件运行代码时存在的调整效率较低的问题,也便于通过操作执行信息高效定位存在性能问题的操作代码,提高代码调整效率以提高组件运行代码的代码调整效率,使得代码创作者可以更针对性地改善组件运行代码,从而保障虚拟组件在虚拟场景中的驱动稳定性。
需要说明的是:上述实施例提供的运行性能获取装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的运行性能获取装置与运行性能获取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图12示出了本申请一个示例性实施例提供的电子设备1200的结构框图。该电子设备1200可以是便携式移动终端,比如:智能手机、车载终端、平板电脑、MP3播放器(MovingPicture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。电子设备1200还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,电子设备1200包括有:处理器1201和存储器1202。
处理器1201可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1201可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1201也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1201可以集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1201还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1202可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1202还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1202中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1201所执行以实现本申请中方法实施例提供的运行性能获取方法。
在一些实施例中,电子设备1200还包括有一个或多个传感器。该一个或多个传感器包括但不限于:接近传感器、陀螺仪传感器、压力传感器。
接近传感器,也称距离传感器,通常设置在电子设备1200的前面板。接近传感器用于采集用户与电子设备1200的正面之间的距离。
陀螺仪传感器可以检测电子设备1200的机体方向及转动角度,陀螺仪传感器可以与加速度传感器协同采集用户对电子设备1200的3D动作。处理器1201根据陀螺仪传感器采集的数据,可以实现如下功能:动作感应【如根据用户的倾斜操作来改变用户界面(UserInterface,UI)】、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器可以设置在电子设备1200的侧边框和/或显示屏的下层。当压力传感器设置在电子设备1200的侧边框时,可以检测用户对电子设备1200的握持信号,由处理器1201根据压力传感器采集的握持信号进行左右手识别或快捷操作。当压力传感器设置在显示屏的下层时,由处理器1201根据用户对显示屏的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
在一些实施例中,电子设备1200还包括其他组件部分,本领域技术人员可以理解,图12中示出的结构并不构成对电子设备1200的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请的实施例还提供了一种计算机设备,该计算机设备可以实现为终端或者服务器。该计算机设备包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述各方法实施例提供的运行性能获取方法。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行,以实现上述各方法实施例提供的运行性能获取方法。
本申请的实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中任一所述的运行性能获取方法。
可选地,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、固态硬盘(SSD,Solid State Drives)或光盘等。其中,随机存取记忆体可以包括电阻式随机存取记忆体(ReRAM,Resistance RandomAccess Memory)和动态随机存取存储器(DRAM,Dynamic Random Access Memory)。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (15)
1.一种运行性能获取方法,其特征在于,所述方法包括:
显示虚拟场景中的虚拟组件;
响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,所述组件运行代码包括用于在所述虚拟场景中驱动所述虚拟组件状态变换的至少一个操作代码;
在遍历执行所述组件运行代码中的所述至少一个操作代码的过程中,针对第i个操作代码,获取操作执行代价,所述操作执行代价用于表征执行前i个操作代码的资源消耗之和,i为正整数;
从所述组件运行代码中确定所述第i个操作代码对应的代码执行行号,所述代码执行行号用于表征所述第i个操作代码所处的代码行;
在所述操作执行代价达到预设的代价阈值的情况下,获取与第i个操作代码对应的统计基准行数,以及与所述第i个操作代码对应的统计基准时刻;所述统计基准行数用于表征最近一次达到所述代价阈值的代码行的结束行号,所述统计基准时刻用于表征最近一次达到所述代价阈值的代码行的结束时刻;
基于所述第i个操作代码对应的统计基准时刻以及所述第i个操作代码对应的执行时刻,获取累计消耗时长;
将所述第i个操作代码对应的统计基准行数和所述代码执行行号的差值,作为累计执行行数,所述累计执行行数用于表征参与确定所述操作执行代价的至少一个操作执行代码行的代码行数量;
基于所述累计消耗时长和所述累计执行行数,获取与所述至少一个操作执行代码行分别对应的代码行执行代价,以及,显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息;所述组件性能信息包括用于表征所述至少一个操作代码中第i个操作代码的执行情况的操作执行信息。
2.根据权利要求1所述的方法,其特征在于,所述基于所述累计消耗时长和所述累计执行行数,获取与所述至少一个操作执行代码行分别对应的代码行执行代价,包括:
基于所述累计消耗时长和所述累计执行行数,得到行执行代价,所述行执行代价用于表征代表执行所述操作执行代码的平均资源消耗情况;
针对所述至少一个操作执行代码行中的第n个操作执行代码行,获取第n个操作执行代码行对应的代码行执行代价,以及,获取与所述至少一个操作执行代码行分别对应的代码行执行代价;所述第n个操作执行代码行对应的代码行执行代价用于表征执行前n个操作执行代码行的资源消耗之和,n为正整数。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于获取与所述至少一个操作执行代码行分别对应的代码行执行代价,将所述操作执行代价置零;以及,将所述执行时刻更新设置为下一个统计基准时刻,以及,将所述代码执行行号更新设置为下一个统计基准行数;
执行所述组件运行代码中的第i+1个操作代码。
4.根据权利要求1至3任一所述的方法,其特征在于,所述显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息,包括:
在执行所述组件运行代码驱动所述虚拟组件的情况下,获取所述组件性能信息;所述组件性能信息包括平均帧率、至少一个最小帧率、代码运行消耗数据和所述至少一个最小帧率分别对应的代码运行消耗数据中的至少一种,所述代码运行消耗数据包括操作执行代价和代码行执行代价中的至少一种;
显示所述虚拟组件对应的所述组件性能信息。
5.根据权利要求1至3任一所述的方法,其特征在于,所述方法由第一终端执行,所述第一终端上安装的第一客户端与服务器通信连接;
所述显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息,包括:
在所述第一终端执行所述组件运行代码驱动所述虚拟组件的情况下,采集所述组件性能信息,显示所述虚拟组件对应的所述组件性能信息;或者,
在第二终端执行所述组件运行代码驱动所述虚拟组件的情况下,接收所述第二终端采集的、所述服务器转发的所述组件性能信息,显示所述虚拟组件对应的所述组件性能信息;所述第二终端是所述第一终端之外的其他终端,所述第二终端上安装有所述第一客户端。
6.根据权利要求1至3任一所述的方法,其特征在于,所述方法由第一终端执行,所述第一终端上安装的第一客户端与服务器通信连接;
所述显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息,包括:
接收所述服务器发送的组件性能信息,所述服务器在执行所述组件运行代码的情况下采集所述组件性能信息;所述服务器用于运行所述第一客户端的程序逻辑以及将基于所述程序逻辑生成的逻辑信息发送至所述第一终端渲染显示,所述逻辑信息包括所述组件性能信息和画面信息中的至少一种;
显示所述虚拟组件对应的组件性能信息。
7.根据权利要求1至3任一所述的方法,其特征在于,所述响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码之后,还包括:
响应于接收到针对所述组件运行代码的代码确认操作,向第一客户端对应的服务器发送与所述虚拟场景对应的虚拟地图,所述虚拟地图用于进入包括所述虚拟组件的所述虚拟场景。
8.根据权利要求7所述的方法,其特征在于,所述显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息,包括:
响应于接收到针对所述虚拟地图的地图进入操作,显示所述虚拟地图对应的所述虚拟场景;
在执行所述虚拟场景中至少一个虚拟组件分别对应的组件运行代码的情况下,显示与所述至少一个虚拟组件分别对应的组件性能信息。
9.根据权利要求1至3任一所述的方法,其特征在于,所述显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息,包括:
确定所述虚拟场景中至少一个虚拟组件分别对应的组件运行代码;
在执行所述组件运行代码驱动所述至少一个虚拟组件的情况下,获取所述至少一个虚拟组件分别对应的所述组件性能信息;
在以第一样式显示所述至少一个虚拟组件中的第一虚拟组件的情况下,显示所述第一虚拟组件对应的第一组件性能信息。
10.根据权利要求1至3任一所述的方法,其特征在于,所述响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,包括:
接收针对所述虚拟组件的组件触发操作,显示代码编辑界面,所述代码编辑界面用于以代码编写形式编辑驱动所述虚拟组件的信息;
响应于接收到在所述代码编辑界面上的代码输入操作作为所述组件编辑操作,显示与所述虚拟组件对应的所述组件运行代码。
11.根据权利要求1至3任一所述的方法,其特征在于,所述方法还包括:
响应于接收到针对所述组件运行代码的代码确认操作,建立所述组件运行代码与所述虚拟组件之间的第一绑定关系,以及,建立所述组件运行代码与第一代码标识之间的第二绑定关系;所述第一代码标识用于唯一表征所述组件运行代码。
12.一种运行性能获取装置,其特征在于,所述装置包括:
显示模块,用于显示虚拟场景中的虚拟组件;
显示模块,还用于响应于接收到针对所述虚拟组件的组件编辑操作,显示与所述虚拟组件对应的组件运行代码,所述组件运行代码包括用于在所述虚拟场景中驱动所述虚拟组件状态变换的至少一个操作代码;
显示模块,还用于在遍历执行所述组件运行代码中的所述至少一个操作代码的过程中,针对第i个操作代码,获取操作执行代价,所述操作执行代价用于表征执行前i个操作代码的资源消耗之和,i为正整数;从所述组件运行代码中确定所述第i个操作代码对应的代码执行行号,所述代码执行行号用于表征所述第i个操作代码所处的代码行;在所述操作执行代价达到预设的代价阈值的情况下,获取与第i个操作代码对应的统计基准行数,以及与所述第i个操作代码对应的统计基准时刻;所述统计基准行数用于表征最近一次达到所述代价阈值的代码行的结束行号,所述统计基准时刻用于表征最近一次达到所述代价阈值的代码行的结束时刻;基于所述第i个操作代码对应的统计基准时刻以及所述第i个操作代码对应的执行时刻,获取累计消耗时长;将所述第i个操作代码对应的统计基准行数和所述代码执行行号的差值,作为累计执行行数,所述累计执行行数用于表征参与确定所述操作执行代价的至少一个操作执行代码行的代码行数量;基于所述累计消耗时长和所述累计执行行数,获取与所述至少一个操作执行代码行分别对应的代码行执行代价,以及,显示表征操作执行代码行和的代码行执行代价之间对应关系的所述虚拟组件对应的组件性能信息;所述组件性能信息包括用于表征所述至少一个操作代码中第i个操作代码的执行情况的操作执行信息。
13.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一段程序,所述至少一段程序由所述处理器加载并执行以实现如权利要求1至11任一所述的运行性能获取方法。
14.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一段程序,所述至少一段程序由处理器加载并执行以实现如权利要求1至11任一所述的运行性能获取方法。
15.一种计算机程序产品,其特征在于,包括计算机指令,所述计算机指令被处理器执行时实现如权利要求1至11任一所述的运行性能获取方法。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202511735082.9A CN121560412A (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
| CN202411758168.9A CN119690537B (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202411758168.9A CN119690537B (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
Related Child Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202511735082.9A Division CN121560412A (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN119690537A CN119690537A (zh) | 2025-03-25 |
| CN119690537B true CN119690537B (zh) | 2025-11-25 |
Family
ID=95040362
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202511735082.9A Pending CN121560412A (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
| CN202411758168.9A Active CN119690537B (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202511735082.9A Pending CN121560412A (zh) | 2024-12-03 | 2024-12-03 | 运行性能获取方法、装置、设备、存储介质及程序产品 |
Country Status (1)
| Country | Link |
|---|---|
| CN (2) | CN121560412A (zh) |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114398219A (zh) * | 2021-12-10 | 2022-04-26 | 珠海金山数字网络科技有限公司 | 内存占用分析方法、装置、设备及存储介质 |
| CN118079372A (zh) * | 2024-02-01 | 2024-05-28 | 网易(杭州)网络有限公司 | 异常检测方法、装置和电子设备 |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN111277628B (zh) * | 2020-01-10 | 2021-09-21 | 腾讯科技(深圳)有限公司 | 服务器配置方法、装置及业务服务器 |
| CA3144605A1 (en) * | 2021-12-30 | 2023-06-30 | Picture This Today 3D Inc. | Methods and systems for interactive customisation and visualisation of virtual environments and for digitally configuring virtual object assemblies |
| CN118649410A (zh) * | 2024-05-10 | 2024-09-17 | 网易(杭州)网络有限公司 | 游戏性能数据的获取方法、装置和电子设备 |
-
2024
- 2024-12-03 CN CN202511735082.9A patent/CN121560412A/zh active Pending
- 2024-12-03 CN CN202411758168.9A patent/CN119690537B/zh active Active
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114398219A (zh) * | 2021-12-10 | 2022-04-26 | 珠海金山数字网络科技有限公司 | 内存占用分析方法、装置、设备及存储介质 |
| CN118079372A (zh) * | 2024-02-01 | 2024-05-28 | 网易(杭州)网络有限公司 | 异常检测方法、装置和电子设备 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN121560412A (zh) | 2026-02-24 |
| CN119690537A (zh) | 2025-03-25 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110147231B (zh) | 组合特效生成方法、装置及存储介质 | |
| US10143924B2 (en) | Enhancing user experience by presenting past application usage | |
| WO2021043110A1 (zh) | 虚拟对象的移动控制方法、装置、终端及存储介质 | |
| US9595202B2 (en) | Programming learning center | |
| CN112346935B (zh) | 渲染耗时的获取、显示方法、性能监控方法、装置及设备 | |
| CN111481930B (zh) | 虚拟对象控制方法、装置、计算机设备和存储介质 | |
| CN111330272B (zh) | 虚拟对象的控制方法、装置、终端及存储介质 | |
| CN115040867B (zh) | 一种游戏卡牌控制方法、装置、计算机设备及存储介质 | |
| CN113069769B (zh) | 云游戏界面显示方法、装置、电子设备以及存储介质 | |
| CN108495165A (zh) | 弹幕播放控制方法、移动终端及弹幕播放控制系统 | |
| CN111135579A (zh) | 一种游戏软件的交互方法、装置、终端设备及存储介质 | |
| Zechner et al. | Beginning Android Games | |
| EP4561719A1 (en) | User sentiment detection to identify user impairment during game play providing for automatic generation or modification of in-game effects | |
| CN118491091A (zh) | 游戏编辑方法、游戏编辑装置、程序产品与电子设备 | |
| CN114130011B (zh) | 虚拟场景的对象选择方法、设备、存储介质及程序产品 | |
| CN119215403A (zh) | 信息显示方法、装置、电子设备和计算机可读存储介质 | |
| CN120569245A (zh) | 文本提取以单独编码文本和图像以在低连接性时段期间流式传输 | |
| CN119690537A (zh) | 运行性能获取方法、装置、设备、存储介质及程序产品 | |
| WO2024239795A9 (zh) | 操作控制方法、装置、设备、存储介质和程序产品 | |
| CN117899460A (zh) | 游戏中的互动方法、装置和电子设备 | |
| Mehta | Learn OpenGL ES: for mobile game and graphics development | |
| US20250269277A1 (en) | Generation of highlight reel from stored user generated content for a user specified time period | |
| US12623143B2 (en) | AI responsive layout for cross-platform environments | |
| KR102731534B1 (ko) | 정보 디스플레이 방법 및 장치, 단말기, 저장 매체 및 컴퓨터 프로그램 제품 | |
| CN118012407B (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 |