path: root/src/lib/ecore_evas
diff options
authorJean Guyomarc'h <>2018-01-16 14:58:38 +0900
committerCarsten Haitzler (Rasterman) <>2018-01-16 17:50:46 +0900
commit34d9f2070696027199a56cb621c0526ea1430e8f (patch)
treef5d4bd8dea83a82fcb4bfb52225bb7487f061859 /src/lib/ecore_evas
parent574ef9a5e53ac2ecabc14fd02be7e55cd90a9b25 (diff)
eina: remove usless newline
Summary: ecore_evas: remove debug eina: unregister log level when done with Fixes a constant memory leak. eina: introduce EINA_HOT and EINA_COLD These attributes respectivelly expand to __attribute__ ((hot)) and __attribute__ ((cold)) when available. They allow to mark functions are being hot/cold (frequently used or not) as well as to qualify labels within a function (likely/unlikely branches). eo: speed-up generated calls by removing call cache The call cache needed to by thread-local, to avoid concurrency issues. Problem with TLS is that is adds an extra overhead, which appears to be greater than the optimization the cache provides. Op is naturally atomic, because it is an unsigned integer. As such, it cannot be tempered with while another thread is reading it. When entering the generated function, the first operation done is reading 'op'. If we have concurrency, we will have access sequences returning either EFL_NOOP or a VALID op, because 'op' is not set until the very end of the function, when everything has been computed. As such, we now use the 'op' atomic integer to instore a lock-free/wait-free mechanism, which allows to drop the TLS nature of the cache, speeding up the access to the cache, and therefore making functions execute faster. We don't test anymore the generation count. This can be put as a limitation. If means that if you call efl_object_shutdown() and re-initialize it later with different data, opcodes will be invalid. I am not sure there is any usecase for this to ever happen. We could move all the caches in a dedicated section, that can be overwritten after a call to efl_object_shutdown(), but I am not sure it will be very portable. Benchmark: mean over 3 executions of ELM_TEST_AUTOBOUNCE=100 time elementary_test -to genlist ``` BEFORE AFTER ------------------------------------------------------------ time (ns) 11114111647.0 9147676220.0 frames 2872.3333333333335 2904.6666666666665 time per frame (ns) 3869364.6666666665 3149535.3333333335 user time (s) 11.096666666666666 9.22 cpu (%) 22.666666666666668 18.333333333333332 ``` Ref T6580 Reviewers: raster, cedric Subscribers: cedric, jpeg Maniphest Tasks: T6580 Differential Revision:
Diffstat (limited to 'src/lib/ecore_evas')
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h
index 7b83589347..13002402a4 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -347,7 +347,7 @@ struct _Ecore_Evas
347 } delayed; 347 } delayed;
348 348
349 int refcount; 349 int refcount;
350#define ECORE_EVAS_ASYNC_RENDER_DEBUG 1 /* TODO: remove me */ 350//#define ECORE_EVAS_ASYNC_RENDER_DEBUG 1 /* TODO: remove me */
352 double async_render_start; 352 double async_render_start;
353#endif 353#endif