Unity UPR (Unity Performance Reporting)使用记录 (5)

命令行 与 自动化

/

[Info]=> UPR for Win: 2.17.3.0

[Info]=> Usage: UnityPerfProfiler [OPTIONS]

[Info]=> Start command line process, connect to player and forward perf data to server.

[Info]=>

[Info]=> Options:

  -h, --help                 Show this message

  -v, --version              UPR for Mac

      --stop                 Stop current test

      --force-stop           force stop with sessionId

  -m, --captureMemory        Capture memory

  -c, --captureObjects       Capture objects

  -t, --tag[=VALUE]          Add tag

  -i, --instanceId=VALUE     Instance id

  -p, --player=VALUE         Player ip

  -s, --sessionId=VALUE      Session id

  -n, --name=VALUE           The package name for test

  -d, --device=VALUE         The device identifier for test

      --adb=VALUE            Adb tool path

      --dumpPath=VALUE       Temp path for dumped messages

      --kcp                  Use kcp

  -u

      --platform=VALUE       IOS / Android

[Info]=> [Test with wifi]: ./UPRDesktop.exe -p [playerIP] -s [SessionId]  (application should be opened first)

[Info]=> [Test with adb]: ./UPRDesktop.exe -p [playerIP] -s [SessionId] -n [PackageName]

//

Win UPR命令行

1. 打开Win UPR程序

UPR Windows程序也可以以命令行的方式打开 。

可以通过命令UPRDesktop.exe -h获取可以使用的命令行提示。

image-win-ui-help

通过命令行的方式开始测试

参数 <device_ip> 为待测设备的IP地址,UPR 会通过该IP地址跟设备建立TCP连接, 需要确保UPR能够通过该IP地址连通到待测设备。 <session_id> 为通过UPR页面创建session所获取的session_id。

image-win-upr-command-start

UPRDesktop.exe -p <device_ip> -s <session_id>                          

image-win-upr-command-start

如果使用数据线连接进行测试时,需要输入测试的游戏包名。<package_name>为待测试游戏的包名,此时UPR会通过数据线连通到待测设备上,<device_ip>可以填写为待测设备IP地址,也可以填写为127.0.0.1。

更多命令行开启测试方法,请参考命令行手册

UPRDesktop.exe -p <device_ip> -s <session_id> -n <package_name>                           
2. 在命令行模式下,也可以使用命令行记录对象快照/内存快照/Tag。

image-win-ui-command

UPRDesktop.exe -c  // 记录对象快照 
UPRDesktop.exe -m  // 记录内存快照
UPRDesktop.exe -t  // 记录Tag
UPRDesktop.exe -t=<tag_name> //记录自命名的Tag
UPRDesktop.exe -z  // 记录Renderdoc快照,该指令只有在Renderdoc模式下生效,并且会造成卡顿,比较耗费性能。
3. 待测试结束,使用命令行结束测试

在命令行模式下,也可以使用命令行关闭UPR Windows。

该命令会将之前启动的UPRDesktop进程一并关闭。

UPRDesktop.exe --stop                    

UPRDesktop.exe --force-stop
//(调用了—stop还有帧没上传完时)可以直接强制结束而不等待没上传完的帧上传完。同UI上的Force Stop一致。

UPRDesktop.exe -s <session_id> —-force-stop  
// 可以直接强制已经结束但是并没有生成报告的session结束测试生成报告。          
4. 测试结束,可以到UPR官网查看测试报告

Mac UPR手册

1. 下载 UPR Mac 程序。
2. 下载并安装 .net 3.0 core程序。
3. 点击「UnityPerfProfiler」程序,并获取可以使用的命令行提示。

image-mac-upr-options

4. 打开UPR Mac程序。

第一次使用UPR Mac时,需要给UnityPerfProfiler程序增加可执行权限。

sudo chmod +x UnityPerfProfiler                                               

使用Lightning线测试IOS设备时,需要调用Libimobiledevice文件夹内的小工具,需要执行以下命令。

sudo spctl --master-disable

在使用Mac Silicon版本UPR时,需要给UPR以及Libimobiledevice文件夹可执行权限,以免出现 “未识别开发者“的弹框 造成无法使用的情况。

