[Testing] Unity性能测试

27 篇文章 4 订阅
1 篇文章 0 订阅

英文原文:https://medium.com/@terence410/unity-performance-test-e80ee3cd64a7

没有什么比光速更快

在这里插入图片描述

阅读

它能实现什么

  • 与单元测试集成
  • 记录 FPS、Ram、Draw call 等
  • 与Profiler集成,可以获得单个元素的执行时间

如何启用性能测试

  • 打开 /YourProject/Packages/manifest.json
  • 添加以下内容

{
“dependencies”: {

},
“testables”: [
“com.unity.test-framework.performance”
]

  • 创建一个文件夹 Assets/Tests
  • 创建一个 assembly definition
  • 选中“测试程序集”框并在程序集定义引用中选择“Unity.PerformanceTesting”。选择“任何平台”

在这里插入图片描述

  • 创建测试脚本:Create > Testing > C# Test Script
  • 打开 Window > General > Test Runner
  • 打开 Window > Analysis > Performance Test Report

测试脚本

请注意,Profiler 数据只能用于其自己的命名范围。例如,您无法测量两个不同范围的代码的“PlayerLocal”,请尝试为此目的创建两个不同的测试用例。

using System.Collections;
using NUnit.Framework;
using Unity.PerformanceTesting;
using UnityEngine;
using UnityEngine.Profiling;
using UnityEngine.SceneManagement;

// 为 test 测试定义自定义变量
[TestFixture(1)]
public class PerformanceTest
{
    private int _value;

    public PerformanceTest(int value)
    {
        _value = value;
    }

    [PerformanceUnityTest]
    public IEnumerator SampleTest()
    {
        // 它转到组名称“Time”
		// 测量一个方法的执行时间(测量10次,使用5次测量的平均值)
        Measure.Method(() =>
            {
                for (int i = 0; i < 1000000; i++)
                {
                }
            })
            .MeasurementCount(10)
            .IterationsPerMeasurement(5)
            .Run();


        // 它转到组名称“Time”
		// 测量10 帧的执行时间,等待 5 帧预热
        yield return Measure.Frames()
            .WarmupCount(5)
            //.ProfilerMarkers(groupDefinitions) // 如果我们只想测量没有记录帧的分析器
            //.DontRecordFrametime()
            .MeasurementCount(11)
            .Run();

        // 测量所有帧的执行时间
        using (Measure.Frames().Scope(new SampleGroupDefinition("Group 1")))
        {
            // your code
            yield return null;
            yield return null;
        }

        // 测量分析器数据
        SampleGroupDefinition[] groupDefinitions =
        {
            new SampleGroupDefinition("PlayerLoop"),
            new SampleGroupDefinition("Camera.Render"),
        };
        using (Measure.ProfilerMarkers(groupDefinitions))
        {
            for (var i = 0; i < 60; i++)
            {
                yield return null;
            }
        }

        // 测量内存
        var allocated = new SampleGroupDefinition("TotalAllocatedMemory", SampleUnit.Megabyte);
        var reserved = new SampleGroupDefinition("TotalReservedMemory", SampleUnit.Megabyte);
        for (var i = 0; i < 60; i++)
        {
            Measure.Custom(allocated, Profiler.GetTotalAllocatedMemoryLong() / 1048576f);
            Measure.Custom(reserved, Profiler.GetTotalReservedMemoryLong() / 1048576f);
            yield return null;
        }

        // 加载场景
        using (Measure.Scope(new SampleGroupDefinition("Group 3")))
        {
            SceneManager.LoadScene("Assets/TestPlayMode/TestScene2.unity");
        }

        // 测量对象的实例
        using (Measure.Scope(new SampleGroupDefinition("Group 4")))
        {
            var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            for (var i = 0; i < 5000; i++)
            {
                UnityEngine.Object.Instantiate(cube);
            }
        }

        yield return null;
    }
}

结果样本

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值