X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FFrameCounter.hpp;h=9364e2e3c4e46b11af7e7fa7c9af2f08ff0f1433;hb=6513b55584093a86ce1e369e054263dd75c295c8;hp=069f622ce690246f5a770a75fc2f766d5d43dba4;hpb=5c295a495e02b4987b63c682406f5f29402c00da;p=blank.git diff --git a/src/app/FrameCounter.hpp b/src/app/FrameCounter.hpp index 069f622..9364e2e 100644 --- a/src/app/FrameCounter.hpp +++ b/src/app/FrameCounter.hpp @@ -9,6 +9,18 @@ namespace blank { class FrameCounter { +public: + template + struct Frame { + T handle = T(0); + T update = T(0); + T render = T(0); + T running = T(0); + T waiting = T(0); + T total = T(0); + }; + + public: void EnterFrame() noexcept; void EnterHandle() noexcept; @@ -19,12 +31,8 @@ public: void ExitRender() noexcept; void ExitFrame() noexcept; - float AvgHandle() const noexcept { return avg.handle; } - float AvgUpdate() const noexcept { return avg.update; } - float AvgRender() const noexcept { return avg.render; } - float AvgFrame() const noexcept { return avg.total; } - float AvgRunning() const noexcept { return avg.handle + avg.update + avg.render; } - float AvgWaiting() const noexcept { return avg.total - AvgRunning(); } + const Frame &Peak() const noexcept { return peak; } + const Frame &Average() const noexcept { return avg; } bool Changed() const noexcept { return changed; } @@ -33,24 +41,24 @@ public: private: int Tick() noexcept; + void Accumulate() noexcept; + void Push() noexcept; + private: static constexpr int NUM_FRAMES = 32; static constexpr float factor = 1.0f / float(NUM_FRAMES); - template - struct Frame { - T handle = T(0); - T update = T(0); - T render = T(0); - T total = T(0); - }; - Uint32 last_enter = 0; Uint32 last_tick = 0; int cur_frame = 0; - Frame running = Frame{}; + Frame current = Frame{}; + Frame sum = Frame{}; + Frame max = Frame{}; + + Frame peak = Frame{}; Frame avg = Frame{}; + bool changed = false; };