diff options
-rw-r--r-- | tests/db.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/tests/db.cpp b/tests/db.cpp index c72d121..62ebb75 100644 --- a/tests/db.cpp +++ b/tests/db.cpp @@ -1,5 +1,6 @@ #include <cstdio> #include <algorithm> +#include <chrono> #include <xf86drm.h> #include <xf86drmMode.h> @@ -14,7 +15,7 @@ using namespace kms; static void main_loop(Card& card); -class OutputFlipHandler : PageFlipHandlerBase +class OutputFlipHandler : private PageFlipHandlerBase { public: OutputFlipHandler(Connector* conn, Crtc* crtc, DumbFramebuffer* fb1, DumbFramebuffer* fb2) @@ -38,8 +39,30 @@ public: ASSERT(r == 0); } + void start_flipping() + { + m_t1 = std::chrono::steady_clock::now(); + m_frame_num = 0; + queue_next(); + } + +private: void handle_page_flip(uint32_t frame, double time) { + ++m_frame_num; + + if (m_frame_num % 100 == 0) { + auto t2 = std::chrono::steady_clock::now(); + std::chrono::duration<float> fsec = t2 - m_t1; + printf("Output %d: fps %f\n", m_connector->idx(), 100.0 / fsec.count()); + m_t1 = t2; + } + + queue_next(); + } + + void queue_next() + { m_front_buf = (m_front_buf + 1) % 2; const int bar_width = 20; @@ -86,6 +109,9 @@ private: int m_front_buf; int m_bar_xpos; + + int m_frame_num; + chrono::steady_clock::time_point m_t1; }; int main() @@ -119,7 +145,7 @@ int main() out->set_mode(); for(auto out : outputs) - out->handle_page_flip(0, 0); + out->start_flipping(); main_loop(card); |