Performance Testing Extensionを用いてUnityで実機でパフォーマンス計測をおこなう

Unity Test RunnerPerformance Testing Extension for Unity Test Frameworkを利用して、実機でパフォーマンス計測を行う方法について紹介します。

概要

Performance Testing Extension for Unity Test FrameworkUnity Test Runner上でパフォーマンス計測を行うためのライブラリで、特定の属性(PerformanceAttribute)を付与したテストに対してパフォーマンスを計測し、その結果を集計して結果をわかりやすく表示します。

さらにUnity Test Runnerにはテストを実機上で実行するための機能があります。これを組み合わせることで実機上でパフォーマンスを計測することができます。

パッケージのインストール

まず今回利用する「Performance Testing API」パッケージをインストールします。インストール手順は下記のとおりです。

  1. Packages以下に格納されているmanifest.jsonをテキストエディタなどで開きます
  2. dependencies項目に"com.unity.test-framework.performance": "2.8.0-preview",を追記します
    {
      "dependencies": {
        "com.unity.test-framework.performance": "2.8.0-preview",
        "com.unity.2d.animation": "5.0.5",
        "com.unity.2d.pixel-perfect": "4.0.1",
  3. manifest.jsonを保存してUnityを開くと、パッケージがインストールされます

「メニューのWindow > Package Manager」の「In Project」を開いて、下記のように「Performance testing API」の項目が入っていればインストールが成功です。

2021 09 24 02 27 50

テスト用のアセンブリの作成

テストを記述するには(Unity Test Runnerを利用するには)テスト用のアセンブリを作成してテストに必要なアセンブリを参照する必要があります。 具体的にはAssembly Definitionを定義して、そのAssembly Definition References内で UnityEngine.TestRunner を参照し、更にnunit.framework.dllを Assembly Referencesに追加します。

Unityでは上記を「Project Viewで右クリック > Create > Testing > Tests Assembly Folder」を実行すると、テスト用を格納するためのフォルダ及びasmdefを生成します。

2021 09 24 03 40 51

さらに「Performance testing Extension」を利用するために Assembly Definition Referencesに Unity.PerformanceTesting を追加します。

作成されたテスト用のasmdefにUnity.PerformanceTestingを追加

作成されたテスト用のasmdefにUnity.PerformanceTestingを追加

これで「Performance testing Extension」を利用する準備が整いました。

パフォーマンス計測用のテストをかく

先程作成したフォルダ内にパフォーマンス計測スクリプトを記述していきます。今回は特定のメソッド(アクション)のパフォーマンス計測を行ってみます。また実機上で動作させることを前提にしているので「Play Mode」テストを記述します。

テストを記述するにはメソッドを定義してTestまたはUnityTest属性をします。合わせてPerformance属性を指定すると「Performance testing API」がそのテストがパフォーマンスを計測する対象であることを認識します。

特定メソッドのパフォーマンス計測にはUnity.PerformanceTesting.Measure.Methodを利用します。Measure.Methodに計測したいメソッドを渡して、Runを実行することでパフォーマンス計測が行えます。具体的には下記のように記述します。

using NUnit.Framework;
using Unity.PerformanceTesting;
using UnityEngine;

public class HelloPerformanceCheck
{
    [Test, Performance]
    public void FirstPerformanceCheck()
    {
        var a = Vector2.one;
        var b = Vector2.zero;

        Measure.Method(() =>
        {
            Vector2.MoveTowards(a, b, 0.5f);
            Vector2.ClampMagnitude(a, 0.5f);
            Vector2.Reflect(a, b);
            Vector2.SignedAngle(a, b);
        })
            .Run();
    }
}

あとはUnity Test Runnerを実行することでパフォーマンスを計測できます。「メニューのWindow > General > Test Runner」でTest Runnerウインドウを起動して、画面左上の「Run All」ないし計測したいテストを単体で実行することでテストを実行しておきます。

Test Runnerを起動してテストを実行する

Test Runnerを起動してテストを実行する

結果を確認するには「メニューWindow > Analysis > Performance Test Report」でTest Reportウインドウを開きます。「Test View」内に集計したテストとその結果が表示されています。またそれぞれ選択すると「Sample Group View」に計測結果の詳細(パフォーマンス計測は通常複数回メソッドを実行して、その平均や分散を集計しますがその内訳)などが確認できます。

2021 09 24 04 08 29

パフォーマンス計測を実機上で行う

最後に、上記のパフォーマンス計測をiOSやAndroidなどの実機上で行います。

前述の通りUnity Test RunnerにはPlay Mode Testsを実機上で行う機能が備わっています。先程のTest Runnerウインドウ画面右上の「Run All Tests」をクリックすることで実機でテストが実行でき、そのテストのパフォーマンスの集計結果をTest Reportウインドウから確認できます。

テストを実行する実機を切り替えるには、「メニューのFile > Build Settings」でBuild Settingsウインドウを開いて、画面左のPlatformで実行したいプラットフォームをクリックして画面右下の「Switch Platform」をクリックします。

2021 09 24 04 30 50

すると、下図のようにTest Reportウインドウの画面右上の「Run All Tests」のカッコ内が実行したいプラットフォームに切り替わっています。あとはこれをクリックすることで実機用のビルドが作成され、対象の実機へアプリがインストールされてテストが実行されてパフォーマンスの集計までを自動で行ってくれます。

2021 09 24 04 31 49

このへんはBuild Settingsウインドウの「Build And Run」と同じような挙動で、PCに繋いでいる端末に対して自動で実行されますが、iOSの場合は開発者端末でないと実行が行われないなどプラットフォームによって挙動が異なります。詳しくはこちらのUnity Test RunnerのPlay Mode testsを実機上で実行する #UniteTokyo - やらなイカ? が参考になります。

参考