< Summary

Class:DCL.SettingsCommon.SettingsControllers.AutoQualityCappedFPSController
Assembly:SettingsControllers
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/SettingsControllers/AutoQualityCappedFPSController.cs
Covered lines:22
Uncovered lines:1
Coverable lines:23
Total lines:58
Line coverage:95.6% (22 of 23)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AutoQualityCappedFPSController(...)0%110100%
EvaluateQuality(...)0%6.016093.75%
ResetEvaluation()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/SettingsControllers/AutoQualityCappedFPSController.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using System.Linq;
 3using DCL;
 4using UnityEngine;
 5
 6namespace DCL.SettingsCommon.SettingsControllers
 7{
 8    /// <summary>
 9    /// An implementation of an AutoQualityController for capped FPS
 10    /// </summary>
 11    public class AutoQualityCappedFPSController : IAutoQualityController
 12    {
 13        internal const int EVALUATIONS_SIZE = 5;
 14        internal const float INCREASE_MARGIN = 0.9f;
 15        internal const float STAY_MARGIN = 0.8f;
 16
 17        internal int targetFPS;
 18        internal int currentQualityIndex;
 19        internal readonly QualitySettingsData qualitySettings;
 20
 8221        internal readonly List<float> fpsEvaluations = new List<float>();
 22
 8223        public AutoQualityCappedFPSController(int targetFPS, int startIndex, QualitySettingsData qualitySettings)
 24        {
 8225            this.targetFPS = targetFPS;
 8226            currentQualityIndex = startIndex;
 8227            this.qualitySettings = qualitySettings;
 8228        }
 29
 30        public int EvaluateQuality(PerformanceMetricsData metrics)
 31        {
 932            if (metrics == null)
 033                return currentQualityIndex;
 34
 935            fpsEvaluations.Add(metrics.fpsCount);
 936            if (fpsEvaluations.Count <= EVALUATIONS_SIZE)
 537                return currentQualityIndex;
 38
 439            fpsEvaluations.RemoveAt(0);
 440            float performance = fpsEvaluations.Average() / targetFPS;
 41
 442            int newCurrentQualityIndex = currentQualityIndex;
 443            if (performance < STAY_MARGIN)
 244                newCurrentQualityIndex = Mathf.Max(0, currentQualityIndex - 1);
 45
 446            if (performance >= INCREASE_MARGIN)
 147                newCurrentQualityIndex = Mathf.Min(qualitySettings.Length - 1, currentQualityIndex + 2); //We increase q
 48
 449            if (newCurrentQualityIndex != currentQualityIndex)
 350                ResetEvaluation();
 51
 452            currentQualityIndex = newCurrentQualityIndex;
 453            return currentQualityIndex;
 54        }
 55
 15856        public void ResetEvaluation() { fpsEvaluations.Clear(); }
 57    }
 58}