sudo xattr -r -d com.apple.quarantine *
sudo xattr -r -d com.apple.quarantine libimobiledevice/*

在启动Mac UPR开始测试前,请确保被测试的游戏已经启动。

使用命令行的方式打开UPR Mac。

参数 <device_ip> 为待测设备的IP地址,UPR 会通过该IP地址跟设备建立TCP连接, 需要确保UPR能够通过该IP地址连通到待测设备。 <session_id> 为通过UPR页面创建session所获取的session_id。

./UnityPerfProfiler -p <device_ip> -s <session_id>                        

当使用数据线连接进行测试时,需要输入待测要应用包名。<package_name>为待测试游戏的包名,此时UPR会通过数据线连通到待测设备上,<device_ip>可以填写为待测设备IP地址,也可以填写为127.0.0.1。

image-win-upr-command-start

./UnityPerfProfiler -p <device_ip> -s <session_id>  -n <package_name>                      

image-mac-upr-start

更多命令行开启测试方法,请参考命令行手册

5. 在测试过程中,可以通过命令行记录对象快照/内存快照/Tag/RenderDoc等。
./UnityPerfProfiler -m
./UnityPerfProfiler -c
./UnityPerfProfiler -t                                          

image-mac-upr-capture

image-mac-upr-capture

6. 待测试结束,使用命令行结束测试。
./UnityPerfProfiler --stop

./UnityPerfProfiler --force-stop
//(调用了—stop还有帧没上传完时)可以直接强制结束而不等待没上传完的帧上传完。同UI上的Force Stop一致。

./UnityPerfProfiler -s <session_id> —-force-stop  
// 可以直接强制已经结束但是并没有生成报告的session结束测试生成报告。                                                     

image-mac-upr-capture

7. 测试结束,可以到UPR官网查看测试报告。

命令行手册

命令行解释说明

-h 或者 --help                               
显示命令行提示信息

-v 或者 --version                             
显示当前UPR Desktop版本  

-s 或者 --sessionId=VALUE
在UPR网站上创建的测试的session id

-p 或者 --player=VALUE
待测设备的IP地址,请确保测试设备和UPR Mac在一个局域网内

-n 或者 --name=VALUE
为待测试的应用包名

-r 或者 --renderDocPackage=VALUE
在renderdoc模式下(需为ADB模式+Android测试机),输入待测试的应用包名

--stop
结束当前UPR测试

--force-stop
直接强制结束当前测试而不等待没上传完的帧上传完
                               
-m 或者 --captureMemory
截取内存快照
                               
-c 或者 --captureObjects 
截取对象快照
                              
-z 或者 --captureRendering 
截取Renderdoc快照,测试需要处于renderdoc模式下
                              
-t 或者 --tag[=VALUE]  
截取Tag

--adb=VALUE
用于指定测试使用的adb路径,避免同其他应用产生冲突

--dumpPath=VALUE
用于指定缓存存放位置,避免默认位置硬盘空间不足
也可以通过更改文件夹内的config.xml文件内的TempPath的setting进行更改
通过--dumpPath=VALUE命令行参数传入的优先级大于config.xml文件内的TempPath的setting

--platform=VALUE
VALUE可以为IOS/Android 
用于命令行测试情况下,通过deviceId判定Android 和IOS应用错误前提下,强行指定对应的测试平台

--kcp
用于kcp数据传输(企业版专供)
          
-i 或者 --instanceId=VALUE
指定当前测试的instance_id,用于多机测试。如果不指定,将会按照测试顺序依次生效                              
                                                        
-d 或者 --device=VALUE 
当多台手机链接电脑时,用于指定设备的deviceId,。对于Ios设备即为对应的udid                

测试模式解释说明

Wi-Fi模式:
1.在启动UPR Desktop前,请确保被测试的游戏已经启动
2.-n传入游戏包名,不是必须的,需要手动开启游戏
3.需要输入设备的IP地址,并确保测试设备和UPR Desktop在一个局域网内

ADB模式:
1.-n传入游戏包名后,解锁手机屏幕,UPR Desktop可以自动拉起待测项目
2.仅在ABD模式下,可以进入renderdoc模式(仅支持Android设备)

多机测试模式:
1.可以开启多个UPR Desktop线程,同时进行多台手机的测试
2.在启动时,可以通过-i指定当前测试的instance_id(用户自定义的名称)
3.在进行截取内存快照/Tag/Stop等操作时,需要加上具体的-i参数来对应启动的测试,否则将会按照测试顺序依次生效。例如:
./UnityPerfProfiler -i <instance_id> -m
./UnityPerfProfiler -i <instance_id> -c
./UnityPerfProfiler -i <instance_id> --stop           

Desktop UPR 开启测试

*以下使用Mac UPR为例演示测试流程,Win UPR操作流程类似,在此不作过多赘述。

使用命令行的方式启动UPR Mac
./UnityPerfProfiler -p <device_ip> -s <session_id>  
            
当使用数据线连接进行测试时(ADB),需要输入待测要应用包名
./UnityPerfProfiler -p <device_ip> -s <session_id> -n <package_name>  

当使用数据线连接进行测试时,进入renderdoc模式,需要通过-r输入待测要应用包名
./UnityPerfProfiler -p <device_ip> -s <session_id> -r <package_name>

使用命令行的方式启动UPR Mac,开启多个UPR测试
./UnityPerfProfiler -p <device_ip> -s <session_id> -i <instance_id>

自定义ADB连接

1. 准备

确认PC安装过ADB Tools,将手机通过USB连接线连接,打开开发者模式并且启动USB调试。

1. 执行 adb devices指令

查看移动设备是否连接成功, 如果出现如下信息则说明设备连接成功。

List of devices attached
44dd1836        device
2. 确认端口55000 56000 23333未被占用

请确保移动设备和电脑上的 55000 56000 23333端口都没被占用。
可以通过在命令提示符或终端中执行netstat -ano | findstr <port>"来查看端口是否被占用

3. 释放被占用端口

如若端口已经被占用的情况下,由上一条指令可以看到占用端口的应用PID值,通过如下指令将其终止即可
taskkill /pid <pid>

4. 端口映射
adb forward tcp:55000 localabstract:Unity-<package_name>
adb forward tcp:56000 tcp:56000
adb forward tcp:23333 tcp:23333

样例

C:\Users\test\adb forward tcp:55000 localabstract:Unity-Unity-jp.co.unity3d.UnityChanCRS
55000

C:\Users\test\adb forward tcp:56000 tcp:56000
56000

C:\Users\test\adb forward tcp:23333 tcp:23333
23333
5. 检查端口映射

执行成功后。可以通过指令adb forward --list 查看是否3个端口都映射成功

6. Win UPR指定IP

在使用Win UPR测试过程中,请在Choose a player处选择Selected IP, 并在弹出框内输入127.0.0.1

7. Mac UPR指定IP
./UnityPerfProfiler -p 127.0.0.1 -s 12345678-1234-1234-123456789123

///

UPR Open API

申请

请前往「App Key管理」页面申请,审核通过后将获得「App Id」「App Secret」用以调用UPR Open API。

UPR - Unity专业性能优化工具

API文档

Swagger UI

样例代码 (Python)

# -*-coding: utf-8-*-
import requests

API_ENDPOINT = 'https://upr.unity.cn/open-api'

# https://upr.unity.cn/projects
PROJECT_ID = '<PROJECT_ID>'  # 请填写 ProjectId

# 前往 https://upr.unity.cn/open-api 申请UPR Open App
AUTH = (
    '<APP_ID>',  # 请填写项目的 App ID
    '<APP_SECRET>'  # 请填写项目的 App Secret
)

def main():
    # 创建测试session
    session_request = {
        "projectId": PROJECT_ID,
        "sessionName": "battle test",    # 测试名称
        "gameName": "demo game",         # 游戏名称
        "gameVersion": "0.0.1",          # 游戏版本号
        "packageName": "com.demo.test",  # 游戏包名
        "unityVersion": "2018.4",        # Unity版本号

        "tags": [
            "tag1", "tag2", "tag3"       # 测试标签(可利用测试标签定位测试区间)
        ],

        "screenshotEnabled": True,       # 屏幕截图是否开启
        "screenshotFrequency": 4,        # 屏幕截图频率 (单位秒)

        "frameLockEnabled": True,        # 游戏是否有锁帧
        "frameLockFrequency": 60,        # 游戏锁定帧率
        "enableDeepLua": False,          # 是否开启Lua Profiling代码 (需要搭配UPR Package一起使用)
        "enableDeepMono": False,         # 是否开启Mono C#代码Profiling (需要搭配UPR Package一起使用)
        "monitor": False,                # 是否需要手机UPR App性能数据 (对UPR Desktop无效)
        "shareReport": True,             # 是否允许Project外的人员通过sessionId直接访问报表
        "gpuprofileEnabled": True,       # 是否开启GPU profiling
    }

    resp = requests.post('%s/sessions' % API_ENDPOINT, auth=AUTH, json=session_request)
    print(resp.text)

    '''
    [Response]
    {
      "SessionId": "<session_id>",
      "ProjectId": "<project_id>",
      "OrganizationId": "",
      "SessionName": "battle test",
      "GameName": "demo game",
      "GameVersion": "",
      "PackageName": "com.demo.test",
      "UnityVersion": "2018.4",
      "Tags": [
        "tag1",
        "tag2",
        "tag3"
      ],
      "ScreenshotEnabled": true,
      "ScreenshotFrequency": 4,
      "EnableDeepMono": false,
      "EnableDeepLua": false,
      "Monitor": false,
      "GPUProfileEnabled": true,
      "GPUProfileFrequency": 1000,
      "FrameLockEnabled": false,
      "FrameLockFrequency": 0,
      "ShareReport": true
    }
    '''

    # 更多API请详见 https://upr.unity.cn/api/swagger/index.html

/

UPR Desktop + Open API自动化测试文档

申请UPR Open API权限

请前往 “ Open API > App Key管理 ” 页面申请Open API权限。

image-home-page-login

审核通过后将获得App Id和App Secret用以调用UPR Open API。

image-home-page-login

新建测试

样例代码 (Python)
# -*-coding: utf-8-*-
import requests

API_ENDPOINT = 'https://upr.unity.cn/open-api'

# https://upr.unity.cn/projects
PROJECT_ID = '<PROJECT_ID>'  # 请填写 ProjectId

# 前往 https://upr.unity.cn/open-api 申请UPR Open App
AUTH = (
    '<APP_ID>',  # 请填写项目的 App ID
    '<APP_SECRET>'  # 请填写项目的 App Secret
)

def main():
    # 创建测试session
    session_request = { ... }
    resp = requests.post('%s/sessions' % API_ENDPOINT, auth=AUTH, json=session_request)
session_request的详细参数如下所示:

image-home-page-login

成功新建测试后的Response,如下所示:
通过返回的sessionId,使用UPR Desktop,可以以CLI的方式开始测试。

image-home-page-login

开始测试

*以下使用UPR Windows为例演示测试流程,UPR Mac操作流程类似,在此不作过多赘述。
UPR Windows程序支持以命令行的方式打开。
可以通过命令UPRDesktop.exe -h获取可以使用的命令行提示。

image-win-ui-help

UPRDesktop.exe -p <device_ip> -s <session_id>                          
<device_ip>为设备的IP地址,请确保测试设备和UPR Windows在一个局域网内。

image-win-upr-command-start

使用「ADB连接」,无需保证测试设备和UPR Windows在同一局域网内。

image-win-upr-command-start

使用ADB连接进行测试时,需要将待测设备解锁,使用数据线连接,并打开设备中的待测游戏,开始测试,链接UPR服务器。
如果使用数据线连接进行测试时,需要输入测试的游戏包名。
UPRDesktop.exe -p <device_ip> -s <session_id> -n <package_name>                           
<package_name>为待测试的游戏包名。
使用数据线连接进行测试时,如果输入测试的游戏包名,UPR Windows可以自动根据项目包名开启手机内的待测项目,并开始游戏。
使用ADB连接可以将处在不同网络环境下的安卓设备和电脑相连接进行测试,并改善数据传输速率,提高传输稳定性。

记录Tag、内存快照、对象快照

使用命令行记录对象快照/内存快照/Tag。

image-win-upr-command-start

结束测试

使用命令行关闭UPR Windows。该命令会将之前启动的UPRDesktop进程一并关闭。
UPRDesktop.exe --stop                    

获取测试结果

测试完成后,通过UPR Open API可以获取测试结果。

image-home-page-login

成功完成测试后的测试结果,如下所示:
包括:CPUDetails、GraphicOverviewAndGraphicBatching、HotSpotData、MemoryUsage、OverviewAndCPUPerformance、ResourceDetails等信息。

image-home-page-login

获取更多信息

使用UPR Open API,可以获取更多测试详情,包括Report详情、区间报告、frame详情、函数耗时与GC的统计信息、内存快照详情、内存快照对比、对象快照、对象快照对比等等。

image-home-page-login

image-home-page-login

更多UPR Open API请详见 Swagger UI

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值