forked from enlightenment/efl
ecore_evas_drm: Let ecore_drm2 track pending page flips
Since the engines can call the flip functions, we need to protect the ticker from missing those flips. Thus, we let ecore_drm2, which obviously sees all flips, track them.
This commit is contained in:
parent
eec565cc0f
commit
e893d7de7d
|
@ -59,7 +59,6 @@ typedef struct _Ecore_Evas_Engine_Drm_Data
|
||||||
Ecore_Drm2_Device *dev;
|
Ecore_Drm2_Device *dev;
|
||||||
Ecore_Drm2_Output *output;
|
Ecore_Drm2_Output *output;
|
||||||
Evas_Device *seat;
|
Evas_Device *seat;
|
||||||
Eina_Bool pending : 1;
|
|
||||||
Eina_Bool ticking : 1;
|
Eina_Bool ticking : 1;
|
||||||
Eina_Bool once : 1;
|
Eina_Bool once : 1;
|
||||||
} Ecore_Evas_Engine_Drm_Data;
|
} Ecore_Evas_Engine_Drm_Data;
|
||||||
|
@ -608,8 +607,6 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se
|
||||||
|
|
||||||
ret = ecore_drm2_fb_flip_complete(edata->output);
|
ret = ecore_drm2_fb_flip_complete(edata->output);
|
||||||
|
|
||||||
edata->pending = EINA_FALSE;
|
|
||||||
|
|
||||||
if (edata->ticking)
|
if (edata->ticking)
|
||||||
{
|
{
|
||||||
double t = (double)sec + ((double)usec / 1000000);
|
double t = (double)sec + ((double)usec / 1000000);
|
||||||
|
@ -618,10 +615,7 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se
|
||||||
ecore_evas_animator_tick(ee, NULL, t - edata->offset);
|
ecore_evas_animator_tick(ee, NULL, t - edata->offset);
|
||||||
}
|
}
|
||||||
else if (ret)
|
else if (ret)
|
||||||
{
|
|
||||||
edata->pending = EINA_TRUE;
|
|
||||||
ecore_drm2_fb_flip(NULL, edata->output);
|
ecore_drm2_fb_flip(NULL, edata->output);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -632,11 +626,8 @@ _drm_evas_changed(Ecore_Evas *ee, Eina_Bool changed)
|
||||||
if (changed) return;
|
if (changed) return;
|
||||||
|
|
||||||
edata = ee->engine.data;
|
edata = ee->engine.data;
|
||||||
if (edata->ticking && !edata->pending)
|
if (edata->ticking && !ecore_drm2_output_pending_get(edata->output))
|
||||||
{
|
|
||||||
edata->pending = EINA_TRUE;
|
|
||||||
ecore_drm2_fb_flip(NULL, edata->output);
|
ecore_drm2_fb_flip(NULL, edata->output);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -679,11 +670,8 @@ _drm_animator_register(Ecore_Evas *ee)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!edata->pending && !ee->in_async_render)
|
if (!ecore_drm2_output_pending_get(edata->output) && !ee->in_async_render)
|
||||||
{
|
|
||||||
edata->pending = EINA_TRUE;
|
|
||||||
ecore_drm2_fb_flip(NULL, edata->output);
|
ecore_drm2_fb_flip(NULL, edata->output);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue