raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=de33ab24c5e89cec5e7928a8180302ca299fdc58

commit de33ab24c5e89cec5e7928a8180302ca299fdc58
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Thu Oct 22 15:12:26 2015 +0900

    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
---
 .../evas/engines/software_generic/evas_engine.c    | 23 ++++++++++++----------
 1 file 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 d9b8956..267867b 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
      {

-- 


Reply via email to