{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} 8. Performance Tests | Test Framework | 1.3.9
docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    8. Performance Tests

    Learning Objectives

    One final thing we'll explore is a package that extends Unity Test Framework with Performance Tests.

    Exercise

    The Performance Testing package can be used to measure performance in our game. This is a great tool if we want to track various regressions/progressions that happen over time in our project. In this example, you'll learn how to create a test that measures game average frames.

    1. LostCrypt does not include the Performance Testing package installed by default. Install it by following these instructions.
    2. Add the package as a dependency to the project manifest.
    3. When the package is installed, add a reference to Unity.PerformanceTesting in your PlayModeTests assembly definition to access the performance testing APIs.
    4. Create a new C# class under Assets/Tests/PlayModeTests called PerformanceTests.cs.

    You're now ready to complete your objective. In PerformanceTests.cs create a new function called MainScene_MeasureAverageFrames(). In this function move your character to the wand position and wait until the wand pickup effect is over. During all that time, measure the frames.

    Bonus

    • Try to measure the average FPS in LostCrypt. You might need to use Time.deltaTime from UnityEngine API and Measure.Custom from the Performance Testing package API.

    Hints

    • The first handful of frames after loading Scene are usually unstable, let's utilize the Measure.Frames().Scope() API to measure them into a separate scope.
    • After your test finishes, performance results can be viewed under Window > Analysis > Performance Test Report or you can even hook into results using Callback API.

    Solution

    PerformanceTests.cs

    using System.Collections;
    using Unity.PerformanceTesting;
    using UnityEngine;
    using UnityEngine.TestTools;
    using UnityEngine.SceneManagement;
    
    public class PerformanceTests
    {
        private Transform _characterTransform;
        private float _wandLocation = 21.080f;
            
        [UnityTest, Performance]
        public IEnumerator MainScene_MeasureAverageFrames()
        {
            SceneManager.LoadScene("Assets/Scenes/Main.unity", LoadSceneMode.Single);
            using (Measure.Frames().Scope("Frames.MainSceneOnLoad.Unstable"))
            {
                for (var i = 0; i < 25; i++)
                {
                    yield return null;
                }
            }
    
            using (Measure.Frames().Scope("Frames.MainSceneGameplay"))
            {
                yield return GoRight();
                while (GetCurrentCharacterPosition() <= _wandLocation)
                {
                    yield return null;
                }
    
                StopMoving();
                yield return new WaitForSeconds(15);
            }
        }
    
        private float GetCurrentCharacterPosition()
        {
            // Get Main character's Transform which is used to manipulate position.
            if (_characterTransform == null)
            {
                _characterTransform = GameObject.Find("Sara Variant").transform;
            }
    
            return _characterTransform.position.x;
        }
    
        private IEnumerator GoRight()
        {
            TestInputControl.MoveLeft = false;
            yield return null;
            TestInputControl.MoveRight = true;
        }
    
        private void StopMoving()
        {
            TestInputControl.MoveRight = false;
            TestInputControl.MoveLeft = false;
        }
    }
    

    Bonus Solution

    Measure.Custom("FPS", (int)(1f / Time.deltaTime));

    In This Article
    Back to top
    Copyright © 2023 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)