diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c index c4df7df69a..33a994cec4 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c @@ -2398,19 +2398,30 @@ _ecore_evas_fps_debug_shutdown(void) void _ecore_evas_fps_debug_rendertime_add(double t) { - if ((_ecore_evas_fps_debug_fd >= 0) && - (_ecore_evas_fps_rendertime_mmap)) + static double rtime = 0.0; + static double rlapse = 0.0; + static int frames = 0; + static int flapse = 0; + double tim; + + tim = ecore_time_get(); + rtime += t; + frames++; + if (rlapse == 0.0) { - unsigned int tm; - - tm = (unsigned int)(t * 1000000.0); - /* i know its not 100% theoretically guaranteed, but i'd say a write */ - /* of an int could be considered atomic for all practical purposes */ - /* oh and since this is cumulative, 1 second = 1,000,000 ticks, so */ - /* this can run for about 4294 seconds becore looping. if you are */ - /* doing performance testing in one run for over an hour... well */ - /* time to restart or handle a loop condition :) */ - *(_ecore_evas_fps_rendertime_mmap) += tm; + rlapse = tim; + flapse = frames; + } + else if ((tim - rlapse) >= 0.5) + { + printf("FRAME: %i, FPS: %3.1f, RTIME %3.0f%%\n", + frames, + (frames - flapse) / (tim - rlapse), + (100.0 * rtime) / (tim - rlapse) + ); + rlapse = tim; + flapse = frames; + rtime = 0.0; } } diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c index 8f63fb82f5..c342215825 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c @@ -55,9 +55,10 @@ static int _ecore_evas_directfb_idle_enter(void *data __UNUSED__) { Ecore_List2 *l; - double t1 = 0.; - double t2 = 0.; + double t1 = 0.0; + double t2 = 0.0; + if (!ecore_evases) return 1; if (_ecore_evas_fps_debug) { t1 = ecore_time_get(); diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_fb.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_fb.c index 78453c8b90..3421c68ebf 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_fb.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_fb.c @@ -205,9 +205,10 @@ static int _ecore_evas_idle_enter(void *data __UNUSED__) { Ecore_List2 *l; - double t1 = 0.; - double t2 = 0.; + double t1 = 0.0; + double t2 = 0.0; + if (!ecore_evases) return 1; if (_ecore_evas_fps_debug) { t1 = ecore_time_get(); diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_sdl.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_sdl.c index 965b1ae1ea..4c6f1db6ea 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_sdl.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_sdl.c @@ -235,9 +235,10 @@ static int _ecore_evas_idle_enter(void *data __UNUSED__) { Ecore_List2 *l; - double t1 = 0.; - double t2 = 0.; + double t1 = 0.0; + double t2 = 0.0; + if (!ecore_evases) return 1; #ifndef _WIN32 if (_ecore_evas_fps_debug) { diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c index a4bd1a364d..3a5dfe9e79 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c @@ -114,6 +114,7 @@ _ecore_evas_win32_idle_enter(void *data __UNUSED__) double t1 = 0.0; double t2 = 0.0; + if (!ecore_evases) return 1; if (_ecore_evas_fps_debug) { t1 = ecore_time_get(); diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c index dd39027770..047d01b13a 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c @@ -110,6 +110,7 @@ _ecore_evas_wince_idle_enter(void *data __UNUSED__) double t1 = 0.0; double t2 = 0.0; + if (!ecore_evases) return 1; if (_ecore_evas_fps_debug) { t1 = ecore_time_get(); diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c index 54819275ce..96d4afed6f 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c @@ -139,11 +139,12 @@ _ecore_evas_x_gl_window_new(Ecore_Evas *ee, Ecore_X_Window parent, int x, int y, #endif /* HAVE_ECORE_X_XCB */ #endif -static void +static int _ecore_evas_x_render(Ecore_Evas *ee) { - Evas_Rectangle *r; - Eina_List *updates, *l; + Evas_Rectangle *r; + Eina_List *updates, *l; + int rend = 0; #ifdef BUILD_ECORE_EVAS_BUFFER Eina_List *ll; Ecore_Evas *ee2; @@ -171,11 +172,9 @@ _ecore_evas_x_render(Ecore_Evas *ee) ecore_x_window_shape_mask_set(ee->engine.x.win, ee->engine.x.mask); if ((ee->alpha) && (updates)) ecore_x_window_shape_input_mask_set(ee->engine.x.win, ee->engine.x.mask); - } - if (updates) - { evas_render_updates_free(updates); _ecore_evas_idle_timeout_update(ee); + rend = 1; } } else @@ -280,6 +279,7 @@ _ecore_evas_x_render(Ecore_Evas *ee) { evas_render_updates_free(updates); _ecore_evas_idle_timeout_update(ee); + rend = 1; } } } @@ -295,6 +295,7 @@ _ecore_evas_x_render(Ecore_Evas *ee) ecore_x_window_shape_mask_set(ee->engine.x.win, ee->engine.x.mask); evas_render_updates_free(updates); _ecore_evas_idle_timeout_update(ee); + rend = 1; } } else @@ -306,12 +307,14 @@ _ecore_evas_x_render(Ecore_Evas *ee) if (ee->alpha) ecore_x_window_shape_input_mask_set(ee->engine.x.win, ee->engine.x.mask); _ecore_evas_idle_timeout_update(ee); + rend = 1; } } } else evas_norender(ee->evas); if (ee->func.fn_post_render) ee->func.fn_post_render(ee); + return rend; } static void @@ -1256,7 +1259,9 @@ _ecore_evas_x_idle_enter(void *data __UNUSED__) Ecore_List2 *l; double t1 = 0.0; double t2 = 0.0; + int rend = 0; + if (!ecore_evases) return 1; if (_ecore_evas_fps_debug) { t1 = ecore_time_get(); @@ -1266,13 +1271,14 @@ _ecore_evas_x_idle_enter(void *data __UNUSED__) Ecore_Evas *ee; ee = (Ecore_Evas *)l; - _ecore_evas_x_render(ee); + rend |= _ecore_evas_x_render(ee); } ecore_x_flush(); if (_ecore_evas_fps_debug) { t2 = ecore_time_get(); - _ecore_evas_fps_debug_rendertime_add(t2 - t1); + if (rend) + _ecore_evas_fps_debug_rendertime_add(t2 - t1); } return 1; }