使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试
Unity3D 引擎在 UnityEngine 名字空间下,提供了 Profiler 类(Unity 5.6 开始似乎改变了这个名字空间),用于辅助对项目性能进行测试。以 Android 平台为例,在构建之前,需要在 Unity 的 File/Build Settings 菜单项弹出的窗口中,勾选 Development Build 一项。后用 adb forward 的方式,将 Android 设备的 TCP 输出转发到电脑,实现和 Unity Profiler 的连接(网上很容易找到这个过程的具体描述,如这里)。但是 Unity Profiler 默认只提供部分方法/函数,尤其是 Unity 内置方法/函数的性能采样,如果想 Profile 自己项目的代码段,就必须在代码段入口和出口加上:
方法出口注入代码稍微有些麻烦。尽管 IL 级别的函数都是以一个返回指令结束的,但直接在返回指令之前插入新的指令是不够的。因为很多时候,返回指令是由跳转指令直接跳转过去的。而对于我们在 C# 中获取的指令容器,跳转指令保存了其跳转目标的引用。因此,我们不仅需要在返回指令前插入我们需要的指令(对 Profiler.EndSample 包装方法的调用),还要将跳转目标为该返回指令的跳转指令的目标,修改为我们新增的指令。这里有详尽的关于 IL 指令的列表。对应 Cecil 中 OpCodes 类中的常量,我们可以过滤出跳转指令,并用 Operand 属性获取或修改其跳转目标。
修改完成后,需要对当前的模块对象 moduleDef 调用 moduleDef.Write(assemblyPath, new WriterParameters { WriteSymbols = true }) 来写回程序集文件。这个调用中,第二个参数的含义,是把新增的符号也写入程序集(比如我们调用的该程序集之外的方法)。
在注入完成后,继续 Android 平台的原生构建生成 apk 包,安装进设备,将设备连接电脑,即可在 Unity 的 Profiler 窗口中看到新增的性能采样信息。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS app版本更新CheckVersion_Swift
iOS app版本更新CheckVersion_Swift 前言 CheckVersion_Swift是一款轻量级的Swift版本的框架,框架功能:根据Apple提供的API去请求JSON,根据JSON中的版本号决定是否去更新原生App。更新提示的内容可以自定义,也可以是JSON中给的内容。 写作CheckVersion_Swift框架初衷 通常在做App版本检查更新功能的时候,都是后台服务器为我们提供一个获取App最新版本信息的接口,并且在每次新版本更新后,都需要人工在后台更改版本信息,这样做其实也可以的,但是费事且不及时。 其实苹果提供了一个很友好的iTunes接口,供我们获取App Store中App当前的最新信息。 Example To run the example project, clone the repo, and runpod installfrom the Example directory first. Installation CheckVersion_Swift is available throughCocoaPods. To install it, si...
- 下一篇
小白第一次在阿里云服务器上部署web项目
做web项目开发的时候,以前都是大牛把框架搭建好,自己往里面写代码。久而久之,小白也想自己搭框架,自己在服务器上部署。所以在本地搭建了一个基于NetBeans+spring+Mybatis+MVC 的web项目框架,搭建过程可参考之前的博客。 传送门【web项目搭建】 项目搭建好了,就想在服务器上试试手,然后就申请了阿里云服务器的免费试用一个月(穷)。 1、阿里云服务器的申请 首先是登录官网,注册账号,然后登录。登录后就可以在产品列表中申请你需要的服务器以及服务器的配置,我选择的系统是CentOS 6.9 64位,最后进入控制台。 在控制台,可以看到自己的服务器信息和服务器的ip。 2、添加安全组规则 安全组在云端提供类似虚拟防火墙功能,用于设置单个或多个 ECS 实例的网络访问控制,它是重要的安全隔离手段。在创建 ECS 实例时,必须选
相关文章
文章评论
共有0条评论来说两句吧...