ProfileAnalysisAPITests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using NUnit.Framework;
  2. using UnityEditor.Performance.ProfileAnalyzer;
  3. using UnityEngine;
  4. public class ProfileAnalysisAPITests : ProfileAnalyzerBaseTest
  5. {
  6. [Test]
  7. public void ProfileAnalysis_SetRange_ModifiesFirstLastIndices([Values(0, 2)] int first, [Values(150, 300)] int last)
  8. {
  9. var analysis = new ProfileAnalysis();
  10. analysis.SetRange(first, last);
  11. Assert.IsTrue(first == analysis.GetFrameSummary().first);
  12. Assert.IsTrue(first == analysis.GetFrameSummary().minFrameIndex);
  13. Assert.IsTrue(first == analysis.GetFrameSummary().maxFrameIndex);
  14. Assert.IsTrue(last == analysis.GetFrameSummary().last);
  15. }
  16. [Test]
  17. public void ProfileAnalysis_UpdateSummary_AddsFramesToSummary()
  18. {
  19. var analysis = new ProfileAnalysis();
  20. var frameSummary = analysis.GetFrameSummary();
  21. Assert.IsTrue(0 == frameSummary.frames.Count);
  22. analysis.UpdateSummary(0, 0.1f);
  23. Assert.IsTrue(1 == frameSummary.frames.Count);
  24. }
  25. [Test]
  26. public void ProfileAnalysis_SetupMarkers_GeneratesExpectedValues()
  27. {
  28. var analysis = new ProfileAnalysis();
  29. var marker = new MarkerData("Test Marker");
  30. marker.presentOnFrameCount = 1;
  31. for (int i = 0; i < 10; ++i)
  32. {
  33. var frameTime = new FrameTime(i, 0.1f * i, 1);
  34. marker.frames.Add(frameTime);
  35. }
  36. analysis.AddMarker(marker);
  37. analysis.SetupMarkers();
  38. Assert.IsTrue(marker.count == 0);
  39. Assert.IsTrue(marker.firstFrameIndex == -1);
  40. Assert.IsTrue(marker.frames.Count == 10);
  41. Assert.IsTrue(marker.lastFrame == -1);
  42. Assert.IsTrue(marker.maxDepth == 0);
  43. Assert.IsTrue(marker.maxFrameIndex == 9);
  44. Assert.IsTrue(marker.maxIndividualFrameIndex == 0);
  45. Assert.IsTrue(marker.medianFrameIndex == 4);
  46. Assert.IsTrue(marker.minDepth == 0);
  47. Assert.IsTrue(marker.minFrameIndex == 0);
  48. Assert.IsTrue(marker.minIndividualFrameIndex == 0);
  49. Assert.IsTrue(marker.msAtMedian == 0);
  50. Assert.IsTrue(marker.msMean == 0);
  51. Assert.IsTrue(marker.msMinIndividual == float.MaxValue);
  52. Assert.IsTrue(marker.msMaxIndividual == float.MinValue);
  53. Assert.IsTrue(marker.msMin == 0);
  54. Assert.IsTrue(marker.msTotal == 0);
  55. Assert.IsTrue(marker.name == "Test Marker");
  56. Assert.IsTrue(marker.presentOnFrameCount == 1);
  57. //Handle floats "approximately"
  58. Assert.IsTrue(Mathf.Approximately(marker.msLowerQuartile, 0.2f));
  59. Assert.IsTrue(Mathf.Approximately(marker.msMax, 0.9f));
  60. Assert.IsTrue(Mathf.Approximately(marker.msUpperQuartile, 0.6f));
  61. Assert.IsTrue(Mathf.Approximately(marker.msMedian, 0.4f));
  62. }
  63. [Test]
  64. public void ProfileAnalysis_SetupMarkerBuckets_GeneratesExpectedValues()
  65. {
  66. var analysis = new ProfileAnalysis();
  67. var marker = new MarkerData("Test Marker");
  68. marker.presentOnFrameCount = 1;
  69. int range = 10;
  70. float offset = 0.000001f; // Without the offset rounding errors can shift a value into the preceeding bucket
  71. for (int i = 0; i <= range; ++i)
  72. {
  73. float value = ((float)i / (float)range);
  74. if (i != 0 && i != range)
  75. value += offset;
  76. var frameTime = new FrameTime(i, value, 1);
  77. marker.frames.Add(frameTime);
  78. }
  79. analysis.AddMarker(marker);
  80. analysis.SetupMarkers();
  81. analysis.SetupMarkerBuckets();
  82. Assert.IsTrue(marker.buckets[0] == 1);
  83. Assert.IsTrue(marker.buckets[1] == 0);
  84. Assert.IsTrue(marker.buckets[2] == 1);
  85. Assert.IsTrue(marker.buckets[3] == 0);
  86. Assert.IsTrue(marker.buckets[4] == 1);
  87. Assert.IsTrue(marker.buckets[5] == 0);
  88. Assert.IsTrue(marker.buckets[6] == 1);
  89. Assert.IsTrue(marker.buckets[7] == 0);
  90. Assert.IsTrue(marker.buckets[8] == 1);
  91. Assert.IsTrue(marker.buckets[9] == 0);
  92. Assert.IsTrue(marker.buckets[10] == 1);
  93. Assert.IsTrue(marker.buckets[11] == 0);
  94. Assert.IsTrue(marker.buckets[12] == 1);
  95. Assert.IsTrue(marker.buckets[13] == 0);
  96. Assert.IsTrue(marker.buckets[14] == 1);
  97. Assert.IsTrue(marker.buckets[15] == 0);
  98. Assert.IsTrue(marker.buckets[16] == 1);
  99. Assert.IsTrue(marker.buckets[17] == 0);
  100. Assert.IsTrue(marker.buckets[18] == 1);
  101. Assert.IsTrue(marker.buckets[19] == 1); // max value would fall into the next bucket but is clamped to here.
  102. }
  103. [Test]
  104. public void ProfileAnalysis_SetupFrameBuckets_GeneratesExpectedValues()
  105. {
  106. var analysis = new ProfileAnalysis();
  107. var marker = new MarkerData("Test Marker");
  108. marker.presentOnFrameCount = 1;
  109. for (int i = 0; i < 20; ++i)
  110. {
  111. analysis.UpdateSummary(i, 1.0f * i);
  112. }
  113. analysis.SetupFrameBuckets(20);
  114. var summary = analysis.GetFrameSummary();
  115. for (int i = 0; i < summary.buckets.Length; ++i)
  116. {
  117. Assert.IsTrue(1 == summary.buckets[i]);
  118. }
  119. }
  120. }