summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2015-10-22 15:12:26 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2015-10-22 15:18:16 +0900
commitde33ab24c5e89cec5e7928a8180302ca299fdc58 (patch)
tree4a031246a72d42c6af34e35347a0c20b3a5bb6dc
parentb40f170b24caa12ad09c0f12a4712e3b3cc18111 (diff)
downloadefl-de33ab24c5e89cec5e7928a8180302ca299fdc58.tar.gz
evas - software render async - fix async render to actually be all async
so the evas thread renderer didnt START rendering until evas FINISHEd walking all objects generating a render queue. this means all the cpu time spend generating commands couldn't allow a parallel thread actually go and DO the rendering. this flushes the render thread every render command thus waking up the render thread to work in parallel to the mainloop generating commands. this actually means int he traces i see the render thread finished byt he time evas_render completes thus brinign forward the frame display by quite a bit. thanks to evlog for pointing this out. @fix
-rw-r--r--src/modules/evas/engines/software_generic/evas_engine.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c
index d9b8956c99..267867bb2f 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -427,6 +427,9 @@ Eina_Mempool *_mp_command_ector_surface = NULL;
static int cpunum = 0;
static int _evas_soft_gen_log_dom = -1;
+//#define QCMD evas_thread_cmd_enqueue
+#define QCMD evas_thread_queue_flush
+
static void
eng_output_dump(void *data EINA_UNUSED)
{
@@ -706,7 +709,7 @@ _draw_rectangle_thread_cmd(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
cr->mask_x = dc->clip.mask_x;
cr->mask_y = dc->clip.mask_y;
- evas_thread_cmd_enqueue(_draw_thread_rectangle_draw, cr);
+ QCMD(_draw_thread_rectangle_draw, cr);
}
static void
@@ -832,7 +835,7 @@ _line_draw_thread_cmd(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in
cl->mask_x = dc->clip.mask_x;
cl->mask_y = dc->clip.mask_y;
- evas_thread_cmd_enqueue(_draw_thread_line_draw, cl);
+ QCMD(_draw_thread_line_draw, cl);
}
static void
@@ -969,7 +972,7 @@ _polygon_draw_thread_cmd(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
cp->mask_x = dc->clip.mask_x;
cp->mask_y = dc->clip.mask_y;
- evas_thread_cmd_enqueue(_draw_thread_polygon_draw, cp);
+ QCMD(_draw_thread_polygon_draw, cp);
}
static void
@@ -1865,7 +1868,7 @@ _image_draw_thread_cmd(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc,
cr->render_op = dc->render_op;
cr->smooth = smooth;
- evas_thread_cmd_enqueue(_draw_thread_image_draw, cr);
+ QCMD(_draw_thread_image_draw, cr);
return EINA_TRUE;
}
@@ -2180,7 +2183,7 @@ _map_draw_thread_cmd(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RG
cm->mask_x = dc->clip.mask_x;
cm->mask_y = dc->clip.mask_y;
- evas_thread_cmd_enqueue(_draw_thread_map_draw, cm);
+ QCMD(_draw_thread_map_draw, cm);
return EINA_TRUE;
}
@@ -2449,7 +2452,7 @@ _multi_font_draw_thread_cmd(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y
mf->y = y;
mf->texts = texts;
- evas_thread_cmd_enqueue(_draw_thread_multi_font_draw, mf);
+ QCMD(_draw_thread_multi_font_draw, mf);
return EINA_TRUE;
}
@@ -2770,7 +2773,7 @@ _font_draw_thread_cmd(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas
cf->mask_x = dc->clip.mask_x;
cf->mask_y = dc->clip.mask_y;
- evas_thread_cmd_enqueue(_draw_thread_font_draw, cf);
+ QCMD(_draw_thread_font_draw, cf);
return EINA_TRUE;
}
@@ -3814,7 +3817,7 @@ eng_ector_renderer_draw(void *data EINA_UNUSED, void *context, void *surface, Ec
memcpy(ne, &ector, sizeof (Evas_Thread_Command_Ector));
ne->free_it = EINA_TRUE;
- evas_thread_cmd_enqueue(_draw_thread_ector_draw, ne);
+ QCMD(_draw_thread_ector_draw, ne);
}
else
{
@@ -3876,7 +3879,7 @@ eng_ector_begin(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface
nes->x = x;
nes->y = y;
- evas_thread_cmd_enqueue(_draw_thread_ector_surface_set, nes);
+ QCMD(_draw_thread_ector_surface_set, nes);
}
else
{
@@ -3917,7 +3920,7 @@ eng_ector_end(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface *
nes->ector = ector;
nes->surface = NULL;
- evas_thread_cmd_enqueue(_draw_thread_ector_surface_set, nes);
+ QCMD(_draw_thread_ector_surface_set, nes);
}
else
{