Implement X11 onscreen framerate counter. This FPS counter is disabled by default. Change-Id: Ida04352dece25a212cb678c9ceca4c31d654f373 Reviewed-on: https://swiftshader-review.googlesource.com/12128 Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Main/FrameBufferX11.cpp b/src/Main/FrameBufferX11.cpp index a065198..36ba38f 100644 --- a/src/Main/FrameBufferX11.cpp +++ b/src/Main/FrameBufferX11.cpp
@@ -15,6 +15,7 @@ #include "FrameBufferX11.hpp" #include "libX11.hpp" +#include "Timer.hpp" #include <sys/ipc.h> #include <sys/shm.h> @@ -140,6 +141,30 @@ } libX11->XSync(x_display, False); + + if(false) // Draw the framerate on screen + { + static double fpsTime = sw::Timer::seconds(); + static int framesSec = 0; + + double time = sw::Timer::seconds(); + double delta = time - fpsTime; + framesSec++; + + static double FPS = 0.0; + + if(delta > 1.0) + { + FPS = framesSec / delta; + + fpsTime = time; + framesSec = 0; + } + + char string[256]; + sprintf(string, "FPS: %.1f", FPS); + libX11->XDrawString(x_display, x_window, x_gc, 50, 50, string, strlen(string)); + } } }
diff --git a/src/Main/libX11.cpp b/src/Main/libX11.cpp index 9c056bf..f3723ff 100644 --- a/src/Main/libX11.cpp +++ b/src/Main/libX11.cpp
@@ -35,6 +35,7 @@ XCreateImage = (XImage *(*)(Display*, Visual*, unsigned int, int, int, char*, unsigned int, unsigned int, int, int))getProcAddress(libX11, "XCreateImage"); XCloseDisplay = (int (*)(Display*))getProcAddress(libX11, "XCloseDisplay"); XPutImage = (int (*)(Display*, Drawable, GC, XImage*, int, int, int, int, unsigned int, unsigned int))getProcAddress(libX11, "XPutImage"); + XDrawString = (int (*)(Display*, Drawable, GC, int, int, char*, int))getProcAddress(libX11, "XDrawString"); XShmQueryExtension = (Bool (*)(Display*))getProcAddress(libXext, "XShmQueryExtension"); XShmCreateImage = (XImage *(*)(Display*, Visual*, unsigned int, int, char*, XShmSegmentInfo*, unsigned int, unsigned int))getProcAddress(libXext, "XShmCreateImage");
diff --git a/src/Main/libX11.hpp b/src/Main/libX11.hpp index f9f88be..c188386 100644 --- a/src/Main/libX11.hpp +++ b/src/Main/libX11.hpp
@@ -39,6 +39,7 @@ XImage *(*XCreateImage)(Display *display, Visual *visual, unsigned int depth, int format, int offset, char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line); int (*XCloseDisplay)(Display *display); int (*XPutImage)(Display *display, Drawable d, GC gc, XImage *image, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height); + int (*XDrawString)(Display *display, Drawable d, GC gc, int x, int y, char *string, int length); Bool (*XShmQueryExtension)(Display *display); XImage *(*XShmCreateImage)(Display *display, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shminfo, unsigned int width, unsigned int height);