CN108763052A - 一种虚拟现实软件内存回收机制的性能检测方法及系统 - Google Patents

一种虚拟现实软件内存回收机制的性能检测方法及系统 Download PDF

Info

Publication number
CN108763052A
CN108763052A CN201810319921.2A CN201810319921A CN108763052A CN 108763052 A CN108763052 A CN 108763052A CN 201810319921 A CN201810319921 A CN 201810319921A CN 108763052 A CN108763052 A CN 108763052A
Authority
CN
China
Prior art keywords
memory
test
client
socket
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810319921.2A
Other languages
English (en)
Other versions
CN108763052B (zh
Inventor
刘德建
黄彬
钟开华
林志宏
陈萍
俞发仁
曾捷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian TQ Digital Co Ltd
Original Assignee
Fujian TQ Digital Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujian TQ Digital Co Ltd filed Critical Fujian TQ Digital Co Ltd
Priority to CN201810319921.2A priority Critical patent/CN108763052B/zh
Publication of CN108763052A publication Critical patent/CN108763052A/zh
Application granted granted Critical
Publication of CN108763052B publication Critical patent/CN108763052B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种虚拟现实软件内存回收机制的性能检测方法及系统,创建服务端Socket,通过服务端Socket接收客户端的测试请求,调用测试程序,对虚拟现实软件的内存回收机制进行测试,获得测试结果,并将测试结果发送至客户端;所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;客户端解析所述测试结果,并生成测试报告,不需依赖源代码,提升了测试的覆盖面,更加准确,便捷的反应出虚拟现实软件在内存回收方面的性能,减少测试人员在手工编写测试报告的人力投入。

Description

一种虚拟现实软件内存回收机制的性能检测方法及系统
技术领域
本发明涉及性能测试领域,尤其涉及一种虚拟现实软件内存回收机制的性能检测方法及系统。
背景技术
随着虚拟现实技术的发展,越来越多的虚拟现实软件出现在人们的生活中。作为虚拟现实软件,沉浸感一直是用户体验的核心。目前,制约用户感官体验的最大因素就是晕动症,而造成晕动症的最直接原因就是虚拟现实软件的卡顿现象。造成卡顿现象的因素很多,其中就包含内存回收机制的不合理调用。
在基于Unity3D引擎的软件开发过程中,开发人员用于降低软件中内存回收机制影响的方法主要分为三种,第一种是降低内存回收的调用次数;第二种是减少单次调用内存回收机制时的运行时间,即提高内存回收的运行效率;第三种是将内存回收的运行时间延迟,避免在关键时候触发,例如,在软件场景加载过程中运行内存回收就是比较合理的优化方式,能够有效避免在调用内存回收时产生卡顿现象,从而影响用户的感官体验。
基于以上三种降低内存回收机制影响的优化方案,开发人员可以采用以下策略,分别是:
(1)对虚拟现实软件的项目源代码进行重构,减少堆内存的分配和引用的分配。更少的变量和引用会减少内存回收过程中需要检查的对象的个数,从而提高内存回收的运行效率。
(2)降低虚拟现实软件中对于堆内存的分配和回收的频率。
(3)测量内存回收和内存扩展的时间,使其按照可预测的顺序执行。
但是,上述技术存在以下三个缺点:
(1):上述技术仅仅是从开发人员的维度出发,对基于Unity3D引擎开发的虚拟现实软件的内存回收造成的影响进行优化的方案。对于软件测试人员来说,如果没有直观的测试数据进行支撑,是难以通过这些优化方案对软件优化后的结果进行分析验证的,例如开发人员通过内存回收优化方案优化了虚拟现实软件中内存回收机制的调用次数,但是软件测试人员在测试过程中依然发现了软件存在卡顿现象,这时候是很难去确定造成卡顿的原因是由于开发人员对于内存回收机制的影响优化没有达到预期的效果,还是存在其他能够造成软件卡顿的因素。
(2):针对上述技术,测试人员如果需要对开发人员对于项目源代码的优化结果进行验收,就需要具备较高的代码阅读能力,这对于普通黑盒测试人员来说是难以具备的,同时,这样的测试方式对于项目的源代码同样具有较高的依赖性,对于大多数的企业来说,一般情况下是不会对测试人员提供项目的源代码,这样就会造成测试上的盲区。
(3):上述技术针对检测结果没有进行一个合理的分析处理,测试人员需要手动将测试的数据和分析结果编写成可供展示的测试分析报告。并且,测试人员如果希望测试分析报告更加易于阅读就需要加入大量的图表进行展示,这样无疑是极其浪费人力资源的。
发明内容
本发明所要解决的技术问题是:提供一种便捷,准确的虚拟现实软件内存回收机制的性能检测方法及终端。
为了解决上述技术问题,本发明采用的技术方案为:
一种虚拟现实软件内存回收机制的性能检测方法,包括步骤:
S1、服务端创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、服务端通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、服务端根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,将所述测试结果保存在json数组对象内,并将所述json数组对象发送至所述客户端;所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种虚拟现实软件内存回收机制的性能检测系统,包括服务端和客户端,所述服务端包括第一存储器、第一处理器及存储在第一存储器上并可在第一处理器上运行的第一计算机程序,所述客户端包括第二存储器、第二处理器及存储在第二存储器上并可在第二处理器上运行的第二计算机程序,
所述第一处理器执行所述第一计算机程序时实现以下步骤:
S1、创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、将所述测试结果保存在创建的json数组对象内,并将所述json数组对象发送至所述客户端,以使得所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告;
所述第二处理器执行所述第二计算机程序时实现以下步骤:
S5、解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
本发明的有益效果在于:通过测试程序对虚拟现实软件的堆内存进行测试,将累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时保存在所述json数组对象内反馈给客户端,通过Socket通信的方式,实现了测试程序与虚拟现实软件的数据交互,不需要依赖源代码,降低了对于测试人员的技能要求,提升了测试的覆盖面,通过计算出对虚拟现实软件中的堆内存回收操作的频率和耗时,可以更加准确,便捷的反应出虚拟现实软件在内存回收方面的性能,通过客户端解析json数组对象,自动生成测试报告,减少测试人员在手工编写测试报告的人力投入,降低测试的人力成本和时间成本。
附图说明
图1为本发明实施例的一种虚拟现实软件内存回收机制的性能检测方法的流程图;
图2为本发明实施例的一种虚拟现实软件内存回收机制的性能检测系统的流程图
标号说明:
1、服务端;2、第一存储器;3、第一处理器;4、客户端5、第二存储器;6、第二处理器;7、虚拟现实软件内存回收机制的性能检测系统。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过测试程序对虚拟现实软件的堆内存进行测试,将累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时保存在所述json数组对象内反馈给客户端。
请参照图1,一种虚拟现实软件内存回收机制的性能检测方法,包括步骤:
S1、服务端创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、服务端通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、服务端根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,将所述测试结果保存在json数组对象内,并将所述json数组对象发送至所述客户端;所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
从上述描述可知,本发明的有益效果在于:通过测试程序对虚拟现实软件的堆内存进行测试,将累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时保存在所述json数组对象内反馈给客户端,通过Socket通信的方式,实现了测试程序与虚拟现实软件的数据交互,不需要依赖源代码,降低了对于测试人员的技能要求,提升了测试的覆盖面,通过计算出对虚拟现实软件中的堆内存回收操作的频率和耗时,可以更加准确,便捷的反应出虚拟现实软件在内存回收方面的性能,通过客户端解析json数组对象,自动生成测试报告,减少测试人员在手工编写测试报告的人力投入,降低测试的人力成本和时间成本。
进一步的,在所述步骤S2前还包括步骤:
S11、所述客户端创建客户端Socket,所述客户端Socket向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S12、所述服务端Socket监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
S13、所述客户端Socket发送连接成功的应答给所述服务端Socket,建立所述客户端Socket与所述服务端Socket的通信连接;
S14、所述客户端通过客户端Socket向服务端Socket发送测试请求。
由上述描述可知,在客户端Socket与服务端Socket未连接时都开启阻塞模式,防止由于客户端Socket与服务端Socket产生数据占用虚拟现实软件的内存,影响虚拟现实软件的正常工作,通过客户端Socket与服务端Socket连接测试,不需要依赖源代码,也不需要具有较高的代码阅读能力,提升了测试的覆盖面,减少测试盲区。
进一步的,步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个状态属性;
S33、获取运行的当前数据帧所述对象列表中每个对象的状态属性,统计当前数据帧所述状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,将当前数据帧所述状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,停止计时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端。
由上述描述可知,通过循环测试获得累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时,可以更加准确的反应出虚拟现实软件在内存回收方面的性能,通过调准预设值,更加灵活的检测虚拟现实软件内存回收操作的性能,若开发人员对源代码进行优化后,测试人员依旧能对优化后的虚拟内存软件进行精确的验收,不需要理解开发人员具体的优化点,减小对测试人员的技术要求,并且通过远程数据通信的方式可以更加灵活的对获取或者计算的数据进行处理。
进一步的,步骤S4中所述客户端解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收操作的频率=frames/gc_count。
由上述描述可知,通过计算内存回收操作的频率,可以更直观的看出虚拟现实软件内存回收操作是否过于频繁,影响到虚拟现实软件的客户体验,提升测试效率和测试质量,并且测试人员可以直接在客户端进行二次计算,避免在测试程序中进行大量计算,导致被测试程序的性能下降。
进一步的,步骤S4中所述客户端解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,将每一次内存回收的耗时相加得到内存回收操作的总耗时time,计算内存回收操作的平均耗时=time/gc_count。
由上述描述可知,通过计算内存回收操作的平均耗时,可以更直观的看出虚拟现实软件内存回收操作的时间是否过长,影响到虚拟现实软件的客户体验,提升测试效率和测试质量,并且测试人员可以直接在客户端进行二次计算,避免在测试程序中进行大量计算,导致被测试程序的性能下降。
请参照图2,一种虚拟现实软件内存回收机制的性能检测系统,包括服务端和客户端,所述服务端包括第一存储器、第一处理器及存储在第一存储器上并可在第一处理器上运行的第一计算机程序,所述客户端包括第二存储器、第二处理器及存储在第二存储器上并可在第二处理器上运行的第二计算机程序,其特征在于,所述第一处理器执行所述第一计算机程序时实现以下步骤:
S1、创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、将所述测试结果保存在创建的json数组对象内,并将所述json数组对象发送至所述客户端以使得所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告;
所述第二处理器执行所述第二计算机程序时实现以下步骤:
S5、解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
从上述描述可知,本发明的有益效果在于:通过测试程序对虚拟现实软件的堆内存进行测试,将累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时保存在所述json数组对象内反馈给客户端,通过Socket通信的方式,实现了测试程序与虚拟现实软件的数据交互,不需要依赖源代码,降低了对于测试人员的技能要求,提升了测试的覆盖面,通过计算出对虚拟现实软件中的堆内存回收操作的频率和耗时,可以更加准确,便捷的反应出虚拟现实软件在内存回收方面的性能,通过客户端解析json数组对象,自动生成测试报告,减少测试人员在手工编写测试报告的人力投入,降低测试的人力成本和时间成本。
进一步的,所述第一处理器执行所述第一计算机程序时还实现以下步骤:
在所述步骤S2前还包括步骤:
S12、监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
所述第二处理器执行所述第二计算机程序还时实现以下步骤:
在所述步骤S2前还包括步骤:
S11、创建客户端Socket,所述客户端Socket向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S13、接收所述服务端Socket的应答消息,所述客户端Socket发送连接成功的应答给所述服务端Socket,建立与所述服务端Socket的通信连接;
S14、通过客户端Socket向服务端Socket发送测试请求。
由上述描述可知,在客户端Socket与服务端Socket未连接时都开启阻塞模式,防止由于客户端Socket与服务端Socket产生数据占用虚拟现实软件的内存,影响虚拟现实软件的正常工作,通过客户端Socket与服务端Socket连接测试,不需要依赖源代码,也不需要具有较高的代码阅读能力,提升了测试的覆盖面,减少测试盲区。
进一步的,步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个状态属性;
S33、获取运行的当前数据帧所述对象列表中每个对象的状态属性,统计当前数据帧所述状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,将当前数据帧所述状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,停止计时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端。
由上述描述可知,通过循环测试获得累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时,可以更加准确的反应出虚拟现实软件在内存回收方面的性能,通过调准预设值,更加灵活的检测虚拟现实软件内存回收操作的性能,若开发人员对源代码进行优化后,测试人员依旧能对优化后的虚拟内存软件进行精确的验收,不需要理解开发人员具体的优化点,减小对测试人员的技术要求,并且通过远程数据通信的方式可以更加灵活的对获取或者计算的数据进行处理。
进一步的,步骤S4中所述客户端解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收操作的频率=frames/gc_count。
由上述描述可知,通过计算内存回收操作的频率,可以更直观的看出虚拟现实软件内存回收操作是否过于频繁,影响到虚拟现实软件的客户体验,提升测试效率和测试质量,并且测试人员可以直接在客户端进行二次计算,避免在测试程序中进行大量计算,导致被测试程序的性能下降。
进一步的,步骤S4中所述客户端解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,将每一次内存回收的耗时相加得到内存回收操作的总耗时time,计算内存回收操作的平均耗时=time/gc_count。
由上述描述可知,通过计算内存回收操作的平均耗时,可以更直观的看出虚拟现实软件内存回收操作的时间是否过长,影响到虚拟现实软件的客户体验,提升测试效率和测试质量,并且测试人员可以直接在客户端进行二次计算,避免在测试程序中进行大量计算,导致被测试程序的性能下降。
请参照图1,本发明的实施例一为:
一种虚拟现实软件内存回收机制的性能检测方法,包括步骤:
S1、服务端创建服务端Socket,将服务端Socket和测试程序通过挂载的方式集成在虚拟现实软件中,挂载的脚本组件分别调用socket()函数创建TCP套接口,bind()函数绑定服务端的地址和端口,listen()函数转换主动套接口为被动套接口完成初始化服务器,并阻塞等待客户端的连接请求,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、服务端通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
本测试流程是基于C/S结构的,在所述步骤S2前还包括步骤:
S11、所述客户端创建客户端Socket,所述客户端Socket通过服务端的IP地址和端口号向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S12、所述服务端Socket监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
S13、所述客户端Socket发送连接成功的应答给所述服务端Socket,建立所述客户端Socket与所述服务端Socket的通信连接;
S14、所述客户端通过客户端Socket向服务端Socket发送发送模型资源的三角面数测试请求,请求数据中包含调用指令。
S3、服务端根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,将所述测试结果保存在json数组对象内,并将所述json数组对象发送至所述客户端;所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时,客户端接收到json数组对象后,调用close()函数向服务端Socket发送中断连接请求,服务端Socket接收到请求后,中断连接;
步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件Mono堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个state状态属性,所述访问虚拟现实软件Mono堆内存是访问在所述堆内存中的托管堆,通过Unity Profiler分析器ManagedHeap类提供的接口对虚拟现实软件的对象的堆内存占用情况进行查询,如果占用值为0,则说明,该对象不在托管堆中,如果不为0,则说明该对象在托管堆中;
S33、通过Profiler接口检查获取运行的当前数据帧所述对象列表中每个对象的state状态属性,统计当前数据帧所述state状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,创建事件监听器,将当前数据帧所述state状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并调用Stopwatch类的start函数对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,调用stop函数停止计时,并通过Elapsed属性获取当前事件的CPU耗时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端,较优的将预设值设为9,即会获取10次内存回收操作的数据。
S4、所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告,所述测试报告可以是数据图表,通过调用报告接口,自动绘制数据对应的数据图表,例如单次内存回收操作CPU耗时的曲线图等,若测试人员需要对这些数据进行二次计算,就可以直接在所述客户端进行处理。
步骤S4中所述客户端解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收事件的频率=frames/gc_count,内存回收调用频率越高,则软件出现卡顿现象越严重。
步骤S4中所述客户端解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,当预设值为9时,gc_count=10,可以将每一次内存回收操作的CPU耗时标记为t1,t2,…t10,将每一次内存回收的耗时相加得到内存回收操作的总耗时time=t1+t2+…t10,计算内存回收事件的平均耗时=(t1+t2+…t10)/10,内存回收耗时越长则对于CPU的负担越重,软件性能越差。
请参照图2,本发明的实施例二为:
一种虚拟现实软件内存回收机制的性能检测系统7,包括服务端1和客户端4,所述服务端1包括第一存储器2、第一处理器3及存储在第一存储器2上并可在第一处理器3上运行的第一计算机程序,所述客户端4包括第二存储器5、第二处理器6及存储在第二存储器5上并可在第二处理器6上运行的第二计算机程序,其特征在于,所述第一处理器3执行所述第一计算机程序时实现以下步骤:
S1、创建服务端Socket,将服务端Socket和测试程序通过挂载的方式集成在虚拟现实软件中,挂载的脚本组件分别调用socket()函数创建TCP套接口,bind()函数绑定地址和端口,listen()函数转换主动套接口为被动套接口完成初始化服务器,并阻塞等待客户端的连接请求,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
本测试流程是基于C/S结构的,所述第一处理器3执行所述第一计算机程序时还实现以下步骤:
在所述步骤S2前还包括步骤:
S12、监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
所述第二处理器6执行所述第二计算机程序还时实现以下步骤:
在所述步骤S2前还包括步骤:
S11、创建客户端Socket,所述客户端Socket通过所述服务端的IP地址和端口号向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S13、接收所述服务端Socket的应答消息,所述客户端Socket发送连接成功的应答给所述服务端Socket,建立与所述服务端Socket的通信连接,
S14、通过客户端Socket向服务端Socket发送发送模型资源的三角面数测试请求,请求数据中包含调用指令。
S3、根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时,客户端4接收到json数组对象后,调用close()函数向服务端Socket发送中断连接请求,服务端Socket接收到请求后,中断连接;
步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件Mono堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个state状态属性,所述访问虚拟现实软件Mono堆内存是访问在所述堆内存中的托管堆,通过Unity Profiler分析器ManagedHeap类提供的接口对虚拟现实软件的对象的堆内存占用情况进行查询,如果占用值为0,则说明,该对象不在托管堆中,如果不为0,则说明该对象在托管堆中;
S33、通过Profiler接口检查获取运行的当前数据帧所述对象列表中每个对象的state状态属性,统计当前数据帧所述state状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,创建事件监听器,将当前数据帧所述state状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并调用Stopwatch类的start函数对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,调用stop函数停止计时,并通过Elapsed属性获取当前事件的CPU耗时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端,较优的将预设值设为9,即会获取10次内存回收操作的数据。
S4、将所述测试结果保存在创建的json数组对象内,并将所述json数组对象发送至所述客户端4以使得所述客户端4解析所述json数组对象,并生成与所述json数组对象对应的测试报告,所述测试报告可以是数据图表,通过调用报告接口,自动绘制数据对应的数据图表,例如单次内存回收操作CPU耗时的曲线图等,若测试人员需要对这些数据进行二次计算,就可以直接在所述客户端进行处理;
所述第二处理器6执行所述第二计算机程序时实现以下步骤:
S5、解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
步骤S5中所述客户端4解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收事件的频率=frames/gc_count,内存回收调用频率越高,则软件出现卡顿现象越严重。
步骤S5中所述客户端4解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,当预设值为9时,gc_count=10,可以将每一次内存回收操作的CPU耗时标记为t1,t2,…t10,将每一次内存回收的耗时相加得到内存回收操作的总耗时time=t1+t2+…t10,计算内存回收事件的平均耗时=(t1+t2+…t10)/10,内存回收耗时越长则对于CPU的负担越重,软件性能越差。
综上所述,本发明提供的一种虚拟现实软件内存回收机制的性能检测方法及系统,通过测试程序对虚拟现实软件的堆内存进行测试,将累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时保存在所述json数组对象内反馈给客户端,通过Socket通信的方式,实现了测试程序与虚拟现实软件的数据交互,不需要依赖源代码,降低了对于测试人员的技能要求,提升了测试的覆盖面,在服务端Socket与客户端Socket未建立连接前都是处于阻塞模式,防止服务端Socket与客户端Socket产生的数据影响虚拟现实软件,通过计算出对虚拟现实软件中的堆内存回收操作的频率和平均耗时,可以更加准确,便捷的反应出虚拟现实软件在内存回收方面的性能,通过客户端解析json数组对象,调用报告接口,自动生成测试报告,减少测试人员在手工编写测试报告的人力投入。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种虚拟现实软件内存回收机制的性能检测方法,其特征在于,包括步骤:
S1、服务端创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、服务端通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、服务端根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,将所述测试结果保存在json数组对象内,并将所述json数组对象发送至所述客户端;所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
2.根据权利要求1所述的一种虚拟现实软件内存回收机制的性能检测方法,其特征在于,
在所述步骤S2前还包括步骤:
S11、所述客户端创建客户端Socket,所述客户端Socket向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S12、所述服务端Socket监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
S13、所述客户端Socket发送连接成功的应答给所述服务端Socket,建立所述客户端Socket与所述服务端Socket的通信连接;
S14、所述客户端通过客户端Socket向服务端Socket发送测试请求。
3.根据权利要求1所述的一种虚拟现实软件内存回收机制的性能检测方法,其特征在于,
步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个状态属性;
S33、获取运行的当前数据帧所述对象列表中每个对象的状态属性,统计当前数据帧所述状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,将当前数据帧所述状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,停止计时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端。
4.根据权利要求3所述的一种虚拟现实软件内存回收机制的性能检测方法,其特征在于,
步骤S4中所述客户端解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收操作的频率=frames/gc_count。
5.根据权利要求3所述的一种虚拟现实软件内存回收机制的性能检测方法,其特征在于,
步骤S4中所述客户端解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,将每一次内存回收的耗时相加得到内存回收操作的总耗时time,计算内存回收操作的平均耗时=time/gc_count。
6.一种虚拟现实软件内存回收机制的性能检测系统,包括服务端和客户端,所述服务端包括第一存储器、第一处理器及存储在第一存储器上并可在第一处理器上运行的第一计算机程序,所述客户端包括第二存储器、第二处理器及存储在第二存储器上并可在第二处理器上运行的第二计算机程序,其特征在于,所述第一处理器执行所述第一计算机程序时实现以下步骤:
S1、创建服务端Socket,将服务端Socket和测试程序集成在虚拟现实软件中,所述测试程序用于测试虚拟现实软件内存回收机制;
S2、通过服务端Socket接收客户端的测试请求,所述测试请求用于请求执行虚拟现实软件内存回收机制的测试;
S3、根据所述测试请求,调用测试程序,创建json数组对象,对所述虚拟现实软件的内存回收机制进行测试,获得测试结果,所述测试结果包括测试过程中累计运行的数据帧数、测试过程中内存回收操作的调用次数以及测试过程中每一次调用内存回收操作CPU的耗时;
S4、将所述测试结果保存在创建的json数组对象内,并将所述json数组对象发送至所述客户端以使得所述客户端解析所述json数组对象,并生成与所述json数组对象对应的测试报告;
所述第二处理器执行所述第二计算机程序时实现以下步骤:
S5、解析所述json数组对象,并生成与所述json数组对象对应的测试报告。
7.根据权利要求6所述的一种虚拟现实软件内存回收机制的性能检测系统,其特征在于,
所述第一处理器执行所述第一计算机程序时还实现以下步骤:
在所述步骤S2前还包括步骤:
S12、监听到所述客户端Socket发出的连接请求,回复应答给所述客户端Socket,并阻塞等待所述客户端Socket的测试请求;
所述第二处理器执行所述第二计算机程序时还实现以下步骤:
在所述步骤S2前还包括步骤:
S11、创建客户端Socket,所述客户端Socket向与所述客户端Socket对应的服务端Socket发送连接请求,并阻塞等待所述服务端Socket应答;
S13、接收所述服务端Socket的应答消息,所述客户端Socket发送连接成功的应答给所述服务端Socket,建立与所述服务端Socket的通信连接,并向所述服务端Socket发送测试请求。
8.根据权利要求6所述的一种虚拟现实软件内存回收机制的性能检测系统,其特征在于,
步骤S3具体包括:
S31、根据所述测试请求,调用测试程序,创建json数组对象,设置全局变量OcjCount,gc_count和frames,并初始化OcjCount=0,gc_count=0和frames=0;
S32、访问虚拟现实软件堆内存中的对象列表,所述对象列表中的每个对象都被自动分配了内存并包含一个状态属性;
S33、获取运行的当前数据帧所述对象列表中每个对象的状态属性,统计当前数据帧所述状态属性为“未启用”的数量,并赋值给所述全局变量OcjCount;;
S34、判断当前数据帧所述全局变量OcjCount是否等于0,若是,则不触发内存回收操作,并将所述全局变量frames的值加1,进入下一帧,并返回步骤S33,若否,则触发内存回收操作,将当前数据帧所述状态属性为“未启用”的对象内存回收,将所述全局变量frames和gc_count的值分别加1,并对所述内存回收操作进行计时,当监听到内存回收操作运行完成时,停止计时,将所述全局变量frames、gc_count的值以及对应所述内存回收操作的CPU耗时存入所述json数组对象;
S35、判断当前数据帧所述全局变量gc_count的值是否大于预设值,若否,则进入下一帧,并返回步骤S33,若是,则通过序列化将所述json数组对象转换成可传输的格式,并将所述json数组对象发送至所述客户端。
9.根据权利要求8所述的一种虚拟现实软件内存回收机制的性能检测系统,其特征在于,
步骤S5中所述解析所述json数组对象具体包括:
获取json数组对象中所述全局变量frames和gc_count的值,计算调用内存回收操作的频率=frames/gc_count。
10.根据权利要求8所述的一种虚拟现实软件内存回收机制的性能检测系统,其特征在于,
步骤S5中所述解析所述json数组对象具体还包括:
获取json数组对象中每一次内存回收操作的CPU耗时和所述全局变量gc_count的值,将每一次内存回收的耗时相加得到内存回收操作的总耗时time,计算内存回收操作的平均耗时=time/gc_count。
CN201810319921.2A 2018-04-11 2018-04-11 一种虚拟现实软件内存回收机制的性能检测方法及系统 Active CN108763052B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810319921.2A CN108763052B (zh) 2018-04-11 2018-04-11 一种虚拟现实软件内存回收机制的性能检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810319921.2A CN108763052B (zh) 2018-04-11 2018-04-11 一种虚拟现实软件内存回收机制的性能检测方法及系统

Publications (2)

Publication Number Publication Date
CN108763052A true CN108763052A (zh) 2018-11-06
CN108763052B CN108763052B (zh) 2021-06-29

Family

ID=63981464

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810319921.2A Active CN108763052B (zh) 2018-04-11 2018-04-11 一种虚拟现实软件内存回收机制的性能检测方法及系统

Country Status (1)

Country Link
CN (1) CN108763052B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597062A (zh) * 2021-02-04 2021-04-02 北京关键科技股份有限公司 军用软件结构化质量数据抽取方法、装置及软件测试装置
CN112650666A (zh) * 2019-10-12 2021-04-13 北京达佳互联信息技术有限公司 一种软件测试系统、方法、装置、控制设备及存储介质
CN113326207A (zh) * 2021-06-30 2021-08-31 福建天泉教育科技有限公司 一种Steam VR程序的自动化测试系统及其方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101425037A (zh) * 2008-11-20 2009-05-06 金蝶软件(中国)有限公司 Gui性能日志生成系统、方法及gui性能分析方法
CN101645032A (zh) * 2009-08-31 2010-02-10 金蝶软件(中国)有限公司 应用服务器的性能分析方法和应用服务器
CN103944779A (zh) * 2014-03-31 2014-07-23 中国移动(深圳)有限公司 一种wap业务性能监测方法及系统
CN105630694A (zh) * 2015-12-28 2016-06-01 创新科存储技术(深圳)有限公司 控制内存的回收方法和装置
CN106970875A (zh) * 2017-03-01 2017-07-21 福建天晴数码有限公司 虚拟现实软件的帧率测试方法及其系统
CN107729125A (zh) * 2017-10-31 2018-02-23 努比亚技术有限公司 应用程序常驻后台的管理方法及移动终端
CN107748715A (zh) * 2017-09-13 2018-03-02 福建天晴数码有限公司 基于Unity的纹理贴图配置信息检测方法及其系统
CN107861878A (zh) * 2017-11-22 2018-03-30 泰康保险集团股份有限公司 Java应用程序性能问题定位的方法、装置和设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101425037A (zh) * 2008-11-20 2009-05-06 金蝶软件(中国)有限公司 Gui性能日志生成系统、方法及gui性能分析方法
CN101645032A (zh) * 2009-08-31 2010-02-10 金蝶软件(中国)有限公司 应用服务器的性能分析方法和应用服务器
CN103944779A (zh) * 2014-03-31 2014-07-23 中国移动(深圳)有限公司 一种wap业务性能监测方法及系统
CN105630694A (zh) * 2015-12-28 2016-06-01 创新科存储技术(深圳)有限公司 控制内存的回收方法和装置
CN106970875A (zh) * 2017-03-01 2017-07-21 福建天晴数码有限公司 虚拟现实软件的帧率测试方法及其系统
CN107748715A (zh) * 2017-09-13 2018-03-02 福建天晴数码有限公司 基于Unity的纹理贴图配置信息检测方法及其系统
CN107729125A (zh) * 2017-10-31 2018-02-23 努比亚技术有限公司 应用程序常驻后台的管理方法及移动终端
CN107861878A (zh) * 2017-11-22 2018-03-30 泰康保险集团股份有限公司 Java应用程序性能问题定位的方法、装置和设备

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112650666A (zh) * 2019-10-12 2021-04-13 北京达佳互联信息技术有限公司 一种软件测试系统、方法、装置、控制设备及存储介质
CN112650666B (zh) * 2019-10-12 2024-04-09 北京达佳互联信息技术有限公司 一种软件测试系统、方法、装置、控制设备及存储介质
CN112597062A (zh) * 2021-02-04 2021-04-02 北京关键科技股份有限公司 军用软件结构化质量数据抽取方法、装置及软件测试装置
CN113326207A (zh) * 2021-06-30 2021-08-31 福建天泉教育科技有限公司 一种Steam VR程序的自动化测试系统及其方法
CN113326207B (zh) * 2021-06-30 2023-09-22 福建天泉教育科技有限公司 一种Steam VR程序的自动化测试系统及其方法

Also Published As

Publication number Publication date
CN108763052B (zh) 2021-06-29

Similar Documents

Publication Publication Date Title
US10298469B2 (en) Automatic asynchronous handoff identification
CN110806934A (zh) 基于rpa技术的智能一体机开发及多业务快速处理方法
US9811356B2 (en) Automated software configuration management
CN110034972B (zh) 服务器压力测试方法和装置
EP3923556A1 (en) Method and apparatus for testing dialogue platform, and storage medium
CN107608901B (zh) 基于Jmeter的测试方法及装置、存储介质、电子设备
CN108763052A (zh) 一种虚拟现实软件内存回收机制的性能检测方法及系统
CN109558320A (zh) 系统测试方法、装置、系统、设备及计算机可读存储介质
CN112131118A (zh) Mock测试方法、装置、电子设备及计算机可读存储介质
CN105607994A (zh) 一种移动终端软件测试方法和系统
CN111143207A (zh) 一种在移动端查看模型训练通知和训练日志的方法
CN109344066A (zh) 一种浏览器页面的测试方法、系统及终端
CN113434396A (zh) 接口测试方法、装置、设备、存储介质及程序产品
CN111309620A (zh) 一种游戏协议测试方法、装置、电子设备和存储介质
CN113849356B (zh) 一种设备测试方法、装置、电子设备和存储介质
CN117009208A (zh) 依赖关系信息的处理方法、装置、设备及存储介质
CN108287791A (zh) 虚拟现实软件的纹理资源配置的检测方法及存储介质
CN108427639A (zh) 自动化测试方法、应用服务器及计算机可读存储介质
CN107748715A (zh) 基于Unity的纹理贴图配置信息检测方法及其系统
CN110162982B (zh) 检测非法权限的方法及装置、存储介质、电子设备
CN109214189B (zh) 识别程序漏洞的方法、装置、存储介质和电子设备
CN111240981A (zh) 一种接口测试方法、系统及平台
CN108153655B (zh) 虚拟现实软件的绘制调用数量的检测方法及存储介质
CN114003293A (zh) 接口管理方法、装置、电子设备以及可读存储介质
CN114637685A (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