src/bin/utils/e_msg.c \
src/bin/utils/e_map.c \
src/bin/utils/e_util_video.c \
+src/bin/utils/e_fps_tracker.c \
src/bin/debug/e_info_server.c \
src/bin/debug/e_test_helper.c \
src/bin/debug/e_info_protocol.c \
--- /dev/null
+#include "e_fps_tracker_intern.h"
+
+#include <stdlib.h>
+#include <Ecore.h>
+
+struct _E_Fps_Tracker
+{
+ double fps;
+ double old_fps;
+ double frametime;
+ double time;
+ double lapse;
+ int cframes;
+ int flapse;
+};
+
+E_Fps_Tracker *
+e_fps_tracker_create(void)
+{
+ E_Fps_Tracker *tracker;
+
+ tracker = calloc(1, sizeof(*tracker));
+ if (!tracker)
+ return NULL;
+
+ return tracker;
+}
+
+void
+e_fps_tracker_update(E_Fps_Tracker *tracker)
+{
+ double dt;
+ double tim;
+
+ tim = ecore_time_get();
+
+ dt = tim - tracker->frametime;
+
+ tracker->frametime = tim;
+ tracker->time += dt;
+ tracker->cframes++;
+
+ if (tracker->lapse == 0.0)
+ {
+ tracker->lapse = tim;
+ tracker->flapse = tracker->cframes;
+ }
+ else if ((tim - tracker->lapse) >= 0.5)
+ {
+ tracker->fps = (tracker->cframes - tracker->flapse) /
+ (tim - tracker->lapse);
+ tracker->lapse = tim;
+ tracker->flapse = tracker->cframes;
+ tracker->time = 0.0;
+ }
+}
+
+bool
+e_fps_tracker_fps_get(E_Fps_Tracker *tracker, double *fps)
+{
+ if (tracker->old_fps == tracker->fps)
+ return false;
+
+ if (tracker->fps > 0.0)
+ {
+ *fps = tracker->fps;
+ tracker->old_fps = tracker->fps;
+ return true;
+ }
+
+ return false;
+}
+
+void
+e_fps_tracker_destroy(E_Fps_Tracker *tracker)
+{
+ free(tracker);
+}
+
--- /dev/null
+#ifndef E_FPS_TRACKER_INTERN_H
+#define E_FPS_TRACKER_INTERN_H
+
+#include <stdbool.h>
+
+typedef struct _E_Fps_Tracker E_Fps_Tracker;
+
+/**
+ * Creates an instance of E_Fps_Tracker
+ */
+E_Fps_Tracker *e_fps_tracker_create(void);
+
+/**
+ * Updates the FPS tracker
+ *
+ * This function updates the FPS tracker based on current time.
+ */
+void e_fps_tracker_update(E_Fps_Tracker *tracker);
+
+/**
+ * Gets the current FPS value
+ *
+ * This function returns current FPS value from the tracker.
+ */
+bool e_fps_tracker_fps_get(E_Fps_Tracker *tracker, double *fps);
+
+/**
+ * Destroys an instance of E_Fps_Tracker
+ */
+void e_fps_tracker_destroy(E_Fps_Tracker *tracker);
+
+#endif