diff --git a/tests/db.cpp b/tests/db.cpp
index 84fb7674686d5357ad8b68717f9b0140469788ac..62ebb75053f5ad478c67164040e5d67676223f22 100644 (file)
--- a/tests/db.cpp
+++ b/tests/db.cpp
#include <cstdio>
#include <algorithm>
+#include <chrono>
#include <xf86drm.h>
#include <xf86drmMode.h>
static void main_loop(Card& card);
-class OutputFlipHandler : PageFlipHandlerBase
+class OutputFlipHandler : private PageFlipHandlerBase
{
public:
OutputFlipHandler(Connector* conn, Crtc* crtc, DumbFramebuffer* fb1, DumbFramebuffer* fb2)
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;
int m_front_buf;
int m_bar_xpos;
+
+ int m_frame_num;
+ chrono::steady_clock::time_point m_t1;
};
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());
out->set_mode();
for(auto out : outputs)
- out->handle_page_flip(0, 0);
+ out->start_flipping();
main_loop(card);