loose syncing option. in reality it will work fine. but not clean.

SVN revision: 45776
This commit is contained in:
Carsten Haitzler 2010-02-01 14:38:00 +00:00
parent 1646ce1042
commit a67d3b8484
4 changed files with 52 additions and 21 deletions

View File

@ -38,7 +38,6 @@ struct _E_Comp
int render_overflow;
Eina_Bool gl : 1;
Eina_Bool efl_sync : 1;
Eina_Bool grabbed : 1;
};
@ -317,8 +316,14 @@ _e_mod_comp_pre_swap(void *data, Evas *e)
{
E_Comp *c = data;
// ecore_x_ungrab();
c->grabbed = 0;
if (_comp_mod->conf->grab)
{
if (c->grabbed)
{
ecore_x_ungrab();
c->grabbed = 0;
}
}
}
static int
@ -327,13 +332,16 @@ _e_mod_comp_cb_update(E_Comp *c)
E_Comp_Win *cw;
Eina_List *new_updates = NULL; // for failed pixmap fetches - get them next frame
Eina_List *update_done = NULL;
// ecore_x_grab();
// ecore_x_sync();
c->grabbed = 1;
if (_comp_mod->conf->grab)
{
ecore_x_grab();
ecore_x_sync();
c->grabbed = 1;
}
EINA_LIST_FREE(c->updates, cw)
{
if (c->efl_sync)
if (_comp_mod->conf->efl_sync)
{
if (((cw->counter) && (cw->drawme)) || (!cw->counter))
{
@ -352,17 +360,20 @@ _e_mod_comp_cb_update(E_Comp *c)
}
if (_comp_mod->conf->lock_fps)
ecore_evas_manual_render(c->ee);
if (c->efl_sync)
if (_comp_mod->conf->efl_sync)
{
EINA_LIST_FREE(update_done, cw)
{
ecore_x_sync_counter_inc(cw->counter, 1);
}
}
if (c->grabbed)
if (_comp_mod->conf->grab)
{
c->grabbed = 0;
// ecore_x_ungrab();
if (c->grabbed)
{
c->grabbed = 0;
ecore_x_ungrab();
}
}
if (new_updates) _e_mod_comp_render_queue(c);
c->updates = new_updates;
@ -698,9 +709,10 @@ _e_mod_comp_win_show(E_Comp_Win *cw)
eina_hash_add(borders, e_util_winid_str_get(cw->bd->client.win), cw);
cw->dfn = e_object_delfn_add(E_OBJECT(cw->bd),
_e_mod_comp_object_del, cw);
if (cw->c->efl_sync)
if (_comp_mod->conf->efl_sync)
{
if (_e_mod_comp_win_is_borderless(cw))
if (_e_mod_comp_win_is_borderless(cw) ||
(_comp_mod->conf->loose_sync))
{
counter = ecore_x_e_comp_sync_counter_get(cw->bd->client.win);
if (counter)
@ -790,7 +802,7 @@ _e_mod_comp_win_hide(E_Comp_Win *cw)
ecore_timer_del(cw->update_timeout);
cw->update_timeout = NULL;
}
if (cw->c->efl_sync)
if (_comp_mod->conf->efl_sync)
{
if ((cw->bd) && (cw->counter))
ecore_x_e_comp_sync_end_send(cw->bd->client.win);
@ -959,7 +971,9 @@ _e_mod_comp_win_damage(E_Comp_Win *cw, int x, int y, int w, int h, Eina_Bool dmg
if (cw->counter)
{
if (!cw->update_timeout)
cw->update_timeout = ecore_timer_add(0.25, _e_mod_comp_win_damage_timeout, cw);
cw->update_timeout = ecore_timer_add
(ecore_animator_frametime_get() * 2,
_e_mod_comp_win_damage_timeout, cw);
return;
}
if (!cw->update)
@ -1175,8 +1189,7 @@ _e_mod_comp_add(E_Manager *man)
c = calloc(1, sizeof(E_Comp));
if (!c) return NULL;
c->efl_sync = _comp_mod->conf->efl_sync;
ecore_x_e_comp_sync_supported_set(man->root, c->efl_sync);
ecore_x_e_comp_sync_supported_set(man->root, _comp_mod->conf->efl_sync);
c->man = man;
c->win = ecore_x_composite_render_window_enable(man->root);

View File

@ -11,6 +11,8 @@ struct _E_Config_Dialog_Data
int texture_from_pixmap;
int lock_fps;
int efl_sync;
int loose_sync;
int grab;
};
/* Protos */
@ -60,6 +62,8 @@ _create_data(E_Config_Dialog *cfd)
cfdata->texture_from_pixmap = _comp_mod->conf->texture_from_pixmap;
cfdata->lock_fps = _comp_mod->conf->lock_fps;
cfdata->efl_sync = _comp_mod->conf->efl_sync;
cfdata->loose_sync = _comp_mod->conf->loose_sync;
cfdata->grab = _comp_mod->conf->grab;
return cfdata;
}
@ -86,7 +90,11 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Limit FPS"), &(cfdata->lock_fps));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Sync EFL Windows"), &(cfdata->efl_sync));
ob = e_widget_check_add(evas, _("Sync EFL windows"), &(cfdata->efl_sync));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Loose Sync"), &(cfdata->loose_sync));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Grab during composite"), &(cfdata->grab));
e_widget_framelist_object_append(of, ob);
e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
@ -123,19 +131,23 @@ static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if ((_comp_mod->conf->use_shadow != cfdata->use_shadow) ||
(cfdata->lock_fps != _comp_mod->conf->lock_fps))
(cfdata->lock_fps != _comp_mod->conf->lock_fps) ||
(cfdata->grab != _comp_mod->conf->grab))
{
_comp_mod->conf->use_shadow = cfdata->use_shadow;
_comp_mod->conf->lock_fps = cfdata->lock_fps;
_comp_mod->conf->grab = cfdata->grab;
e_mod_comp_shadow_set();
}
if ((_comp_mod->conf->engine != cfdata->engine) ||
(cfdata->texture_from_pixmap != _comp_mod->conf->texture_from_pixmap) ||
(cfdata->efl_sync != _comp_mod->conf->efl_sync))
(cfdata->efl_sync != _comp_mod->conf->efl_sync) ||
(cfdata->loose_sync != _comp_mod->conf->loose_sync))
{
_comp_mod->conf->engine = cfdata->engine;
_comp_mod->conf->texture_from_pixmap = cfdata->texture_from_pixmap;
_comp_mod->conf->efl_sync = cfdata->efl_sync;
_comp_mod->conf->loose_sync = cfdata->loose_sync;
e_mod_comp_shutdown();
e_mod_comp_init();
}

View File

@ -36,6 +36,8 @@ e_modapi_init(E_Module *m)
E_CONFIG_VAL(D, T, texture_from_pixmap, UCHAR);
E_CONFIG_VAL(D, T, lock_fps, UCHAR);
E_CONFIG_VAL(D, T, efl_sync, UCHAR);
E_CONFIG_VAL(D, T, loose_sync, UCHAR);
E_CONFIG_VAL(D, T, grab, UCHAR);
mod->conf = e_config_domain_load("module.comp", mod->conf_edd);
if (!mod->conf)
@ -47,6 +49,8 @@ e_modapi_init(E_Module *m)
mod->conf->texture_from_pixmap = 0;
mod->conf->lock_fps = 1;
mod->conf->efl_sync = 1;
mod->conf->loose_sync = 0;
mod->conf->grab = 0;
}
_comp_mod = mod;

View File

@ -12,7 +12,9 @@ struct _Config
int engine;
unsigned char texture_from_pixmap;
unsigned char lock_fps;
unsigned char loose_sync;
unsigned char efl_sync;
unsigned char grab;
};
struct _Mod