Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. public class DevicePerformanceTestController : MonoBehaviour
  7. {
  8. [SerializeField]
  9. private PerformanceChecker performanceChecker;
  10. [SerializeField]
  11. private float minFps = 30;
  12. [SerializeField]
  13. private float resolutionPercentageForTests = 1f;
  14. [SerializeField]
  15. private float lowestResolutionPercentage = 0.5f;
  16. [SerializeField]
  17. private List<int> minRamForQuality;
  18. [SerializeField]
  19. private string loadingPerformanceTestDescription;
  20.  
  21. private int currQualityIndex = 0;
  22. private int numbOfQualitySettings;
  23. private int deviceRam;
  24.  
  25. public static bool ShouldMakePerformanceBenchmark
  26. {
  27. get
  28. {
  29. #if DEVELOPMENT_BUILD || UNITY_EDITOR
  30. return GlobalSettings.PerformanceBenchmarkOnEveryDevelopmentRun;
  31. #else
  32. return !GamePrefs.DevicePerformanceTested;
  33. #endif
  34. }
  35. }
  36.  
  37. private void Awake()
  38. {
  39. if (!ShouldMakePerformanceBenchmark)
  40. {
  41. gameObject.SetActive(false);
  42. }
  43. }
  44.  
  45. private void Start()
  46. {
  47. deviceRam = SystemInfo.systemMemorySize;
  48. numbOfQualitySettings = QualitySettings.names.Length;
  49. performanceChecker.OnAverageFpsCalculated += OnFpsCalculated;
  50. ApplicationsSetup.LimitFramerate(false);
  51. ApplicationsSetup.SetResolution(resolutionPercentageForTests);
  52. performanceChecker.enabled = true;
  53. GUIManager.Instance.ShowLoadingPerformanceTest(numbOfQualitySettings * performanceChecker.TimeIntervalToCalculateFps, loadingPerformanceTestDescription);
  54. }
  55.  
  56. public static void SetStartingDeviceSettings()
  57. {
  58. ApplicationsSetup.LimitFramerate(true);
  59. ApplicationsSetup.SetResolution(1);
  60. PlayerSettings.Settings.qualityLevel = 0;
  61. QualitySettings.SetQualityLevel(0);
  62. PlayerSettingsIO.Save();
  63. }
  64.  
  65. private void OnFpsCalculated(float fps)
  66. {
  67. performanceChecker.enabled = false;
  68. if (fps >= minFps)
  69. {
  70. if (CanChangeQualityToNext())
  71. {
  72. ChangeQualitySettingsToNext();
  73. }
  74. else
  75. {
  76. SetFinalQuality(currQualityIndex, 1);
  77. }
  78. }
  79. else
  80. {
  81. int qualityLevelToSet = currQualityIndex > 0 ? currQualityIndex - 1 : 0;
  82. SetFinalQuality(qualityLevelToSet, currQualityIndex == 0 ? lowestResolutionPercentage : 1);
  83. }
  84. }
  85.  
  86. private void ChangeQualitySettingsToNext()
  87. {
  88. currQualityIndex++;
  89. QualitySettings.SetQualityLevel(currQualityIndex);
  90. performanceChecker.enabled = true;
  91. }
  92.  
  93. private bool CanChangeQualityToNext()
  94. {
  95. return currQualityIndex + 1 < numbOfQualitySettings && deviceRam > minRamForQuality[currQualityIndex + 1];
  96. }
  97.  
  98. private void SetFinalQuality(int qualityLevelToSet, float resPercentage)
  99. {
  100. if (QualitySettings.GetQualityLevel() != qualityLevelToSet)
  101. {
  102. QualitySettings.SetQualityLevel(qualityLevelToSet);
  103. }
  104. GamePrefs.DevicePerformanceTested = true;
  105. GamePrefs.MaxPrefferedQuality = qualityLevelToSet;
  106. GamePrefs.MaxResolutionPercentageForMaxQuality = resPercentage;
  107. PlayerSettings.Settings.qualityLevel = qualityLevelToSet;
  108. PlayerSettings.Settings.fpsLimited = true;
  109. ApplicationsSetup.LimitFramerate(true);
  110. ApplicationsSetup.SetResolution(resPercentage);
  111. PlayerSettingsIO.Save();
  112. GUIManager.Instance.LoadingScreenController.FillBarThenDisableLoading();
  113. AnalyticsController.PerformanceBenchmark();
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement