< Summary

Class: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:56
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 DCL.SettingsData;
 5using UnityEngine;
 6
 7/// <summary>
 8/// An implementation of an AutoQualityController for capped FPS
 9/// </summary>
 10public class AutoQualityCappedFPSController : IAutoQualityController
 11{
 12    internal const int EVALUATIONS_SIZE = 5;
 13    internal const float INCREASE_MARGIN = 0.9f;
 14    internal const float STAY_MARGIN = 0.8f;
 15
 16    internal int targetFPS;
 17    internal int currentQualityIndex;
 18    internal readonly QualitySettingsData qualitySettings;
 19
 3920    internal readonly List<float> fpsEvaluations = new List<float>();
 21
 3922    public AutoQualityCappedFPSController(int targetFPS, int startIndex, QualitySettingsData qualitySettings)
 23    {
 3924        this.targetFPS = targetFPS;
 3925        currentQualityIndex = startIndex;
 3926        this.qualitySettings = qualitySettings;
 3927    }
 28
 29    public int EvaluateQuality(PerformanceMetricsData metrics)
 30    {
 931        if (metrics == null)
 032            return currentQualityIndex;
 33
 934        fpsEvaluations.Add(metrics.fpsCount);
 935        if (fpsEvaluations.Count <= EVALUATIONS_SIZE)
 536            return currentQualityIndex;
 37
 438        fpsEvaluations.RemoveAt(0);
 439        float performance = fpsEvaluations.Average() / targetFPS;
 40
 441        int newCurrentQualityIndex = currentQualityIndex;
 442        if (performance < STAY_MARGIN)
 243            newCurrentQualityIndex = Mathf.Max(0, currentQualityIndex - 1);
 44
 445        if (performance >= INCREASE_MARGIN)
 146            newCurrentQualityIndex = Mathf.Min(qualitySettings.Length - 1, currentQualityIndex + 2); //We increase quali
 47
 448        if (newCurrentQualityIndex != currentQualityIndex)
 349            ResetEvaluation();
 50
 451        currentQualityIndex = newCurrentQualityIndex;
 452        return currentQualityIndex;
 53    }
 54
 7455    public void ResetEvaluation() { fpsEvaluations.Clear(); }
 56}