forked from enlightenment/efl
add idle flush support - 0.5 secs of no rendering gets the engine to flush
all floating data. SVN revision: 30358
This commit is contained in:
parent
0a4199c841
commit
aa68331c2a
|
@ -53,7 +53,7 @@ extern "C" {
|
|||
#define HAVE_ECORE_EVAS_GL 1
|
||||
#define HAVE_ECORE_EVAS_DIRECTFB 1
|
||||
|
||||
typedef enum
|
||||
typedef enum _Ecore_Evas_Engine_Type
|
||||
{
|
||||
ECORE_EVAS_ENGINE_SOFTWARE_X11,
|
||||
ECORE_EVAS_ENGINE_SOFTWARE_FB,
|
||||
|
@ -70,12 +70,12 @@ typedef unsigned int Ecore_X_Window;
|
|||
|
||||
#ifndef _ECORE_DIRECTFB_H
|
||||
#define _ECORE_DIRECTFB_WINDOW_PREDEF
|
||||
typedef void Ecore_DirectFB_Window;
|
||||
typedef struct _Ecore_DirectFB_Window Ecore_DirectFB_Window;
|
||||
#endif
|
||||
|
||||
#ifndef _ECORE_EVAS_PRIVATE_H
|
||||
/* basic data types */
|
||||
typedef void Ecore_Evas;
|
||||
typedef struct _Ecore_Evas Ecore_Evas;
|
||||
#endif
|
||||
|
||||
/* module setup/shutdown calls */
|
||||
|
|
|
@ -1812,6 +1812,29 @@ _ecore_evas_free(Ecore_Evas *ee)
|
|||
ee->prop.cursor.file = NULL;
|
||||
ee->prop.cursor.object = NULL;
|
||||
ee->evas = NULL;
|
||||
if (ee->engine.idle_flush_timer)
|
||||
ecore_timer_del(ee->engine.idle_flush_timer);
|
||||
if (ee->engine.func->fn_free) ee->engine.func->fn_free(ee);
|
||||
free(ee);
|
||||
}
|
||||
|
||||
static int
|
||||
_ecore_evas_cb_idle_flush(void *data)
|
||||
{
|
||||
Ecore_Evas *ee;
|
||||
|
||||
ee = (Ecore_Evas *)data;
|
||||
evas_render_idle_flush(ee);
|
||||
ee->engine.idle_flush_timer = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_evas_idle_timeout_update(Ecore_Evas *ee)
|
||||
{
|
||||
if (ee->engine.idle_flush_timer)
|
||||
ecore_timer_del(ee->engine.idle_flush_timer);
|
||||
ee->engine.idle_flush_timer = ecore_timer_add(IDLE_FLUSH_TIME,
|
||||
_ecore_evas_cb_idle_flush,
|
||||
ee);
|
||||
}
|
||||
|
|
|
@ -114,6 +114,7 @@ _ecore_evas_buffer_render(Ecore_Evas *ee)
|
|||
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
||||
_ecore_evas_buffer_render(ee2);
|
||||
if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
|
||||
_ecore_evas_idle_timeout_update(ee2);
|
||||
}
|
||||
if (ee->engine.buffer.image)
|
||||
{
|
||||
|
|
|
@ -21,8 +21,20 @@ static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL;
|
|||
static void
|
||||
_ecore_evas_directfb_render(Ecore_Evas *ee)
|
||||
{
|
||||
Evas_List *updates;
|
||||
Evas_List *updates, *ll;
|
||||
|
||||
#ifdef BUILD_ECORE_EVAS_BUFFER
|
||||
for (ll = ee->sub_ecore_evas; ll; ll = ll->next)
|
||||
{
|
||||
Ecore_Evas *ee2;
|
||||
|
||||
ee2 = ll->data;
|
||||
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
||||
_ecore_evas_buffer_render(ee2);
|
||||
if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
|
||||
_ecore_evas_idle_timeout_update(ee2);
|
||||
}
|
||||
#endif
|
||||
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
|
||||
updates = evas_render_updates(ee->evas);
|
||||
if (updates)
|
||||
|
@ -45,6 +57,8 @@ _ecore_evas_directfb_render(Ecore_Evas *ee)
|
|||
}
|
||||
evas_render_updates_free(updates);
|
||||
}
|
||||
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
|
||||
_ecore_evas_idle_timeout_update(ee);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -229,6 +229,7 @@ _ecore_evas_idle_enter(void *data __UNUSED__)
|
|||
}
|
||||
else
|
||||
evas_norender(ee->evas);
|
||||
_ecore_evas_idle_timeout_update(ee);
|
||||
}
|
||||
if (_ecore_evas_fps_debug)
|
||||
{
|
||||
|
|
|
@ -59,6 +59,8 @@
|
|||
#include <Evas_Engine_Buffer.h>
|
||||
#endif
|
||||
|
||||
#define IDLE_FLUSH_TIME 0.5
|
||||
|
||||
typedef struct _Ecore_Evas Ecore_Evas;
|
||||
typedef struct _Ecore_Evas_Engine Ecore_Evas_Engine;
|
||||
typedef struct _Ecore_Evas_Engine_Func Ecore_Evas_Engine_Func;
|
||||
|
@ -163,6 +165,7 @@ struct _Ecore_Evas_Engine
|
|||
Ecore_DirectFB_Window *window;
|
||||
} directfb;
|
||||
#endif
|
||||
Ecore_Timer *idle_flush_timer;
|
||||
};
|
||||
|
||||
struct _Ecore_Evas
|
||||
|
@ -261,5 +264,6 @@ void _ecore_evas_fps_debug_init(void);
|
|||
void _ecore_evas_fps_debug_shutdown(void);
|
||||
void _ecore_evas_fps_debug_rendertime_add(double t);
|
||||
void _ecore_evas_free(Ecore_Evas *ee);
|
||||
|
||||
void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -148,6 +148,7 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
|||
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
||||
_ecore_evas_buffer_render(ee2);
|
||||
if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
|
||||
_ecore_evas_idle_timeout_update(ee2);
|
||||
}
|
||||
#endif
|
||||
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
|
||||
|
@ -328,6 +329,7 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
|||
else
|
||||
evas_norender(ee->evas);
|
||||
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
|
||||
_ecore_evas_idle_timeout_update(ee);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue