Add a fps_meter_ prefix to macros
[experiments/fps-meter.git] / fps-meter.c
index c66cb69..2d9ea6b 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <stdio.h>
-#include <time.h>
-
-#ifdef DEBUG
-#define dbg(...)                     \
-       do {                         \
-               printf(__VA_ARGS__); \
-               printf("\n");        \
-               fflush(stdout);      \
-       } while(0)
-#else
-#define dbg(...) do {} while(0)
-#endif
-
-#define NSEC_PER_SEC 1000000000
-
-#define timespecsub(a, b, result)                                \
-       do {                                                     \
-               (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;    \
-               (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \
-               if ((result)->tv_nsec < 0) {                     \
-                       --(result)->tv_sec;                      \
-                       (result)->tv_nsec += 1000000000;         \
-               }                                                \
-       } while(0)
+#include "fps-meter.h"
 
 int main(void)
 {
-       struct timespec time_start;
-       struct timespec time_end;
-       struct timespec elapsed;
-
+       struct fps_meter_stats stats;
        struct timespec tmp;
 
-       unsigned int frames = 0;
-       double nsecs = 0;
-       float fps;
-
+       fps_meter_init(&stats);
        while (1) {
-               clock_gettime(CLOCK_MONOTONIC, &time_start);
-               dbg("Start time: s: %ld, ns: %ld", time_start.tv_sec, time_start.tv_nsec);
-
                /* simulate some workload of about 60fps */
-               dbg("Doing some work, which takes about %d ns", NSEC_PER_SEC / 60);
+               fps_meter_dbg("Doing some work, which takes about %d ns", NSEC_PER_SEC / 60);
                tmp.tv_sec = 0;
                tmp.tv_nsec = NSEC_PER_SEC / 60;
                clock_nanosleep(CLOCK_MONOTONIC, 0, &tmp, NULL);
 
-               clock_gettime(CLOCK_MONOTONIC, &time_end);
-               dbg("End time: s: %ld, ns: %ld", time_end.tv_sec, time_end.tv_nsec);
-               timespecsub(&time_end, &time_start, &elapsed);
-               dbg("Elapsed s: %ld ns: %ld", elapsed.tv_sec, elapsed.tv_nsec);
-
-               frames++;
-               nsecs += (elapsed.tv_sec * NSEC_PER_SEC + elapsed.tv_nsec);
-               if (nsecs >= NSEC_PER_SEC) {
-                       /* 
-                        * if each frame takes less than a second, then just
-                        * printing 'frames' is enough, but if we want to
-                        * cover the case when a frame may take more than
-                        * a second, some calculations have to be done.
-                        */
-                       fps = frames / (nsecs / NSEC_PER_SEC);
-                       printf("(frames: %d, nsecs: %f) FPS: %.2f\n", frames, nsecs, fps);
-                       nsecs = 0;
-                       frames = 0;
-               }
+               fps_meter_update(&stats);
        }
 
        return 0;