CN115729557B - 脚本处理方法和装置 - Google Patents
脚本处理方法和装置 Download PDFInfo
- Publication number
- CN115729557B CN115729557B CN202211433692.XA CN202211433692A CN115729557B CN 115729557 B CN115729557 B CN 115729557B CN 202211433692 A CN202211433692 A CN 202211433692A CN 115729557 B CN115729557 B CN 115729557B
- Authority
- CN
- China
- Prior art keywords
- script
- command
- current
- rendering
- simplified
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 13
- 238000009877 rendering Methods 0.000 claims abstract description 333
- 238000004458 analytical method Methods 0.000 claims abstract description 155
- 238000000034 method Methods 0.000 claims abstract description 51
- 230000008569 process Effects 0.000 description 21
- 238000010586 diagram Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 239000003638 chemical reducing agent Substances 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
Abstract
本申请涉及一种脚本处理方法和装置。所述方法包括:获取待处理的脚本文件,以及获取针对脚本文件的待简化渲染命令;根据待简化渲染命令在脚本文件中的位置,获取脚本文件的脚本命令简化区间;对脚本命令简化区间中包含的脚本命令进行解析处理,得到脚本命令简化区间对应的脚本解析结果;从脚本解析结果中,获取与待简化渲染命令相关联的目标脚本解析结果,利用目标脚本解析结果生成与待简化渲染命令相对应的脚本简化文件。采用本方法能够减少回放所使用的脚本文件的规模,来实现提高脚本命令文件的回放效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种脚本处理方法和装置。
背景技术
随着计算机技术的发展,出现了一种图像渲染技术,用户可以编译用于渲染图像的脚本,来实现图像画面的渲染。而对于渲染的图像画面的调试,则通常是通过对图像画面所对应的脚本文件进行分析来实现,用户可以获取需要进行调试的图像画面所对应的脚本命令文件,再对上述脚本命令进行回放,来实现图像画面的调试。
然而,在图像画面越来越精细的情况下,其对应的脚本文件的规模也会不断增加,如果通过上述方式进行图像画面的调试,则可能造成脚本命令文件的回放效率低下。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高脚本文件回放效率的脚本处理方法和装置。
第一方面,本申请提供了一种脚本处理方法,所述方法包括:
获取待处理的脚本文件,以及获取针对所述脚本文件的待简化渲染命令;
根据所述待简化渲染命令在所述脚本文件中的位置,获取所述脚本文件的脚本命令简化区间;
对所述脚本命令简化区间中包含的脚本命令进行解析处理,得到所述脚本命令简化区间对应的脚本解析结果;
从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件。
在其中一个实施例中,所述脚本文件为渲染图像帧所对应的脚本文件,所述脚本文件的数量为多个,分别对应于不同的渲染图像帧,各个脚本文件包含多个脚本命令行;所述根据所述待简化渲染命令在所述脚本文件中的位置,获取所述脚本文件的脚本命令简化区间,包括:根据所述待简化渲染命令在多个脚本文件中的位置,确定所述待简化渲染命令所在的目标脚本文件,并确定所述目标脚本文件对应的目标脚本命令行;获取所述目标脚本文件所对应的第二渲染图像帧,并将图像帧顺序位于所述第二渲染图像帧之前的各个渲染图像帧,作为第一渲染图像帧;将所述第一渲染图像帧分别对应的脚本文件包含的脚本命令行,以及所述目标脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行,作为所述脚本命令简化区间。
在其中一个实施例中,所述确定所述目标脚本文件对应的目标脚本命令行,包括:在所述待简化渲染命令为单个渲染命令的情况下,将所述待简化渲染命令所在的脚本命令行作为所述目标脚本命令行;在所述待简化渲染命令为预设脚本命令区间中包含的多个渲染命令的情况下,将所述预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行作为所述目标脚本命令行。
在其中一个实施例中,所述对所述脚本命令简化区间中包含的脚本命令进行解析处理,得到所述脚本命令简化区间对应的脚本解析结果,包括:获取当前渲染图像帧,以及获取所述当前渲染图像帧对应的当前脚本文件;若所述当前渲染图像帧为所述第一渲染图像帧,则对所述当前脚本文件进行解析处理,得到所述脚本命令简化区间对应的第一脚本解析结果,并将所述当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,返回执行获取所述当前渲染图像帧对应的当前脚本文件的步骤;若所述当前渲染图像帧为所述第二渲染图像帧,则对所述当前脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行进行解析处理,得到所述脚本命令简化区间对应的第二脚本解析结果;将所述第一脚本解析结果与所述第二脚本解析结果,作为所述脚本命令简化区间对应的脚本解析结果。
在其中一个实施例中,所述对所述当前脚本文件进行解析处理,得到所述脚本命令简化区间对应的第一脚本解析结果,包括:获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令;确定所述第一当前脚本命令的脚本命令类型;在所述脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对所述第一当前脚本命令进行解析处理;在所述脚本命令类型表征为渲染类命令的情况下,利用用于解析渲染命令的第二解析指令,对所述第一当前脚本命令进行解析处理;将所述第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,返回执行获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令,直到所述第一当前脚本命令行是所述当前脚本文件的最后一个脚本命令行,将各个第一当前脚本命令行的解析处理结果作为所述第一脚本解析结果。
在其中一个实施例中,所述对所述当前脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行进行解析处理,得到所述脚本命令简化区间对应的第二脚本解析结果,包括:获取第二当前脚本命令行,以及所述第二当前脚本命令行对应的第二当前脚本命令;确定所述第二当前脚本命令的脚本命令类型;在所述脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对所述第二当前脚本命令进行解析处理;在所述脚本命令类型表征为渲染类命令的情况下,判断所述第二当前脚本命令是否为所述待简化渲染命令;在所述第二当前脚本命令不是所述待简化渲染命令的情况下,利用用于解析渲染命令的第二解析指令,对所述第二当前脚本命令进行解析处理;将所述第二当前脚本命令行的下一脚本命令行作为新的第二当前脚本命令行,返回执行获取第二当前脚本命令行,以及所述第二当前脚本命令行对应的第二当前脚本命令的步骤,直到所述第二当前脚本命令行是所述目标脚本命令行,将各个第二当前脚本命令行的解析处理结果作为所述第二脚本解析结果。
在其中一个实施例中,所述判断所述第二当前脚本命令是否为所述待简化渲染命令之后,包括:在所述第二当前脚本命令是所述待简化渲染命令的情况下,记录所述第二当前脚本命令;所述从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件,包括:从所述脚本解析结果中,获取与所述第二当前脚本命令相关联的目标脚本解析结果;利用所述目标脚本解析结果,以及所述第二当前脚本命令,生成与所述第二当前脚本命令对应的脚本简化文件。
在其中一个实施例中,所述获取针对所述脚本文件的待简化渲染命令,包括:展示渲染命令录入界面;获取在渲染命令录入界面中输入的图像帧标识,以及在渲染命令录入界面中输入的命令行标识;将所述脚本文件包含的脚本命令行中,与所述图像帧标识以及命令行标识相匹配的脚本命令行所对应的脚本命令,作为所述待简化渲染命令。
在其中一个实施例中,所述脚本文件为OpenGL脚本文件;所述获取待处理的脚本文件,包括:通过OpenGL脚本捕捉器获取所述脚本文件;所述利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件之后,还包括:将所述脚本简化文件输入至OpenGL脚本运行器,通过所述OpenGL脚本运行器对所述脚本简化文件进行回放处理。
第二方面,本申请还提供了一种脚本处理装置,所述装置包括:
脚本文件获取模块,用于获取待处理的脚本文件,以及获取针对所述脚本文件的待简化渲染命令;
简化区间获取模块,用于根据所述待简化渲染命令在所述脚本文件中的位置,获取所述脚本文件的脚本命令简化区间;
解析结果获取模块,用于通过脚本解析器,对所述脚本命令简化区间中包含的脚本命令进行解析处理,得到所述脚本命令简化区间对应的脚本解析结果;
简化脚本获取模块,用于从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件。
上述脚本处理方法和装置,通过获取待处理的脚本文件,以及获取针对脚本文件的待简化渲染命令;根据待简化渲染命令在脚本文件中的位置,获取脚本文件的脚本命令简化区间;对脚本命令简化区间中包含的脚本命令进行解析处理,得到脚本命令简化区间对应的脚本解析结果;从脚本解析结果中,获取与待简化渲染命令相关联的目标脚本解析结果,利用目标脚本解析结果生成与待简化渲染命令相对应的脚本简化文件。本申请可以对脚本文件中的某一个渲染命令进行简化,从而生成该渲染命令相对应的脚本简化文件,用户在进行针对某一个渲染命令的调试时,只需要对脚本简化文件进行回放,从而可以减少回放所使用的脚本文件的规模,来实现提高脚本命令文件的回放效率。
附图说明
图1为一个实施例中脚本处理方法的流程示意图;
图2为一个实施例中获取脚本文件的脚本命令简化区间的流程示意图;
图3为一个实施例中得到脚本解析结果的流程示意图;
图4为一个实施例中得到第一脚本解析结果的流程示意图;
图5为一个实施例中得到第二脚本解析结果的流程示意图;
图6为一个实施例中渲染命令录入界面的界面示意图;
图7为一个应用实例中OpenGL的脚本简化系统流程示意图;
图8为一个应用实例中脚本简化器的工作流程示意图;
图9为一个应用实例中脚本命令解析流程示意图;
图10a为一个应用实例中第一脚本解析的流程示意图;
图10b为一个应用实例中第二脚本解析的流程示意图;
图10c为一个应用实例中第三脚本解析的流程示意图;
图11为一个应用实例中记录简化命令以及资源加载的流程示意图;
图12为一个实施例中脚本处理装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种脚本处理方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
步骤S101,获取待处理的脚本文件,以及获取针对脚本文件的待简化渲染命令。
其中,待处理的脚本文件指的是需要进行脚本简化处理的脚本文件,例如可以是用于图像画面调试的图像帧所对应的脚本文件,而待简化渲染命令则指的是脚本文件中需要进行简化处理的渲染命令,即draw命令,例如可以是图像帧中出现渲染错误的渲染命令,该待简化渲染命令可以由用户指定。具体来说,终端可以获取需要进行脚本简化处理的脚本文件,以及针对脚本文件的待简化渲染命令。
步骤S102,根据待简化渲染命令在脚本文件中的位置,获取脚本文件的脚本命令简化区间。
在脚本文件的简化过程中,由于脚本的命令之间存在着相互依赖的关系,是不能只保留待简化渲染命令,这样是不能保证简化后的脚本命令的合法性以及渲染结果的正确性,因此在进行脚本简化过程中,需要先通过对脚本文件进行解析,来得到脚本命令之间的依赖关系,而脚本命令简化区间则指的是需要进行脚本命令解析的脚本文件区间。
具体来说,终端在得到待简化渲染命令,则可以基于该待简化渲染命令在上述脚本文件中的位置,即待简化渲染命令是在哪个脚本文件中的哪个命令行中,来确定出用于实现脚本命令解析的脚本命令简化区间。
步骤S103,对脚本命令简化区间中包含的脚本命令进行解析处理,得到脚本命令简化区间对应的脚本解析结果。
脚本解析结果指的是对脚本命令解析处理后得到的解析结果,包含有基础命令(显示适配器display,窗口window,设备上下文context等的选取等),当前各种状态(开关状态,状态信息等),各类资源(纹理Texture,缓存Buffer,FBO等),资源加载以及各种渲染命令等等。具体来说,终端可以对脚本命令简化区间中包含的脚本命令进行解析处理,从而得到脚本命令简化区间对应的脚本解析结果。
步骤S104,从脚本解析结果中,获取与待简化渲染命令相关联的目标脚本解析结果,利用目标脚本解析结果生成与待简化渲染命令相对应的脚本简化文件。
而目标脚本解析结果则指的是脚本解析结果中,和待简化渲染命令相关联的脚本解析结果,由于脚本文件中包含有多个渲染命令,因此解析得到的脚本解析结果可能并不是全部都和待简化渲染命令相关联,例如某些脚本解析结果关联的是渲染命令A,而与渲染命令B不关联,那么在渲染命令B作为待简化渲染命令时,那么该脚本解析结果则不作为目标脚本解析结果,再通过待简化渲染命令来重新生成一个脚本文件,作为待简化渲染命令相对应的脚本简化文件。通过上述方式,可以在脚本简化文件中清除掉与待简化渲染命令不相关的脚本命令,并保留有用的脚本命令,从而在保证渲染准确性的同时,实现了脚本文件的简化。
上述脚本处理方法中,通过获取待处理的脚本文件,以及获取针对脚本文件的待简化渲染命令;根据待简化渲染命令在脚本文件中的位置,获取脚本文件的脚本命令简化区间;对脚本命令简化区间中包含的脚本命令进行解析处理,得到脚本命令简化区间对应的脚本解析结果;从脚本解析结果中,获取与待简化渲染命令相关联的目标脚本解析结果,利用目标脚本解析结果生成与待简化渲染命令相对应的脚本简化文件。本申请可以对脚本文件中的某一个渲染命令进行简化,从而生成该渲染命令相对应的脚本简化文件,用户在进行针对某一个渲染命令的调试时,只需要对脚本简化文件进行回放,从而可以减少回放所使用的脚本文件的规模,来实现提高脚本命令文件的回放效率。
在一个实施例中,脚本文件为渲染图像帧所对应的脚本文件,脚本文件的数量为多个,分别对应于不同的渲染图像帧,各个脚本文件包含多个脚本命令行;如图2所示,步骤S102可以进一步包括:
步骤S201,根据待简化渲染命令在多个脚本文件中的位置,确定待简化渲染命令所在的目标脚本文件,并确定目标脚本文件对应的目标脚本命令行。
其中,目标脚本文件指的是待简化渲染命令所在的脚本文件,而目标脚本命令行则指的是待简化渲染命令在目标脚本文件中的脚本命令行。本实施例中,脚本文件可以是多个,分别对应于不同的需要进行渲染的图像画面的图像帧,即渲染图像帧,同时每一个脚本文件都可以包含有多个脚本命令行。终端则可以根据待简化渲染命令的位置,来确定出目标脚本文件与目标脚本命令行。
例如,渲染图像帧可以包含图像帧1、图像帧2以及图像帧3,其中图像帧1对应脚本文件1、图像帧2对应脚本文件2,图像帧3则对应脚本文件3,如果待简化渲染命令是在脚本文件2中的第56行,那么脚本文件2则作为目标脚本文件,而56行则是目标脚本命令行。
步骤S202,获取目标脚本文件所对应的第二渲染图像帧,并将图像帧顺序位于第二渲染图像帧之前的各个渲染图像帧,作为第一渲染图像帧。
第二渲染图像帧指的是目标脚本文件所对应的渲染图像帧,而第一渲染图像帧则指的是,图像帧顺序位于第二渲染图像帧之前的图像帧。例如,在脚本文件2作为目标脚本文件的情况下,其对应的图像帧2则作为第二渲染图像帧,那么在图像帧2之前的图像帧1,则可以作为第一渲染图像帧,而如果是脚本文件3作为目标脚本文件,其对应的图像帧3则作为第二渲染图像帧,那么在图像帧3之前的图像帧1和图像帧2,则都可以作为第一渲染图像帧。
步骤S203,将第一渲染图像帧分别对应的脚本文件包含的脚本命令行,以及目标脚本文件中首个脚本命令行与目标脚本命令行之间的脚本命令行,作为脚本命令简化区间。
最后,终端还可以将第一渲染图像帧所对应的各个脚本文件包含的脚本命令行,以及目标脚本文件中,从首个脚本命令行到目标脚本命令行之间的脚本命令行,作为脚本命令简化区间。即脚本命令简化区间是从第一个脚本文件的第一条命令开始,到目标脚本命令行所对应的脚本命令结束,从而可以在解析过程中,建立起在脚本简化位置结束之前所有脚本命令的依赖关系,以找到与简化相关的脚本命令之间的依赖关系。
本实施例中,用于脚本解析的脚本命令简化区间是从第一个脚本文件的第一条命令开始,到目标脚本命令行所对应的脚本命令结束,从而可以使得在解析过程中,建立起在脚本简化位置结束之前所有脚本命令的依赖关系,以找到与简化相关的脚本命令之间的依赖关系,来保证得到的脚本简化文件的准确性。
进一步地,步骤S201可以进一步包括:在待简化渲染命令为单个渲染命令的情况下,将待简化渲染命令所在的脚本命令行作为目标脚本命令行;在待简化渲染命令为预设脚本命令区间中包含的多个渲染命令的情况下,将预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行作为目标脚本命令行。
本实施例中,待简化渲染命令可以是单个也可以是多个,如果是在单个的情况下,例如待简化渲染命令指的是处于第三个脚本文件第56行的渲染命令时,那么待简化渲染命令所在的脚本命令行,即第56行则可以作为目标脚本命令行。
而如果是在多个的情况下,例如可以是用户预先指定了某个脚本命令区间,该脚本命令区间的起始行数以及结束行数都可以是渲染命令所对应的脚本命令行,同时该脚本命令区间可以包含有多个渲染命令,那么上述多个渲染命令则可以都作为待简化渲染命令,那么终端则可以将上述多个待简化渲染命令中的最后一个待简化渲染命令所在的脚本命令行,作为目标脚本命令行。例如预设的脚本命令区间可以是处于第三个脚本文件第56行-第92行,在该区间中可以包含有多个待简化渲染命令,那么终端则可以将该区间中最后一个待简化渲染命令所在的脚本命令行,即可以是第92行作为目标脚本命令行。
本实施例中,待简化渲染命令的数量可以是单个,也可以是在某个脚本命令区间包含的多个,在单个的情况下,终端可以直接将待简化渲染命令所在的脚本命令行,作为脚本分析结束的目标脚本命令行,而在多个的情况下,则可以是预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行,作为脚本分析结束的目标脚本命令行,从而可以进一步提高脚本命令简化区间确定的准确性。
在一个实施例中,如图3所示,步骤S103可以进一步包括:
步骤S301,获取当前渲染图像帧,以及获取当前渲染图像帧对应的当前脚本文件。
当前渲染图像帧指的是多个脚本文件分别对应的渲染图像帧中的任意一个,而当前脚本文件则指的是当前渲染图像帧所对应的脚本文件,本实施例中,终端可以从多个渲染图像帧中选择出任意一个作为当前渲染图像帧,同时可以将筛选出的当前渲染图像帧所对应的脚本文件,作为当前脚本文件。
步骤S302,若当前渲染图像帧为第一渲染图像帧,则获取脚本命令简化区间对应的第一脚本解析结果,并将当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,返回执行步骤S301。
第一脚本解析结果则是脚本命令简化区间中,针对第一渲染图像帧的脚本解析结果,具体来说,如果当前渲染图像帧为第一渲染图像帧,那么就不是需要进行解析处理的最后一个图像帧,即第二渲染图像帧的情况时,终端在对当前渲染图像帧进行解析处理,得到相应的第一脚本解析结果后,则可以将当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,并再次判断新的当前渲染图像帧是否是第一渲染图像帧,如果仍然是则再次执行步骤S302。
步骤S303,若当前渲染图像帧为第二渲染图像帧,则对当前脚本文件中首个脚本命令行与目标脚本命令行之间的脚本命令行进行解析处理,得到脚本命令简化区间对应的第二脚本解析结果;
步骤S304,将第一脚本解析结果与第二脚本解析结果,作为脚本命令简化区间对应的脚本解析结果。
第二脚本解析结果则是脚本命令简化区间中,针对第二渲染图像帧的脚本解析结果,如果当前渲染图像帧为第二渲染图像帧,那么就是需要进行解析处理的最后一个图像帧,此时当前脚本文件即为目标脚本文件,那么在对目标脚本文件中首个脚本命令行与目标脚本命令行之间的脚本命令行进行解析处理,得到第二脚本解析结果后,则可以结束解析的过程,而不需要再次将对下一渲染图像帧所对应的脚本文件进行解析,因此可以将步骤S302得到的第一脚本解析结果以及步骤S303得到的第二脚本解析结果,作为最终的针对脚本命令简化区间的脚本解析结果。
例如,渲染图像帧可以包括图像帧1、图像帧2和图像帧3,其中图像帧3可以是第二渲染图像帧,那么图像帧1和图像帧2则作为第一渲染图像帧,在对脚本命令进行解析处理时,可以先将图像帧1作为当前渲染图像帧,由于图像帧1属于第一渲染图像帧,因此在完成图像帧1的解析得到第一脚本解析结果后,则可以将当前渲染图像帧的下一渲染图像帧,即图像帧2作为新的当前渲染图像帧。而由于于图像帧2也属于第一渲染图像帧,因此在完成图像帧2的解析得到第一脚本解析结果后,则可以将当前渲染图像帧的下一渲染图像帧,即图像帧3作为新的当前渲染图像帧。同时因为图像帧3为第二渲染图像帧,则可以对图像帧3中首个脚本命令行与目标脚本命令行之间的脚本命令行之间的脚本命令进行解析处理,来得到第二脚本解析结果,从而将得到的第一脚本解析结果,以及第二脚本解析结果,作为最终的针对脚本命令简化区间的脚本解析结果。
本实施例中,终端还可以判断当前渲染图像帧是否为第一渲染图像帧,来执行不同的解析处理过程,并且如果在当前渲染图像帧是第一渲染图像帧时,可以再次将当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,来实现对脚本文件的循环解析处理,从而可以进一步提高脚本解析处理的连贯性。
进一步地,如图4所示,步骤S302可以进一步包括:
步骤S401,获取第一当前脚本命令行,以及第一当前脚本命令行对应的第一当前脚本命令。
第一当前脚本命令行指的是第一渲染图像帧所对应的当前脚本文件包含的多个脚本命令行之中的任意一个,而第一当前脚本命令则指的是第一当前脚本命令行所记载的脚本命令。终端可以将当前脚本文件中任意一个脚本命令行作为第一当前脚本命令行。
步骤S402,确定第一当前脚本命令的脚本命令类型;
步骤S403,在脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对第一当前脚本命令进行解析处理;
步骤S404,在脚本命令类型表征为渲染类命令的情况下,利用用于解析渲染命令的第二解析指令,对第一当前脚本命令进行解析处理。
脚本命令类型指的是第一当前脚本命令的命令类型,一般而言,脚本文件中包含的脚本命令大致分为两类,渲染类命令以及非渲染类命令,如果第一当前脚本命令的脚本命令类型表征为非渲染类命令时,终端可以利用用于解析单个命令的第一解析指令,例如ParserOneCall指令来实现对第一当前脚本命令的解析处理,而如果第一当前脚本命令的脚本命令类型表征为渲染类命令时,终端可以利用用于解析渲染类命令的第二解析指令,例如ParserDrawCall指令来实现对第一当前脚本命令的解析处理。
步骤S405,将第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,返回执行确定步骤S401,直到第一当前脚本命令行是当前脚本文件的最后一个脚本命令行,将各个第一当前脚本命令行的解析处理结果作为第一脚本解析结果。
在完成第一当前脚本命令的解析后,则可以再次将第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,从而再次得到新的第一当前脚本命令行对应的第一当前脚本命令,来对新的第一当前脚本命令进行解析处理,直到完成当前脚本文件中所有脚本命令的解析,此时第一当前脚本命令行是当前脚本文件的最后一个脚本命令行,从而将各个第一当前脚本命令行的解析处理结果作为第一脚本解析结果。
本实施例中,终端还可以对第一当前脚本命令进行解析,如果第一当前脚本命令是非渲染类命令,则通过第一解析指令解析,而如果第一当前脚本命令是渲染类命令,则通过第二解析指令解析,直到完成所有脚本命令的解析处理,通过上述方式,可以进一步提高第一渲染图像帧所对应的脚本文件的解析准确性。
在一个实施例中,如图5所示,步骤S303可以进一步包括:
步骤S501,获取第二当前脚本命令行,以及第二当前脚本命令行对应的第二当前脚本命令。
第二当前脚本命令行指的是第二渲染图像帧所对应的当前脚本文件包含的多个脚本命令行之中的任意一个,而第二当前脚本命令则指的是第二当前脚本命令行所记载的脚本命令。终端可以将当前脚本文件中首个脚本命令行与目标脚本命令行之间的任意一个脚本命令行作为第二当前脚本命令行。
步骤S502,确定第二当前脚本命令的脚本命令类型;
步骤S503,在脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对第二当前脚本命令进行解析处理;
步骤S504,在脚本命令类型表征为渲染类命令的情况下,判断第二当前脚本命令是否为待简化渲染命令。
脚本命令类型指的是第二当前脚本命令的命令类型,与第一当前脚本命令的命令类似相同,脚本命令的命令类型可以分为渲染类命令以及非渲染类命令,如果第二当前脚本命令的脚本命令类型表征为非渲染类命令时,终端可以利用用于解析单个命令的第一解析指令,例如ParserOneCall指令来实现对第二当前脚本命令的解析处理,而如果第二当前脚本命令的脚本命令类型表征为渲染类命令时,终端还可以先判断该第二当前脚本命令是否是需要进行简化的待简化渲染命令。
步骤S504,在第二当前脚本命令不是待简化渲染命令的情况下,利用用于解析渲染命令的第二解析指令,对第二当前脚本命令进行解析处理。
而如果第二当前脚本命令的脚本命令类型表征为渲染类命令时,终端可以利用用于解析渲染类命令的第二解析指令,例如ParserDrawCall指令来实现对第二当前脚本命令的解析处理。
步骤S505,将第二当前脚本命令行的下一脚本命令行作为新的第二当前脚本命令行,返回执行步骤S501,直到第二当前脚本命令行是目标脚本命令行,将各个第二当前脚本命令行的解析处理结果作为第二脚本解析结果。
在完成第二当前脚本命令的解析后,则可以再次将第二当前脚本命令行的下一脚本命令行作为新的第二当前脚本命令行,从而再次得到新的第二当前脚本命令行对应的第二当前脚本命令,来对新的第二当前脚本命令进行解析处理,直到新的第二当前脚本命令行为当前脚本文件中的目标脚本命令行,此时第二当前脚本命令行是脚本命令简化区间中的最后一个脚本命令行,从而将各个第二当前脚本命令行的解析处理结果作为第二脚本解析结果。
本实施例中,终端还可以对第二当前脚本命令进行解析,如果第二当前脚本命令是非渲染类命令,则通过第一解析指令解析,而如果第二当前脚本命令是渲染类命令,则先判断是否是待渲染脚本命令,如果不是则通过第二解析指令解析,直到完成首个脚本命令行与目标脚本命令行之间的脚本命令行的解析处理,通过上述方式,可以进一步提高第二渲染图像帧所对应的脚本文件的解析准确性。
在一个实施例中,步骤S504之后,还可以包括:在第二当前脚本命令是待简化渲染命令的情况下,记录第二当前脚本命令;步骤S104可以进一步包括:从脚本解析结果中,获取与第二当前脚本命令相关联的目标脚本解析结果;利用目标脚本解析结果,以及第二当前脚本命令,生成与第二当前脚本命令对应的脚本简化文件。
另外,如果第二当前脚本命令就是待简化渲染命令,由于其必然需要记录在脚本简化文件中,为了减少脚本解析的数量,可以直接将第二当前脚本命令进行记录,同时执行获取目标脚本解析结果的过程,即从已经解析得到的脚本解析结果中,获取第二当前脚本命令关联的目标脚本解析结果,同时还可以利用第二当前脚本命令关联的目标脚本解析结果,以及第二当前脚本命令,来生成与第二当前脚本命令对应的脚本简化文件。
本实施例中,如果第二当前脚本命令为待简化渲染命令,则可以不对第二当前脚本命令进行解析处理,而直接将第二当前脚本命令进行记录,在生成脚本简化文件时,则可以利用目标脚本解析结果以及记录的第二当前脚本命令,来生成第二当前脚本命令对应的脚本简化文件,从而可以避免对第二当前脚本命令进行解析处理,进一步提高脚本文件简化的效率。
在一个实施例中,步骤S101可以进一步包括:展示渲染命令录入界面;获取在渲染命令录入界面中输入的图像帧标识,以及在渲染命令录入界面中输入的命令行标识;将脚本文件包含的脚本命令行中,与图像帧标识以及命令行标识相匹配的脚本命令行所对应的脚本命令,作为待简化渲染命令。
其中,渲染命令录入界面是用于用户录入待简化渲染命令的界面,用户可以通过在渲染命令录入界面中输入待简化渲染命令所在脚本文件对应的图像帧的图像帧编号,作为图像帧标识,以及待简化渲染命令在脚本文件中所在命令行的行号,作为命令行标识,从而终端则可以得到用户录入的图像帧标识以及命令行标识,并且从脚本文件包含的脚本命令行中,将与上述图像帧标识以及命令行标识相匹配的脚本命令行,所对应的脚本命令,作为待简化渲染命令。
例如,渲染命令录入界面可如图6所示,图6所示的渲染命令录入界面中包括用于录入图像帧编号的输入框1,以及用于录入命令行行号的输入框2,用户可以分别在渲染命令录入界面的输入框1中录入图像帧编号,以及在输入框2中录入脚本命令行的行号,可以是在输入框1中录入3,而在输入框2中录入56,那么则表示待简化渲染命令为图像帧3所对应的脚本文件3中第56行脚本命令行对应的脚本命令。
本实施例中,还可以通过提供渲染命令录入界面,由用户在渲染命令录入界面录入图像帧标识以及命令行标识,来实现待简化渲染命令的确定,从而可以使得用户可以直观方便的确定待简化渲染命令,进一步提高待简化渲染命令确定的效率。
在一个实施例中,脚本文件为OpenGL脚本文件;步骤S101可以进一步包括:通过OpenGL脚本捕捉器获取所述脚本文件;步骤S104之后,还可以包括:将脚本简化文件输入至OpenGL脚本运行器,通过OpenGL脚本运行器对脚本简化文件进行回放处理。
本实施例中,采集的脚本文件可以是OpenGL脚本文件,即OpenGL应用程序所使用的脚本文件,该脚本文件可以通过OpenGL脚本捕捉器,即OGLLogger记录得到,OGLLogger通过在OpenGL应用程序运行过程中实时拦截和记录应用程序当前的行为,并将其翻译为自定义格式的脚本文件进行存储。同时在得到脚本简化文件后,终端还可以将脚本简化文件输入至OpenGL脚本运行器,即OGLPlayer,通过OGLPlayer可以实现对简化后的脚本文件,即脚本简化文件进行回放处理,来判断脚本是否正确。
本实施例中,可以通过OpenGL脚本捕捉器,来获取OpenGL的脚本文件,同时还可以利用OpenGL脚本运行器,来运行脚本简化文件,实现脚本简化文件的回放处理,从而可以提高脚本文件准确性判断的效率。
在一个应用实例中,还提供了一种基于OpenGL的脚本简化方法,可以在保证渲染结果正确性的前提下,最大可能地祛除脚本文件中冗余的命令,从而精简脚本文件规模,提高脚本的回放速度和分析效率。如图7所示,OpenGL的脚本简化系统流程可包括以下步骤:
(1)OGLLogger通过在OpenGL应用程序运行过程中实时拦截和记录应用程序当前的行为,并将其翻译为自定义格式的脚本文件进行存储。
(2)通过OGLPlayer运行原始脚本去得到窗口表面信息。脚本简化器将会根据窗口表面信息打开窗口表面的深度和模板并赋值,如果在简化脚本前没有获取窗口表面信息,可能会引起简化脚本的错误。
(3)脚本简化器中执行一系列简化操作,生成简化后的脚本文件。
(4)进入判断阶段,判断是否需要存储资源?在简化器执行过程中,如果有些简化后的脚本用到的某些资源在原始脚本的简化位置之前有被写(渲染)过,那么会在原始脚本文件夹里生成一个存储资源信息的离线文件。如果存在存储资源文件,就进入(5)进行资源存储,否则直接进入到(6)回放简化后脚本。
(5)使用OGLPlayer运行原始脚本并通过存储资源文件的内容来记录这些资源在原始脚本中的数据信息,以便用于之后的编辑和回放。
(6)最后,通过OGLPlayer对简化后脚本进行回放,以及判断此脚本的正确性。
其中,脚本简化器是用于对脚本的简化,首先是脚本简化输入,然后是具体的简化过程。对于脚本简化输入,简化器支持多种方式的输入模式。脚本的命令之间存在着相互依赖的关系,因此,对于简化脚本来说,不单单只是保留需要简化范围内的脚本命令,这样是不能保证简化后的脚本命令的合法性以及渲染结果的正确性。为此在简化过程中我们需要保持脚本命令之间的依赖关系,即不能丢掉任何一条有用的脚本命令,但同时,也需要有效的清除掉冗余以及不相关的脚本命令。
因此,脚本简化可以分成三个步骤来完成:一是脚本简化输入;二是脚本命令解析,即从第一个脚本文件的开始到需要简化的最后位置的每一条命令进行解析,其目的是为了确立与简化相关的脚本命令之间的依赖关系;三是记录简化命令以及资源加载,依据第二步中确立的依赖关系和定义的简化规则确定要保留的脚本命令,以及如果用到的资源在需要简化的位置前被渲染过就需要对该资源进行加载操作,这样来完成脚本文件的简化,如图8所示。
1、脚本简化输入:
脚本简化器常用的输入方式有用户界面以及命令行。用户界面即用户接口对话框,它的优点是直观方便,缺点是每次只能执行一个简化操作。
对于有大批量简化处理的要求,使用用户界面并不友好,此时可以使用命令行的操作方式来完成批量的脚本简化操作。
2、脚本命令解析:
脚本命令解析范围是从第一个脚本文件的第一条命令开始,一直到指定脚本简化的位置或简化区间的最后位置结束,这种解析属于正向解析,其目的就是为了通过对脚本命令的解析,建立起在脚本简化位置结束之前所有脚本命令的依赖关系,从而找到与简化相关的脚本命令之间的依赖关系。可以通过脚本命令解析可以建立这些相关命令的依赖关系,确保不会在脚本的简化过程中丢掉这些相关的命令。
简化器对脚本命令的解析主要通过第一脚本解析,第二脚本解析和第三脚本解析这三个方法来实现。如图9所示。
其中,第一脚本解析是用来处理从脚本初始帧到简化位置的所在的帧的前一帧里的命令,具体过程如图10a所示。例如,现在需要简化一个脚本文件第37帧的第8个Draw,那么第一脚本解析要处理的范围就是第1帧到第36帧。第二脚本解析和第三脚本解析都是用来处理需要简化位置所在的当前帧的命令,如上述例子中的第37帧。第二脚本解析是针对单个Draw的简化,具体流程如图10b所示,而第三脚本解析则是针对连续Draw区间的简化,具体流程如图10c所示。
在脚本命令解析中,从脚本命令简化的角度出发,可以将脚本命令分为两大类:Draw类和非Draw类。可以通过IsDrawCall来确定是否是渲染类命令,非Draw类命令将会由流程中的解析单个命令(ParserOneCall)来处理。而Draw类命令的处理将会分两种情况来处理,第一种情况,该Draw不是所要简化的Draw或者不是简化区间里的Draw,将会由流程中的解析Draw命令(ParserDrawCall)来处理;第二种情况,该Draw是所要简化的Draw或者简化区间里的Draw,那此时就进入到简化的最后阶段,即开始记录简化的命令以及资源加载(UploadDrawData)。
在命令的解析过程中有一类重要命令,就是渲染命令,它指的是和渲染操作直接相关的脚本命令,包括Draw命令和Clear命令。从某种意义上讲,渲染命令也是一种隐式的资源更新命令。更新的资源是在RT(渲染目标Render Target)上或者FBO(帧缓存对象FrameBuffer Object)上所使用的资源。所以在遇见渲染命令时,都会将涉及到的资源更新的数据记录下来(资源存储),以免在后续简化用到这些资源时漏掉了更新的数据,就会引起简化结果的错误。
3、记录简化的命令以及资源加载
脚本记录简化的命令以及资源加载的前提和基础是脚本命令解析,它们的核心任务是根据脚本命令解析的结果最终确定哪些命令需要保留,哪些资源需要加载,最终完成脚本文件的简化,如图11所示。从记录基础命令(显示适配器display,窗口window,设备上下文context等的选取)到记录当前各种状态(开关Enable/Disable,状态信息等),再到记录各类资源(纹理Texture,缓存Buffer,FBO等)以及资源加载,最后到Draw命令以及比较结果。
得益于之前对命令的解析,由此建立了命令的依赖关系,并确定了与简化相关的命令,最后由UploadDrawData来提取相关的命令,以此来完成简化命令保留的操作。
其中资源加载是依靠命令解析时生成的离线文件insert.txt来对其加载的。在脚本命令解析的时候如果简化有用到的资源已经被渲染,会在记录该资源的时候将加载资源的操作信息写入简化的脚本中,同时也会在原始脚本文件夹里生成存储资源文件,基于该存储资源文件使用OGLPlayer运行原始脚本就能获取到所正确的资源数据。
上述应用实例,通过脚本简化,可以根据用户需求并在保证渲染结果正确的前提下,除去脚本中冗余的脚本命令,从而精简脚本命令的规模,为脚本命令的分析和调试过程减少了复杂程度且提高了效率。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的脚本处理方法的脚本处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个脚本处理装置实施例中的具体限定可以参见上文中对于脚本处理方法的限定,在此不再赘述。
在一个实施例中,如图12所示,提供了一种脚本处理装置,包括:脚本文件获取模块1201、简化区间获取模块1202、解析结果获取模块1203和简化脚本获取模块1204,其中:
脚本文件获取模块1201,用于获取待处理的脚本文件,以及获取针对脚本文件的待简化渲染命令;
简化区间获取模块1202,用于根据待简化渲染命令在脚本文件中的位置,获取脚本文件的脚本命令简化区间;
解析结果获取模块1203,用于通过脚本解析器,对脚本命令简化区间中包含的脚本命令进行解析处理,得到脚本命令简化区间对应的脚本解析结果;
简化脚本获取模块1204,用于从脚本解析结果中,获取与待简化渲染命令相关联的目标脚本解析结果,利用目标脚本解析结果生成与待简化渲染命令相对应的脚本简化文件。
在一个实施例中,脚本文件为渲染图像帧所对应的脚本文件,脚本文件的数量为多个,分别对应于不同的渲染图像帧,各个脚本文件包含多个脚本命令行;简化区间获取模块1202,进一步用于根据待简化渲染命令在多个脚本文件中的位置,确定待简化渲染命令所在的目标脚本文件,并确定目标脚本文件对应的目标脚本命令行;获取目标脚本文件所对应的第二渲染图像帧,并将图像帧顺序位于第二渲染图像帧之前的各个渲染图像帧,作为第一渲染图像帧;将第一渲染图像帧分别对应的脚本文件包含的脚本命令行,以及目标脚本文件中首个脚本命令行与目标脚本命令行之间的脚本命令行,作为脚本命令简化区间。
在一个实施例中,简化区间获取模块1202,进一步用于在待简化渲染命令为单个渲染命令的情况下,将待简化渲染命令所在的脚本命令行作为目标脚本命令行;在待简化渲染命令为预设脚本命令区间中包含的多个渲染命令的情况下,将预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行作为目标脚本命令行。
在一个实施例中,解析结果获取模块1203,进一步用于获取当前渲染图像帧,以及获取当前渲染图像帧对应的当前脚本文件;若当前渲染图像帧为第一渲染图像帧,则对当前脚本文件进行解析处理,得到脚本命令简化区间对应的第一脚本解析结果,并将当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,返回执行获取当前渲染图像帧对应的当前脚本文件的步骤;若当前渲染图像帧为第二渲染图像帧,则对当前脚本文件中首个脚本命令行与目标脚本命令行之间的脚本命令行进行解析处理,得到脚本命令简化区间对应的第二脚本解析结果;将第一脚本解析结果与第二脚本解析结果,作为脚本命令简化区间对应的脚本解析结果。
在一个实施例中,解析结果获取模块1203,进一步用于获取第一当前脚本命令行,以及第一当前脚本命令行对应的第一当前脚本命令;确定第一当前脚本命令的脚本命令类型;在脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对第一当前脚本命令进行解析处理;在脚本命令类型表征为渲染类命令的情况下,利用用于解析渲染命令的第二解析指令,对第一当前脚本命令进行解析处理;将第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,返回执行获取第一当前脚本命令行,以及第一当前脚本命令行对应的第一当前脚本命令的步骤,直到第一当前脚本命令行是当前脚本文件的最后一个脚本命令行,将各个第一当前脚本命令行的解析处理结果作为第一脚本解析结果。
在一个实施例中,解析结果获取模块1203,进一步用于获取第二当前脚本命令行,以及第二当前脚本命令行对应的第二当前脚本命令;确定第二当前脚本命令的脚本命令类型;在脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对第二当前脚本命令进行解析处理;在脚本命令类型表征为渲染类命令的情况下,判断第二当前脚本命令是否为待简化渲染命令;在第二当前脚本命令不是待简化渲染命令的情况下,利用用于解析渲染命令的第二解析指令,对第二当前脚本命令进行解析处理;将第二当前脚本命令行的下一脚本命令行作为新的第二当前脚本命令行,返回执行获取第二当前脚本命令行,以及第二当前脚本命令行对应的第二当前脚本命令的步骤,直到第二当前脚本命令行是目标脚本命令行,将各个第二当前脚本命令行的解析处理结果作为第二脚本解析结果。
在一个实施例中,解析结果获取模块1203,还用于在第二当前脚本命令是待简化渲染命令的情况下,记录第二当前脚本命令;简化脚本获取模块1204,进一步用于从脚本解析结果中,获取与第二当前脚本命令相关联的目标脚本解析结果;利用目标脚本解析结果,以及第二当前脚本命令,生成与第二当前脚本命令对应的脚本简化文件。
在一个实施例中,脚本文件获取模块1201,进一步用于展示渲染命令录入界面;获取在渲染命令录入界面中输入的图像帧标识,以及在渲染命令录入界面中输入的命令行标识;将脚本文件包含的脚本命令行中,与图像帧标识以及命令行标识相匹配的脚本命令行所对应的脚本命令,作为待简化渲染命令。
在一个实施例中,脚本文件为OpenGL脚本文件;脚本文件获取模块1201,进一步用于通过OpenGL脚本捕捉器获取脚本文件;脚本处理装置,还包括:简化脚本回放模块,用于将脚本简化文件输入至OpenGL脚本运行器,通过OpenGL脚本运行器对脚本简化文件进行回放处理。
上述脚本处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种脚本处理方法,其特征在于,所述方法包括:
获取待处理的脚本文件,以及获取针对所述脚本文件的待简化渲染命令;所述脚本文件为渲染图像帧所对应的脚本文件,所述脚本文件的数量为多个,分别对应于不同的渲染图像帧,各个脚本文件包含多个脚本命令行;
根据所述待简化渲染命令在所述脚本文件中的位置,获取所述脚本文件的脚本命令简化区间;包括:根据所述待简化渲染命令在多个脚本文件中的位置,确定所述待简化渲染命令所在的目标脚本文件,并确定所述目标脚本文件对应的目标脚本命令行;获取所述目标脚本文件所对应的第二渲染图像帧,并将图像帧顺序位于所述第二渲染图像帧之前的各个渲染图像帧,作为第一渲染图像帧;将所述第一渲染图像帧分别对应的脚本文件包含的脚本命令行,以及所述目标脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行,作为所述脚本命令简化区间;
对所述脚本命令简化区间中包含的脚本命令进行解析处理,得到所述脚本命令简化区间对应的脚本解析结果;包括:获取当前渲染图像帧,以及获取所述当前渲染图像帧对应的当前脚本文件;若所述当前渲染图像帧为所述第一渲染图像帧,则对所述当前脚本文件进行解析处理,得到所述脚本命令简化区间对应的第一脚本解析结果,并将所述当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,返回执行获取所述当前渲染图像帧对应的当前脚本文件的步骤;若所述当前渲染图像帧为所述第二渲染图像帧,则对所述当前脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行进行解析处理,得到所述脚本命令简化区间对应的第二脚本解析结果;将所述第一脚本解析结果与所述第二脚本解析结果,作为所述脚本命令简化区间对应的脚本解析结果;
从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件;所述脚本简化文件用于进行回放处理。
2.根据权利要求1所述的方法,其特征在于,所述确定所述目标脚本文件对应的目标脚本命令行,包括:
在所述待简化渲染命令为单个渲染命令的情况下,将所述待简化渲染命令所在的脚本命令行作为所述目标脚本命令行;
在所述待简化渲染命令为预设脚本命令区间中包含的多个渲染命令的情况下,将所述预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行作为所述目标脚本命令行。
3.根据权利要求1所述的方法,其特征在于,所述对所述当前脚本文件进行解析处理,得到所述脚本命令简化区间对应的第一脚本解析结果,包括:
获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令;
确定所述第一当前脚本命令的脚本命令类型;
在所述脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对所述第一当前脚本命令进行解析处理;
在所述脚本命令类型表征为渲染类命令的情况下,利用用于解析渲染命令的第二解析指令,对所述第一当前脚本命令进行解析处理;
将所述第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,返回执行获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令的步骤,直到所述第一当前脚本命令行是所述当前脚本文件的最后一个脚本命令行,将各个第一当前脚本命令行的解析处理结果作为所述第一脚本解析结果。
4.根据权利要求1所述的方法,其特征在于,所述对所述当前脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行进行解析处理,得到所述脚本命令简化区间对应的第二脚本解析结果,包括:
获取第二当前脚本命令行,以及所述第二当前脚本命令行对应的第二当前脚本命令;
确定所述第二当前脚本命令的脚本命令类型;
在所述脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对所述第二当前脚本命令进行解析处理;
在所述脚本命令类型表征为渲染类命令的情况下,判断所述第二当前脚本命令是否为所述待简化渲染命令;
在所述第二当前脚本命令不是所述待简化渲染命令的情况下,利用用于解析渲染命令的第二解析指令,对所述第二当前脚本命令进行解析处理;
将所述第二当前脚本命令行的下一脚本命令行作为新的第二当前脚本命令行,返回执行获取第二当前脚本命令行,以及所述第二当前脚本命令行对应的第二当前脚本命令的步骤,直到所述第二当前脚本命令行是所述目标脚本命令行,将各个第二当前脚本命令行的解析处理结果作为所述第二脚本解析结果。
5.根据权利要求4所述的方法,其特征在于,所述判断所述第二当前脚本命令是否为所述待简化渲染命令之后,包括:
在所述第二当前脚本命令是所述待简化渲染命令的情况下,记录所述第二当前脚本命令;
所述从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件,包括:
从所述脚本解析结果中,获取与所述第二当前脚本命令相关联的目标脚本解析结果;
利用所述目标脚本解析结果,以及所述第二当前脚本命令,生成与所述第二当前脚本命令对应的脚本简化文件。
6.根据权利要求1所述的方法,其特征在于,所述获取针对所述脚本文件的待简化渲染命令,包括:
展示渲染命令录入界面;
获取在渲染命令录入界面中输入的图像帧标识,以及在渲染命令录入界面中输入的命令行标识;
将所述脚本文件包含的脚本命令行中,与所述图像帧标识以及命令行标识相匹配的脚本命令行所对应的脚本命令,作为所述待简化渲染命令。
7.根据权利要求1所述的方法,其特征在于,所述脚本文件为OpenGL脚本文件;
所述获取待处理的脚本文件,包括:
通过OpenGL脚本捕捉器获取所述脚本文件;
所述利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件之后,还包括:
将所述脚本简化文件输入至OpenGL脚本运行器,通过所述OpenGL脚本运行器对所述脚本简化文件进行回放处理。
8.一种脚本处理装置,其特征在于,所述装置包括:
脚本文件获取模块,用于获取待处理的脚本文件,以及获取针对所述脚本文件的待简化渲染命令;所述脚本文件为渲染图像帧所对应的脚本文件,所述脚本文件的数量为多个,分别对应于不同的渲染图像帧,各个脚本文件包含多个脚本命令行;
简化区间获取模块,用于根据所述待简化渲染命令在所述脚本文件中的位置,获取所述脚本文件的脚本命令简化区间;进一步用于根据所述待简化渲染命令在多个脚本文件中的位置,确定所述待简化渲染命令所在的目标脚本文件,并确定所述目标脚本文件对应的目标脚本命令行;获取所述目标脚本文件所对应的第二渲染图像帧,并将图像帧顺序位于所述第二渲染图像帧之前的各个渲染图像帧,作为第一渲染图像帧;将所述第一渲染图像帧分别对应的脚本文件包含的脚本命令行,以及所述目标脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行,作为所述脚本命令简化区间;
解析结果获取模块,用于通过脚本解析器,对所述脚本命令简化区间中包含的脚本命令进行解析处理,得到所述脚本命令简化区间对应的脚本解析结果;进一步用于获取当前渲染图像帧,以及获取所述当前渲染图像帧对应的当前脚本文件;若所述当前渲染图像帧为所述第一渲染图像帧,则对所述当前脚本文件进行解析处理,得到所述脚本命令简化区间对应的第一脚本解析结果,并将所述当前渲染图像帧的下一渲染图像帧作为新的当前渲染图像帧,返回执行获取所述当前渲染图像帧对应的当前脚本文件的步骤;若所述当前渲染图像帧为所述第二渲染图像帧,则对所述当前脚本文件中首个脚本命令行与所述目标脚本命令行之间的脚本命令行进行解析处理,得到所述脚本命令简化区间对应的第二脚本解析结果;将所述第一脚本解析结果与所述第二脚本解析结果,作为所述脚本命令简化区间对应的脚本解析结果;
简化脚本获取模块,用于从所述脚本解析结果中,获取与所述待简化渲染命令相关联的目标脚本解析结果,利用所述目标脚本解析结果生成与所述待简化渲染命令相对应的脚本简化文件;所述脚本简化文件用于进行回放处理。
9.根据权利要求8所述的装置,其特征在于,简化区间获取模块,进一步用于在所述待简化渲染命令为单个渲染命令的情况下,将所述待简化渲染命令所在的脚本命令行作为所述目标脚本命令行;在所述待简化渲染命令为预设脚本命令区间中包含的多个渲染命令的情况下,将所述预设脚本命令区间中的最后一个待简化渲染命令所在的脚本命令行作为所述目标脚本命令行。
10.根据权利要求8所述的装置,其特征在于,解析结果获取模块,进一步用于获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令;确定所述第一当前脚本命令的脚本命令类型;在所述脚本命令类型表征为非渲染类命令的情况下,利用用于解析单个命令的第一解析指令,对所述第一当前脚本命令进行解析处理;在所述脚本命令类型表征为渲染类命令的情况下,利用用于解析渲染命令的第二解析指令,对所述第一当前脚本命令进行解析处理;将所述第一当前脚本命令行的下一脚本命令行作为新的第一当前脚本命令行,返回执行获取第一当前脚本命令行,以及所述第一当前脚本命令行对应的第一当前脚本命令的步骤,直到所述第一当前脚本命令行是所述当前脚本文件的最后一个脚本命令行,将各个第一当前脚本命令行的解析处理结果作为所述第一脚本解析结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211433692.XA CN115729557B (zh) | 2022-11-16 | 2022-11-16 | 脚本处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211433692.XA CN115729557B (zh) | 2022-11-16 | 2022-11-16 | 脚本处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115729557A CN115729557A (zh) | 2023-03-03 |
CN115729557B true CN115729557B (zh) | 2024-01-26 |
Family
ID=85295970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211433692.XA Active CN115729557B (zh) | 2022-11-16 | 2022-11-16 | 脚本处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729557B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101038663A (zh) * | 2007-05-10 | 2007-09-19 | 威盛电子股份有限公司 | 简化绘图系统的脚本文件的方法及其系统 |
CN101316201A (zh) * | 2008-07-18 | 2008-12-03 | 中国工商银行股份有限公司 | 多终端模式的脚本装置及数据处理方法和自动化测试系统 |
CN106155895A (zh) * | 2015-04-14 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 脚本数据处理方法及装置 |
CN106990976A (zh) * | 2016-01-21 | 2017-07-28 | 阿里巴巴集团控股有限公司 | 一种网页脚本加载方法和装置 |
CN110007906A (zh) * | 2018-12-27 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 脚本文件的处理方法、装置和服务器 |
CN113761428A (zh) * | 2020-06-05 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 页面渲染方法、装置、系统、存储介质及电子设备 |
CN113963091A (zh) * | 2021-10-25 | 2022-01-21 | 深圳传音控股股份有限公司 | 图像处理方法、移动终端及存储介质 |
WO2022100685A1 (zh) * | 2020-11-13 | 2022-05-19 | 华为技术有限公司 | 一种绘制命令处理方法及其相关设备 |
-
2022
- 2022-11-16 CN CN202211433692.XA patent/CN115729557B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101038663A (zh) * | 2007-05-10 | 2007-09-19 | 威盛电子股份有限公司 | 简化绘图系统的脚本文件的方法及其系统 |
CN101316201A (zh) * | 2008-07-18 | 2008-12-03 | 中国工商银行股份有限公司 | 多终端模式的脚本装置及数据处理方法和自动化测试系统 |
CN106155895A (zh) * | 2015-04-14 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 脚本数据处理方法及装置 |
CN106990976A (zh) * | 2016-01-21 | 2017-07-28 | 阿里巴巴集团控股有限公司 | 一种网页脚本加载方法和装置 |
CN110007906A (zh) * | 2018-12-27 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 脚本文件的处理方法、装置和服务器 |
CN113761428A (zh) * | 2020-06-05 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 页面渲染方法、装置、系统、存储介质及电子设备 |
WO2022100685A1 (zh) * | 2020-11-13 | 2022-05-19 | 华为技术有限公司 | 一种绘制命令处理方法及其相关设备 |
CN113963091A (zh) * | 2021-10-25 | 2022-01-21 | 深圳传音控股股份有限公司 | 图像处理方法、移动终端及存储介质 |
Non-Patent Citations (1)
Title |
---|
基于XML的GUI录制—回放技术研究与实现;胡圣厦;《中国优秀博硕士学位论文全文数据库(硕士)工程科技Ⅱ辑》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115729557A (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8443340B2 (en) | Execution capture and replay based debugging | |
US10268568B2 (en) | System and method for data element tracing | |
CN109471851B (zh) | 数据处理方法、装置、服务器和存储介质 | |
US20130055205A1 (en) | Filtering source code analysis results | |
CN110990411B (zh) | 数据结构的生成方法及装置、调用方法及装置 | |
US10169218B2 (en) | Method for automatically validating data against a predefined data specification | |
CN111290951A (zh) | 测试方法、终端、服务器、系统及存储介质 | |
CN112905441A (zh) | 测试用例生成方法、测试方法、装置及设备 | |
CN111177007B (zh) | 一种基于测试数据自动生成bdd测试案例的方法及系统 | |
CN114610286A (zh) | 开发文档的生成方法、装置、计算机设备及存储介质 | |
CN114897296A (zh) | Rpa流程标注方法、执行过程回放方法及存储介质 | |
CN112860264B (zh) | 一种抽象语法树重构方法及装置 | |
CN113518187B (zh) | 视频编辑方法及设备 | |
CN115729557B (zh) | 脚本处理方法和装置 | |
US20140282426A1 (en) | Divide and conquer approach to scenario timeline activity attribution | |
CN107015955B (zh) | 文档编辑方法和装置 | |
CN113591147A (zh) | 一种数据抽取的方法、装置、计算机设备及存储介质 | |
CN113672509A (zh) | 自动化测试方法、装置、测试平台及存储介质 | |
CN112380139A (zh) | 测试用例过程文档的记录方法及系统、设备及存储介质 | |
US11294788B2 (en) | Predicting performance of a computer system | |
CN113094265B (zh) | 测试脚本的分析方法及分析装置、电子设备 | |
CN111414330B (zh) | 数据编辑方法及系统、数据处理设备、存储介质 | |
US20090276603A1 (en) | Techniques for efficient dataloads into partitioned tables | |
CN112925564B (zh) | 一种源代码的冗余导入类清理方法及装置 | |
CN114356289A (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 |