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_GL 1
|
||||||
#define HAVE_ECORE_EVAS_DIRECTFB 1
|
#define HAVE_ECORE_EVAS_DIRECTFB 1
|
||||||
|
|
||||||
typedef enum
|
typedef enum _Ecore_Evas_Engine_Type
|
||||||
{
|
{
|
||||||
ECORE_EVAS_ENGINE_SOFTWARE_X11,
|
ECORE_EVAS_ENGINE_SOFTWARE_X11,
|
||||||
ECORE_EVAS_ENGINE_SOFTWARE_FB,
|
ECORE_EVAS_ENGINE_SOFTWARE_FB,
|
||||||
|
@ -70,12 +70,12 @@ typedef unsigned int Ecore_X_Window;
|
||||||
|
|
||||||
#ifndef _ECORE_DIRECTFB_H
|
#ifndef _ECORE_DIRECTFB_H
|
||||||
#define _ECORE_DIRECTFB_WINDOW_PREDEF
|
#define _ECORE_DIRECTFB_WINDOW_PREDEF
|
||||||
typedef void Ecore_DirectFB_Window;
|
typedef struct _Ecore_DirectFB_Window Ecore_DirectFB_Window;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _ECORE_EVAS_PRIVATE_H
|
#ifndef _ECORE_EVAS_PRIVATE_H
|
||||||
/* basic data types */
|
/* basic data types */
|
||||||
typedef void Ecore_Evas;
|
typedef struct _Ecore_Evas Ecore_Evas;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* module setup/shutdown calls */
|
/* module setup/shutdown calls */
|
||||||
|
|
|
@ -1812,6 +1812,29 @@ _ecore_evas_free(Ecore_Evas *ee)
|
||||||
ee->prop.cursor.file = NULL;
|
ee->prop.cursor.file = NULL;
|
||||||
ee->prop.cursor.object = NULL;
|
ee->prop.cursor.object = NULL;
|
||||||
ee->evas = 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);
|
if (ee->engine.func->fn_free) ee->engine.func->fn_free(ee);
|
||||||
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);
|
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
||||||
_ecore_evas_buffer_render(ee2);
|
_ecore_evas_buffer_render(ee2);
|
||||||
if (ee2->func.fn_post_render) ee2->func.fn_post_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)
|
if (ee->engine.buffer.image)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,8 +21,20 @@ static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL;
|
||||||
static void
|
static void
|
||||||
_ecore_evas_directfb_render(Ecore_Evas *ee)
|
_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);
|
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
|
||||||
updates = evas_render_updates(ee->evas);
|
updates = evas_render_updates(ee->evas);
|
||||||
if (updates)
|
if (updates)
|
||||||
|
@ -45,6 +57,8 @@ _ecore_evas_directfb_render(Ecore_Evas *ee)
|
||||||
}
|
}
|
||||||
evas_render_updates_free(updates);
|
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
|
static int
|
||||||
|
|
|
@ -229,6 +229,7 @@ _ecore_evas_idle_enter(void *data __UNUSED__)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
evas_norender(ee->evas);
|
evas_norender(ee->evas);
|
||||||
|
_ecore_evas_idle_timeout_update(ee);
|
||||||
}
|
}
|
||||||
if (_ecore_evas_fps_debug)
|
if (_ecore_evas_fps_debug)
|
||||||
{
|
{
|
||||||
|
|
|
@ -59,6 +59,8 @@
|
||||||
#include <Evas_Engine_Buffer.h>
|
#include <Evas_Engine_Buffer.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define IDLE_FLUSH_TIME 0.5
|
||||||
|
|
||||||
typedef struct _Ecore_Evas Ecore_Evas;
|
typedef struct _Ecore_Evas Ecore_Evas;
|
||||||
typedef struct _Ecore_Evas_Engine Ecore_Evas_Engine;
|
typedef struct _Ecore_Evas_Engine Ecore_Evas_Engine;
|
||||||
typedef struct _Ecore_Evas_Engine_Func Ecore_Evas_Engine_Func;
|
typedef struct _Ecore_Evas_Engine_Func Ecore_Evas_Engine_Func;
|
||||||
|
@ -163,6 +165,7 @@ struct _Ecore_Evas_Engine
|
||||||
Ecore_DirectFB_Window *window;
|
Ecore_DirectFB_Window *window;
|
||||||
} directfb;
|
} directfb;
|
||||||
#endif
|
#endif
|
||||||
|
Ecore_Timer *idle_flush_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Ecore_Evas
|
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_shutdown(void);
|
||||||
void _ecore_evas_fps_debug_rendertime_add(double t);
|
void _ecore_evas_fps_debug_rendertime_add(double t);
|
||||||
void _ecore_evas_free(Ecore_Evas *ee);
|
void _ecore_evas_free(Ecore_Evas *ee);
|
||||||
|
void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -148,6 +148,7 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
||||||
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
|
||||||
_ecore_evas_buffer_render(ee2);
|
_ecore_evas_buffer_render(ee2);
|
||||||
if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
|
if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
|
||||||
|
_ecore_evas_idle_timeout_update(ee2);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
|
if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
|
||||||
|
@ -328,6 +329,7 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
||||||
else
|
else
|
||||||
evas_norender(ee->evas);
|
evas_norender(ee->evas);
|
||||||
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
|
if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
|
||||||
|
_ecore_evas_idle_timeout_update(ee);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue