public int EvaluateQuality(PerformanceMetricsData metrics)
    {
        if (metrics == null)
        {
            return(currentQualityIndex);
        }

        fpsEvaluations.Add(metrics.fpsCount);
        if (fpsEvaluations.Count <= EVALUATIONS_SIZE)
        {
            return(currentQualityIndex);
        }

        fpsEvaluations.RemoveAt(0);
        float performance = fpsEvaluations.Average() / targetFPS;

        int newCurrentQualityIndex = currentQualityIndex;

        if (performance < STAY_MARGIN)
        {
            newCurrentQualityIndex = Mathf.Max(0, currentQualityIndex - 1);
        }

        if (performance >= INCREASE_MARGIN)
        {
            newCurrentQualityIndex = Mathf.Min(qualitySettings.Length - 1, currentQualityIndex + 2); //We increase quality more aggressively than we reduce
        }
        if (newCurrentQualityIndex != currentQualityIndex)
        {
            ResetEvaluation();
        }

        currentQualityIndex = newCurrentQualityIndex;
        return(currentQualityIndex);
    }
    public int EvaluateQuality(PerformanceMetricsData metrics)
    {
        if (metrics == null)
        {
            return(currentQualityIndex);
        }

        //TODO refine this evaluation
        fpsEvaluations.Add(metrics.fpsCount);
        if (fpsEvaluations.Count <= EVALUATIONS_SIZE)
        {
            return(currentQualityIndex);
        }

        fpsEvaluations.RemoveAt(0);
        float average = fpsEvaluations.Average();

        int newCurrentQualityIndex = currentQualityIndex;

        if (average <= FPSEvaluation.WORSE)
        {
            newCurrentQualityIndex = Mathf.Max(0, currentQualityIndex - 1);
        }

        if (average >= FPSEvaluation.GREAT)
        {
            newCurrentQualityIndex = Mathf.Min(qualitySettings.Length - 1, currentQualityIndex + 1);
        }

        if (newCurrentQualityIndex != currentQualityIndex)
        {
            ResetEvaluation();
        }

        currentQualityIndex = newCurrentQualityIndex;
        return(currentQualityIndex);
    }