]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android/external-libkmsxx.git/blobdiff - tests/db.cpp
add CMY and WB to test pattern
[android/external-libkmsxx.git] / tests / db.cpp
index 84fb7674686d5357ad8b68717f9b0140469788ac..62ebb75053f5ad478c67164040e5d67676223f22 100644 (file)
@@ -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,7 +39,29 @@ 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;
 
@@ -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()
@@ -106,8 +132,8 @@ int main()
 
                auto mode = conn->get_default_mode();
 
-               auto fb1 = new DumbFramebuffer(card, mode.hdisplay, mode.vdisplay, "XR24");
-               auto fb2 = new DumbFramebuffer(card, mode.hdisplay, mode.vdisplay, "XR24");
+               auto fb1 = new DumbFramebuffer(card, mode.hdisplay, mode.vdisplay, PixelFormat::XRGB8888);
+               auto fb2 = new DumbFramebuffer(card, mode.hdisplay, mode.vdisplay, PixelFormat::XRGB8888);
 
                printf("conn %u, crtc %u, fb1 %u, fb2 %u\n", conn->id(), crtc->id(), fb1->id(), fb2->id());
 
@@ -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);