Ticket #1016: 0002-Implement-an-averaged-frequency-counter-to-get-a-mor.patch

File 0002-Implement-an-averaged-frequency-counter-to-get-a-mor.patch, 2.3 KB (added by sbte, 11 years ago)

100 frames average FPS patch

  • source/lib/frequency_filter.cpp

    From ff6816a1459248a46aceaa669928b6c6b9a4ebb7 Mon Sep 17 00:00:00 2001
    From: "Sven (Sbte)" <svenb.linux@gmail.com>
    Date: Sun, 24 Feb 2013 17:23:31 +0100
    Subject: Implement an averaged frequency counter to get a more stable FPS rate
    
    ---
     source/lib/frequency_filter.cpp | 16 +++++++++++-----
     1 file changed, 11 insertions(+), 5 deletions(-)
    
    diff --git a/source/lib/frequency_filter.cpp b/source/lib/frequency_filter.cpp
    index 4ae9905..a61837b 100644
    a b  
    2323#include "precompiled.h"
    2424#include "lib/frequency_filter.h"
    2525
    26 static const double errorTolerance = 0.05f;
     26static const double errorTolerance = 0.25;
    2727static const double sensitivity = 0.10;
    2828
    2929/**
    class FrequencyFilter : public IFrequencyFilter  
    192192public:
    193193    FrequencyFilter(double resolution, double expectedFrequency)
    194194        : m_frequencyEstimator(resolution), m_controller(expectedFrequency), m_iirFilter(sensitivity, expectedFrequency)
    195         , m_stableFrequency((int)expectedFrequency), m_smoothedFrequency(expectedFrequency)
     195        , m_stableFrequency((int)expectedFrequency), m_smoothedFrequency(expectedFrequency), m_averagedFrequency(expectedFrequency)
    196196    {
    197197    }
    198198
    public:  
    205205        const int bias = m_controller.ComputeBias(m_smoothedFrequency, frequency);
    206206        m_smoothedFrequency = m_iirFilter(frequency, bias);
    207207
     208        // Keep an averaged frequency over the last 100 calls
     209        const double difference = fabs(m_smoothedFrequency - m_averagedFrequency);
     210        if (difference > errorTolerance*m_averagedFrequency)
     211            m_averagedFrequency = m_smoothedFrequency;
     212        else
     213            m_averagedFrequency = (99.0 * m_averagedFrequency + m_smoothedFrequency) / 100.0;
     214
    208215        // allow the smoothed FPS to free-run until it is no longer near the
    209216        // previous stable FPS value. round up because values are more often
    210217        // too low than too high.
    211         const double difference = fabs(m_smoothedFrequency - m_stableFrequency);
    212         if(difference > errorTolerance*m_stableFrequency)
    213             m_stableFrequency = (int)(m_smoothedFrequency + 0.99);
     218        m_stableFrequency = (int)(m_averagedFrequency + 0.99);
    214219    }
    215220
    216221    virtual double SmoothedFrequency() const
    private:  
    230235
    231236    int m_stableFrequency;
    232237    double m_smoothedFrequency;
     238    double m_averagedFrequency;
    233239};
    234240
    235241