123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- using System;
- using System.Diagnostics;
- using Unity.PerformanceTesting.Exceptions;
- using Unity.PerformanceTesting.Measurements;
- using Unity.PerformanceTesting.Runtime;
- using UnityEngine;
- using Object = UnityEngine.Object;
-
- namespace Unity.PerformanceTesting
- {
- /// <summary>
- /// Enables measuring of performance metrics during a performance test.
- /// </summary>
- public static class Measure
- {
- /// <summary>
- /// Saves provided value as a performance measurement.
- /// </summary>
- /// <param name="sampleGroup">The sample group to save the value to.</param>
- /// <param name="value">Value to be saved.</param>
- public static void Custom(SampleGroup sampleGroup, double value)
- {
- VerifyValue(sampleGroup.Name, value);
-
- var activeSampleGroup = PerformanceTest.GetSampleGroup(sampleGroup.Name);
- if (activeSampleGroup == null)
- {
- PerformanceTest.AddSampleGroup(sampleGroup);
- activeSampleGroup = sampleGroup;
- }
-
- activeSampleGroup.Samples.Add(value);
- }
-
- /// <summary>
- /// Saves provided value as a performance measurement.
- /// </summary>
- /// <param name="name">The name of the sample group to save the value to.</param>
- /// <param name="value">Value to be saved.</param>
- public static void Custom(string name, double value)
- {
- VerifyValue(name, value);
-
- var activeSampleGroup = PerformanceTest.GetSampleGroup(name);
- if (activeSampleGroup == null)
- {
- activeSampleGroup = new SampleGroup(name);
- PerformanceTest.AddSampleGroup(activeSampleGroup);
- }
-
- activeSampleGroup.Samples.Add(value);
- }
-
- static void VerifyValue(string name, double value)
- {
- if (double.IsNaN(value))
- throw new PerformanceTestException(
- $"Trying to record value which is not a number for sample group: {name}");
- }
-
- /// <summary>
- /// Measures execution time for the given scope as a single time.
- /// </summary>
- /// <param name="name">Name to use for the sample group.</param>
- /// <returns>IDisposable <see cref="ScopeMeasurement"/> on which you should call the <see cref="ScopeMeasurement.Dispose"/> method to stop measurement.</returns>
- public static ScopeMeasurement Scope(string name = "Time")
- {
- return new ScopeMeasurement(name);
- }
-
- /// <summary>
- /// Measures execution time for the given scope as a single time.
- /// </summary>
- /// <param name="sampleGroup">Sample group to use to save samples to.</param>
- /// <returns>IDisposable <see cref="ScopeMeasurement"/> on which you should call the <see cref="ScopeMeasurement.Dispose"/> method to stop measurement.</returns>
- public static ScopeMeasurement Scope(SampleGroup sampleGroup)
- {
- return new ScopeMeasurement(sampleGroup);
- }
-
- /// <summary>
- /// Measures profiler markers for the given scope.
- /// </summary>
- /// <param name="profilerMarkerLabels">List of profiler marker names.</param>
- /// <returns></returns>
- public static ProfilerMeasurement ProfilerMarkers(params string[] profilerMarkerLabels)
- {
- return new ProfilerMeasurement(profilerMarkerLabels);
- }
-
- /// <summary>
- /// Measures profiler markers for the given scope.
- /// </summary>
- /// <param name="sampleGroups">List of SampleGroups where the name matches the profiler marker to measure.</param>
- /// <returns></returns>
- public static ProfilerMeasurement ProfilerMarkers(params SampleGroup[] sampleGroups)
- {
- return new ProfilerMeasurement(sampleGroups);
- }
-
- /// <summary>
- /// Measures execution time for a method with given parameters.
- /// </summary>
- /// <param name="action"></param>
- /// <returns><see cref="MethodMeasurement"/>using a builder pattern to provide parameters. Call <see cref="ScopeMeasurement.Run"/> to start measurement.</returns>
- public static MethodMeasurement Method(Action action)
- {
- return new MethodMeasurement(action);
- }
-
- /// <summary>
- /// Measures frame times with given parameters.
- /// </summary>
- /// <returns><see cref="FramesMeasurement"/> using a builder pattern to provide parameters. Call <see cref="FramesMeasurement.Run"/> method to start measurement.</returns>
- public static FramesMeasurement Frames()
- {
- return new FramesMeasurement();
- }
- }
- }
|