EAPI int E_EVENT_COMPOSITOR_RESIZE = -1;
EAPI int E_EVENT_COMPOSITOR_DISABLE = -1;
EAPI int E_EVENT_COMPOSITOR_ENABLE = -1;
+EAPI int E_EVENT_COMPOSITOR_FPS_UPDATE = -1;
//////////////////////////////////////////////////////////////////////////
#undef DBG
evas_object_resize(c->fps_bg, w, h);
evas_object_move(c->fps_fg, x + 4, y + 4);
}
+ else
+ {
+ if (c->calc_fps)
+ {
+ double fps = 0.0, dt;
+ double t = ecore_time_get();
+ int i, avg_range = 60;
+
+ dt = t - c->frametimes[avg_range - 1];
+
+ if (dt > 0.0) fps = (double)avg_range / dt;
+ else fps = 0.0;
+
+ if (fps > 60.0) fps = 60.0;
+ if (fps < 0.0) fps = 0.0;
+
+ for (i = avg_range; i >= 1; i--)
+ c->frametimes[i] = c->frametimes[i - 1];
+
+ c->frametimes[0] = t;
+ c->frameskip++;
+ if (c->frameskip >= avg_range)
+ {
+ c->frameskip = 0;
+ c->fps = fps;
+ ecore_event_add(E_EVENT_COMPOSITOR_FPS_UPDATE, NULL, NULL, NULL);
+ }
+ }
+ }
if (conf->lock_fps)
{
DBG("MANUAL RENDER...");
E_EVENT_COMP_OBJECT_ADD = ecore_event_type_new();
E_EVENT_COMPOSITOR_DISABLE = ecore_event_type_new();
E_EVENT_COMPOSITOR_ENABLE = ecore_event_type_new();
+ E_EVENT_COMPOSITOR_FPS_UPDATE = ecore_event_type_new();
ignores = eina_hash_pointer_new(NULL);
extern EAPI int E_EVENT_COMPOSITOR_DISABLE;
extern EAPI int E_EVENT_COMPOSITOR_ENABLE;
+extern EAPI int E_EVENT_COMPOSITOR_FPS_UPDATE;
struct _E_Comp
{
int animating;
double frametimes[122];
int frameskip;
+ double fps;
int nocomp_override; //number of times nocomp override has been requested
Ecore_Window block_win;
Eina_Bool nocomp_want : 1;
Eina_Bool saver : 1;
Eina_Bool shape_queue_blocked : 1;
+ Eina_Bool calc_fps : 1;
};