X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FFrameCounter.hpp;fp=src%2Fapp%2FFrameCounter.hpp;h=16b6b4e5bd17152e7b88bc79ef2952bd91dbfc2e;hb=0e3f96ecb9ade07a7b831078fee025aff44d44d4;hp=069f622ce690246f5a770a75fc2f766d5d43dba4;hpb=3f35e70a6b66daf2ffd59590e98e2dd11e6eaabb;p=blank.git diff --git a/src/app/FrameCounter.hpp b/src/app/FrameCounter.hpp index 069f622..16b6b4e 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,38 +31,32 @@ 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; } - void Print(std::ostream &) const; - 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; };