Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class DevicePerformanceTestController : MonoBehaviour
- {
- [SerializeField]
- private PerformanceChecker performanceChecker;
- [SerializeField]
- private float minFps = 30;
- [SerializeField]
- private float resolutionPercentageForTests = 1f;
- [SerializeField]
- private float lowestResolutionPercentage = 0.5f;
- [SerializeField]
- private List<int> minRamForQuality;
- [SerializeField]
- private string loadingPerformanceTestDescription;
- private int currQualityIndex = 0;
- private int numbOfQualitySettings;
- private int deviceRam;
- public static bool ShouldMakePerformanceBenchmark
- {
- get
- {
- #if DEVELOPMENT_BUILD || UNITY_EDITOR
- return GlobalSettings.PerformanceBenchmarkOnEveryDevelopmentRun;
- #else
- return !GamePrefs.DevicePerformanceTested;
- #endif
- }
- }
- private void Awake()
- {
- if (!ShouldMakePerformanceBenchmark)
- {
- gameObject.SetActive(false);
- }
- }
- private void Start()
- {
- deviceRam = SystemInfo.systemMemorySize;
- numbOfQualitySettings = QualitySettings.names.Length;
- performanceChecker.OnAverageFpsCalculated += OnFpsCalculated;
- ApplicationsSetup.LimitFramerate(false);
- ApplicationsSetup.SetResolution(resolutionPercentageForTests);
- performanceChecker.enabled = true;
- GUIManager.Instance.ShowLoadingPerformanceTest(numbOfQualitySettings * performanceChecker.TimeIntervalToCalculateFps, loadingPerformanceTestDescription);
- }
- public static void SetStartingDeviceSettings()
- {
- ApplicationsSetup.LimitFramerate(true);
- ApplicationsSetup.SetResolution(1);
- PlayerSettings.Settings.qualityLevel = 0;
- QualitySettings.SetQualityLevel(0);
- PlayerSettingsIO.Save();
- }
- private void OnFpsCalculated(float fps)
- {
- performanceChecker.enabled = false;
- if (fps >= minFps)
- {
- if (CanChangeQualityToNext())
- {
- ChangeQualitySettingsToNext();
- }
- else
- {
- SetFinalQuality(currQualityIndex, 1);
- }
- }
- else
- {
- int qualityLevelToSet = currQualityIndex > 0 ? currQualityIndex - 1 : 0;
- SetFinalQuality(qualityLevelToSet, currQualityIndex == 0 ? lowestResolutionPercentage : 1);
- }
- }
- private void ChangeQualitySettingsToNext()
- {
- currQualityIndex++;
- QualitySettings.SetQualityLevel(currQualityIndex);
- performanceChecker.enabled = true;
- }
- private bool CanChangeQualityToNext()
- {
- return currQualityIndex + 1 < numbOfQualitySettings && deviceRam > minRamForQuality[currQualityIndex + 1];
- }
- private void SetFinalQuality(int qualityLevelToSet, float resPercentage)
- {
- if (QualitySettings.GetQualityLevel() != qualityLevelToSet)
- {
- QualitySettings.SetQualityLevel(qualityLevelToSet);
- }
- GamePrefs.DevicePerformanceTested = true;
- GamePrefs.MaxPrefferedQuality = qualityLevelToSet;
- GamePrefs.MaxResolutionPercentageForMaxQuality = resPercentage;
- PlayerSettings.Settings.qualityLevel = qualityLevelToSet;
- PlayerSettings.Settings.fpsLimited = true;
- ApplicationsSetup.LimitFramerate(true);
- ApplicationsSetup.SetResolution(resPercentage);
- PlayerSettingsIO.Save();
- GUIManager.Instance.LoadingScreenController.FillBarThenDisableLoading();
- AnalyticsController.PerformanceBenchmark();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement