diff options
author | Haegeun Park <haegeun.park@samsung.com> | 2016-11-15 16:18:50 +0900 |
---|---|---|
committer | Haegeun Park <haegeun.park@samsung.com> | 2017-01-11 18:20:38 +0900 |
commit | 9d2640526b98d8d4eb2ffa8deaa53c7999568ca2 (patch) | |
tree | 241ca4dc9ddbebb96ab53226c25f44e88e1aa0e8 | |
parent | f03b03908de8e71af3d9f0e0b683a195cb08474e (diff) | |
download | efl-9d2640526b98d8d4eb2ffa8deaa53c7999568ca2.tar.gz |
evas/gl_common: (GL thread) Moved shader_array_flush() to worker thread to reduce thread invoking
From moving the function itself, evas_gl_thread_begin()~end() prevents API-level threading
and thread invoking is skipped. (it minimizes invoking overhead)
Change-Id: I484ba07fb481d2fbfe26a68ee95bdc435412ba8c
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_context.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c index c24e77fb72..edfe2850e4 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -3061,7 +3061,7 @@ start_tiling(Evas_Engine_GL_Context *gc EINA_UNUSED, } static void -shader_array_flush(Evas_Engine_GL_Context *gc) +_orig_shader_array_flush(Evas_Engine_GL_Context *gc) { int i, gw, gh, offx = 0, offy = 0; unsigned int pipe_done = 0; //count pipe iteration for debugging @@ -3748,6 +3748,41 @@ shader_array_flush(Evas_Engine_GL_Context *gc) gc->havestuff = EINA_FALSE; } +typedef struct +{ + Evas_Engine_GL_Context *gc; +} Evas_Thread_Command_shader_array_flush; + +static void +_gl_thread_shader_array_flush(void *data) +{ + Evas_Thread_Command_shader_array_flush *thread_param = + (Evas_Thread_Command_shader_array_flush *)data; + evas_gl_thread_begin(); + _orig_shader_array_flush(thread_param->gc); + evas_gl_thread_end(); +} + +static void +shader_array_flush(Evas_Engine_GL_Context *gc) +{ + if (!evas_gl_thread_enabled()) + { + _orig_shader_array_flush(gc); + return; + } + + Evas_Thread_Command_shader_array_flush thread_param_local; + Evas_Thread_Command_shader_array_flush *thread_param = &thread_param_local; + thread_param->gc = gc; + + evas_gl_thread_cmd_enqueue(EVAS_GL_THREAD_TYPE_GL, + _gl_thread_shader_array_flush, + thread_param, + EVAS_GL_THREAD_MODE_FINISH); + +} + EAPI int evas_gl_common_buffer_dump(Evas_Engine_GL_Context *gc, const char* dname, const char* buf_name, int frame, const char *suffix) { |