一种游戏性能监听方法及系统
技术领域
本发明涉及一种游戏性能监听方法及系统,属于计算机技术领域。
背景技术
现在主流PC游戏或终端游戏都是使用微软的Direct3D图形驱动接口实现。游戏玩家追求着极致画面体验,同时不能忍受游戏卡顿、画面不流畅不自然。客户端游戏开发不停的研究新技术,实现电影级画质、4k分辨率等等高级画面表现,每引进或修改一个技术点,往往带来负面效果是太耗性能、画面不流畅,不停的迭代中对游戏客户端的优化投入也伴随至始至终。越晚发现问题,修改的代价越高,因此,对游戏客户端性能的自动化监控伴随着游戏整个周期,且越往后期越重要。日常的监控结果及时的发现问题,并给开发者指明优化方向,且是优化结果的检验标准,是游戏质量保证的最后一道线。常规的性能监控有服务器方面,如专利“网络游戏性能测试方法及系统”,客户端方面,一般是每个游戏项目团队独自投入资源开发并维护这个系统,如在项目代码中实现性能参数的收集,对图形驱动接口再进行一层封装,在封装层进行性能参数统计收集,这种方法与项目紧密结合,低效,开发维护难,还增加了不必要的封装层。
发明内容
为解决上述问题,本发明的目的在于提供一种游戏性能监听方法及系统,监控程序使用Hook技术注入图形驱动接口,分析出游戏重要性能指标,记录到文件,并以web图形形式展现游戏每日性能数据,如果性能对比异常,如平均FPS相差10%,以邮件形式进行通知警告。
本发明解决其问题所采用的技术方案一方面是:一种游戏性能监听方法,其特征在于,包括以下步骤:S100、使用图形驱动接口创建对象指针并定义指针指向;S200、获取指针指向的函数地址,根据函数地址获取函数信息,其中函数信息包括函数的调用次数、调用间隔以及函数内容;S300、对选定的客户端注入监听程序,运行客户端,通过共享内存技术获取性能参数数据,将采集到的性能参数数据导出为性能数据文件;S400、将导出的性能数据文件上传到云端服务器,进行数据处理,并根据设置的性能标准对性能数据进行检查,针对不合格的性能数据对向开发人员发送性能安全提示,开发人员根据安全提示的内容对对应项目执行优化调整。
进一步的,所述S100包括:S101、根据系统系统的图形驱动提供的接口,创建指定对象指针并定义指向;S102、根据指定指向获取对应对象的虚表地址,其中虚表地址存储了游戏运行时需要调用的图形驱动函数;S103、在获取指定的图形驱动函数地址后,偏移指针得到下一个图形驱动函数地址,重复执行该步骤直到获取所有的图形驱动函数地址。
进一步的,其特征在于,所述S200包括:S201、将指针修改为目标函数的函数地址,获取目标函数在指定时间内的函数调用次数、函数调用的间隔以及函数内容,其中指定时间可自定义;S202、重复执行步骤S202,直到所有函数都已经遍历获取完成。
进一步的,其特征在于,所述S300包括:S301、使用操作系统提供的接口对选定的客户端注入监听程序;S302、修改监听程序的字符串参数,其中字符串参数即为游戏进程名字;S303、通过共享内存技术获取步骤S200得到的函数信息,并将得到的函数信息进行统计处理;S304、将统计处理后的函数信息存储为性能数据文件。
进一步的,所述S400包括:S401、将性能数据文件周期性的上传到云端服务器中,得到不同时间段的性能数据文件,进行二次数据处理,得到不同时间段的性能数据信息,并以web形式展示,其中性能数据信息包括但不限于每帧的性能数据、平均性能数据以及90%性能数据;S402、根据性能数据信息制定对应的性能标准,若性能数据不满足对应性能标准,则向开发人员发送安全性能提示,否则不执行操作。
本发明解决其问题所采用的技术方案另一方面是:一种游戏性能监听系统,其特征在于,包括:指针模块,用于使用图形驱动接口创建对象指针并定义指针指向;抓取模块,用于获取指针指向的函数地址,根据函数地址获取函数信息,其中函数信息包括函数的调用次数、调用间隔以及函数内容;监听模块,用于对选定的客户端注入监听程序,运行客户端,通过共享内存技术获取性能参数数据,将采集到的性能参数数据导出为性能数据文件;云端处理模块,用于接收监听模块生成的性能数据文件并进行数据处理,并根据设置的性能标准对性能数据进行检查,针对不合格的性能数据对向开发人员发送性能安全提示,开发人员根据安全提示的内容对对应项目执行优化调整。
进一步的,所述指针模块还包括:创建模块,用于根据系统系统的图形驱动提供的接口,创建指定对象指针并定义指向;获取模块,用于根据指定指向获取对应对象的虚表地址,其中虚表地址存储了游戏运行时需要调用的图形驱动函数;指针修改模块,用于修改指针指向以及偏移指针。
进一步的,所述抓取模块还包括遍历模块,用于在一定时间内遍历所有函数地址,在遍历完成后结束抓取模块的调用。
进一步的,所述监听模块还包括:注入模块,用于使用操作系统提供的接口对选定的客户端注入监听程序;修改模块,用于修改监听程序的字符串参数,其中字符串参数即为游戏进程名字;统计处理模块,用于通过共享内存技术获取抓取模块得到的函数信息,并将得到的函数信息进行统计处理;导出模块,用于将统计处理后的函数信息存储为性能数据文件。
进一步的,所述云端处理模块还包括:二次处理模块,用于将不同时间段的性能数据文件,进行二次数据处理,得到不同时间段的性能数据信息;Web模块,用于将二次数据处理后的新能数据信息以web形式展示;标准制定模块,用于根据性能数据信息制定对应的性能标准;判断评价模块,用于根据性能标准对性能数据信息进行判断评价,若符合标准则输出正常提示,否则输出安全性能提示。
本发明的有益效果是:独立于具体项目,项目开发或运营维护阶段,当游戏客户端性能有异常时,自动通知开发者,并提供重要性能数据指标给开发者进行问题排查。不同游戏开发团队不需再各自开发维护客户端性能数据统计收集、输出、分析等等,通过提供客户端重要性能参数帧率、drawcall数量、顶点数量、图元数量等,开发人员可以快速进行有针对性问题分析并优化,保证游戏质量,让玩家可以体验到更流畅更逼真的拥有电影级画质的游戏。
附图说明
图1所示为根据本发明优选实施例的方法流程示意图;
图2所示为根据本发明优选实施例的系统结构示意图;
图3所示为根据本发明优选实施例一的系统流程示意图;
图4a、图4b所示为根据本发明优选实施例一的web图。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
参照1是根据本发明优选实施例的方法流程示意图,包括以下步骤:
S100、使用图形驱动接口创建对象指针并定义指针指向;
S200、获取指针指向的函数地址,根据函数地址获取函数信息,其中函数信息包括函数的调用次数、调用间隔以及函数内容;
S300、对选定的客户端注入监听程序,运行客户端,通过共享内存技术获取性能参数数据,将采集到的性能参数数据导出为性能数据文件;
S400、将导出的性能数据文件上传到云端服务器,进行数据处理,并根据设置的性能标准对性能数据进行检查,针对不合格的性能数据对向开发人员发送性能安全提示,开发人员根据安全提示的内容对对应项目执行优化调整。
举例说明,
第一步:实现对Direct3D图形驱动关键函数进行hook功能,如D3D11Present、D3D11Draw、D3D11DrawIndexed、D3D11DrawIndexedInstanced等函数。使用图形驱动接口D3D11CreateDeviceAndSwapChain创建并获取IDXGISwapChain对象指针,定义指针pSwapChainVtable并使其指向IDXGISwapChain的虚表地址,绝大部分图形驱动函数存储在此虚表中,并可以根据偏移获取每个函数地址。以图形驱动函数D3D11Present为例,pSwapChainVtable[8]即为D3D11Present函数地址,定义一个与D3D11Present相同类型的函数如名为hookD3D11Present,使用函数指针变量先保存原D3D11Present函数地址,再使用Detour技术将hookD3D11Present替换D3D11Present,达到hook的作用。
第二步:在hook函数中实现客户端性能参数统计收集功能。不同图形驱动接口实现不同功能,如D3D11Draw、D3D11DrawIndexed、D3D11DrawIndexedInstanced等draw函数实现绘制,即绘制提交,是客户端性能极重要的指标,D3D11Present是一帧渲染的提交,标志一帧的结束。以hookD3D11Present为例,在此hook函数中可以根据相邻两次调用的时间间距,算出帧率,并总结统计其他功能数据,如统计相邻两次调用之间所有draw函数的数量,即为drawcall数量,其他指标如顶点数量、图元数量等也类似统计。
第三步:实现监听注入程序,此程序接受一个字符串参数,即需要监听的游戏进程名字。使用Windows提供的OpenProcess()、WriteProcessMemory()、GetProceAddress()、CreateRemoteThread()等关键函数实现对游戏客户端注入,结合第一步进行Direct3D驱动接口hook,再结合第二步进行性能参数统计收集,然后使用共享内存技术获取性能参数数据,最后将每帧统计到的帧率、drawcall数量、顶点数量、图元数量等性能数据写入文件,即性能数据文件。
第四步:使用脚本自动启动运行游戏,并启动运行第三步的监听注入程序,这个程序就会自动对游戏进行客户端重要性能数据进行收集并输出。
第五步:把性能数据文件上传到web后台,后台进行最后数据处理,如每帧的性能数据、平均性能数据、90%性能数据等等,根据设置的性能标准,进行性能安全提示,如设置两次平均帧率相差10%,超过这个标准时开发者会收到安全提示的邮件。整个系统及流程参照图3根据本发明优选实施例一的系统流程示意图。
参照图2所示为根据本发明优选实施例的系统结构示意图,
包括:指针模块,用于使用图形驱动接口创建对象指针并定义指针指向;抓取模块,用于获取指针指向的函数地址,根据函数地址获取函数信息,其中函数信息包括函数的调用次数、调用间隔以及函数内容;监听模块,用于对选定的客户端注入监听程序,运行客户端,通过共享内存技术获取性能参数数据,将采集到的性能参数数据导出为性能数据文件;云端处理模块,用于接收监听模块生成的性能数据文件并进行数据处理,并根据设置的性能标准对性能数据进行检查,针对不合格的性能数据对向开发人员发送性能安全提示,开发人员根据安全提示的内容对对应项目执行优化调整。
例如剑网三重制版为例。
第一步:写脚本每日定时自动启动剑网三重制版游戏,并以剑网三重制版进程名做为参数启动监听注入程序。
第二步:游戏结束后,将监听注入程序输出的性能数据文件上传到web后台。
第三步:web后台分析整理数据,以图表形式展示,帧率如图4a、顶点数量如图4b所示,其中图4a、图4b所示为根据本发明优选实施例一的web图。
第四步:设置web后台两次性能数据监听的平均帧率相差10%等指标,指标达到后相关开发会自动收到邮件。
第五步:开发收到邮件后,查看整体性能数据,如drawcall数量、顶点数量、图元数量等是否有异常,进一步做问题分析,最后进行游戏代码修改,及时发现异常及时追踪问题根源,以提高游戏客户端性能及稳定性。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。