diff --git a/legacy/evas/configure.in b/legacy/evas/configure.in index bce100e5bd..09798f4076 100644 --- a/legacy/evas/configure.in +++ b/legacy/evas/configure.in @@ -958,6 +958,35 @@ AM_CONDITIONAL(BUILD_LOADER_SVG, test x$have_svg = xyes) ##################################################################### ## Cpu based optimizations +####################################### +## PTHREADS +pthread_cflags="" +pthread_libs="" +build_pthreads="no" +AC_MSG_CHECKING(whether to build pthread code) +AC_ARG_ENABLE(pthreads, + [ --enable-pthreads enable threaded rendering], [ + if test x"$enableval" = x"yes" ; then + AC_MSG_RESULT(yes) + AC_DEFINE(BUILD_SSE, 1, [Build Threaded Rendering]) + build_pthreads="yes" + pthread_cflags="" + pthread_libs="-lpthread" + else + AC_MSG_RESULT(no) + build_pthreads="no" + fi + ], + [ + AC_MSG_RESULT($build_pthreads) + if test x"$build_pthreads" = x"yes" ; then + AC_DEFINE(BUILD_PTHREAD, 1, [Build Threaded Rendering]) + pthread_cflags="" + pthread_libs="-lpthread" + fi + ] +) + ####################################### ## MMX build_cpu_mmx="no" @@ -1817,6 +1846,9 @@ AC_SUBST(ENGINE_XRENDER_XCB_PRG) AC_SUBST(altivec_cflags) +AC_SUBST(pthread_cflags) +AC_SUBST(pthread_libs) + ##################################################################### ## Output @@ -1933,6 +1965,7 @@ echo " Fallback C Code.........: $build_cpu_c" echo " MMX.....................: $build_cpu_mmx" echo " SSE.....................: $build_cpu_sse" echo " ALTIVEC.................: $build_cpu_altivec" +echo " Thread Support,.........: $build_pthreads" echo echo "ARGB Software Engine Options:" echo " Sampling Scaler.........: $scaler_sample" diff --git a/legacy/evas/src/lib/Makefile.am b/legacy/evas/src/lib/Makefile.am index b078931b29..7f99f128fd 100644 --- a/legacy/evas/src/lib/Makefile.am +++ b/legacy/evas/src/lib/Makefile.am @@ -9,7 +9,8 @@ INCLUDES = -I. \ -I$(top_srcdir)/src/lib/include \ @FREETYPE_CFLAGS@ \ @eet_cflags@ \ - @FONTCONFIG_CFLAGS@ + @FONTCONFIG_CFLAGS@ \ + @pthread_cflags@ lib_LTLIBRARIES = libevas.la @@ -29,7 +30,8 @@ libevas_la_LIBADD = \ @dlopen_libs@ \ @FREETYPE_LIBS@ \ @eet_libs@ \ - @FONTCONFIG_LIBS@ + @FONTCONFIG_LIBS@ \ + @pthread_libs@ libevas_la_DEPENDENCIES = \ $(top_builddir)/config.h \ diff --git a/legacy/evas/src/lib/engines/common/Makefile.am b/legacy/evas/src/lib/engines/common/Makefile.am index d8aa41c042..0bd7f1a97b 100644 --- a/legacy/evas/src/lib/engines/common/Makefile.am +++ b/legacy/evas/src/lib/engines/common/Makefile.am @@ -8,7 +8,7 @@ INCLUDES = -I. \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib/include \ @FREETYPE_CFLAGS@ @VALGRIND_CFLAGS@ \ - @eet_cflags@ + @eet_cflags@ @pthread_cflags@ noinst_LTLIBRARIES = libevas_engine_common.la libevas_engine_common_la_SOURCES = \ diff --git a/legacy/evas/src/lib/file/evas_path.c b/legacy/evas/src/lib/file/evas_path.c index fc5deb0020..d35b52d306 100644 --- a/legacy/evas/src/lib/file/evas_path.c +++ b/legacy/evas/src/lib/file/evas_path.c @@ -6,6 +6,9 @@ #ifndef _WIN32_WCE /* UNIX compatability functions */ +#include "evas_common.h" +#include "evas_private.h" + #include #include #include @@ -16,9 +19,6 @@ #include #include -#include "evas_common.h" -#include "evas_private.h" - int evas_file_path_is_full_path(const char *path) { diff --git a/legacy/evas/src/lib/include/evas_common.h b/legacy/evas/src/lib/include/evas_common.h index fd4f7287d8..8df5380ba4 100644 --- a/legacy/evas/src/lib/include/evas_common.h +++ b/legacy/evas/src/lib/include/evas_common.h @@ -12,6 +12,31 @@ #define _GNU_SOURCE #endif +#ifdef BUILD_PTHREAD +# include +# define RLK struct { pthread_rwlock_t rwl; } _reslock +# define RLK_ADD(x) pthread_rwlock_init (&((x)->_reslock.rwl), NULL) +# define RLK_DEL(x) pthread_rwlock_destroy(&((x)->_reslock.rwl)) +# define RLK_RLK(x) pthread_rwlock_rdlock (&((x)->_reslock.rwl)) +# define RLK_WLK(x) pthread_rwlock_wrlock (&((x)->_reslock.rwl)) +# define RLK_ULK(x) pthread_rwlock_unlock (&((x)->_reslock.rwl)) +#else +# define RLK +# define RLK_ADD(x) +# define RLK_DEL(x) +# define RLK_RLK(x) +# define RLK_WLK(x) +# define RLK_ULK(x) +#endif + +typedef struct _Genlock Genlock; + +struct _Genlock +{ + RLK; + int _dummy; +}; + #include #include #include @@ -80,7 +105,7 @@ typedef unsigned long long DATA64; typedef unsigned __int64 DATA64; #define strdup _strdup #define snprintf _snprintf -#define rewind(f) fseek(f,0,SEEK_SET) +#define rewind(f) fseek(f, 0, SEEK_SET) #endif typedef unsigned int DATA32; @@ -706,46 +731,53 @@ EAPI void evas_common_scale_hsva_span (DATA32 *src, DATA8 EAPI void evas_common_scale_hsva_a8_span (DATA32 *src, DATA8 *mask, int src_len, DATA32 mul_col, DATA32 *dst, int dst_len, int dir); /****/ +/*done*/ EAPI void evas_common_image_init (void); EAPI void evas_common_image_shutdown (void); -EAPI RGBA_Surface *evas_common_image_surface_new (RGBA_Image *im); -EAPI void evas_common_image_surface_free (RGBA_Surface *is); -EAPI void evas_common_image_surface_alloc (RGBA_Surface *is); -EAPI void evas_common_image_surface_dealloc (RGBA_Surface *is); +/*done - internal - dont use */ +EAPI RGBA_Surface *evas_common_image_surface_new (RGBA_Image *im);/*2*/ +EAPI void evas_common_image_surface_free (RGBA_Surface *is);/*2*/ +EAPI void evas_common_image_surface_alloc (RGBA_Surface *is);/*2*/ +EAPI void evas_common_image_surface_dealloc (RGBA_Surface *is);/*2*/ +EAPI void evas_common_image_cache (RGBA_Image *im); /*2*/ +EAPI void evas_common_image_uncache (RGBA_Image *im); /*2*/ +EAPI void evas_common_image_store (RGBA_Image *im); /*2*/ +EAPI void evas_common_image_unstore (RGBA_Image *im); /*2*/ +EAPI RGBA_Image *evas_common_image_find (const char *file, const char *key, DATA64 timestamp, RGBA_Image_Loadopts *lo); /*2*/ +EAPI void evas_common_image_cache_free (void); /*2*/ +EAPI void evas_common_image_premul (RGBA_Image *im); /*2*/ +EAPI void evas_common_image_set_alpha_sparse (RGBA_Image *im); /*2*/ +/*done*/ EAPI RGBA_Image *evas_common_image_alpha_create (int w, int h); EAPI RGBA_Image *evas_common_image_create (int w, int h); EAPI RGBA_Image *evas_common_image_new (void); + EAPI void evas_common_image_free (RGBA_Image *im); EAPI void evas_common_image_ref (RGBA_Image *im); EAPI void evas_common_image_unref (RGBA_Image *im); -EAPI void evas_common_image_cache (RGBA_Image *im); -EAPI void evas_common_image_uncache (RGBA_Image *im); EAPI void evas_common_image_flush_cache (void); EAPI void evas_common_image_set_cache (int size); EAPI int evas_common_image_get_cache (void); -EAPI void evas_common_image_store (RGBA_Image *im); -EAPI void evas_common_image_unstore (RGBA_Image *im); -EAPI RGBA_Image *evas_common_image_find (const char *file, const char *key, DATA64 timestamp, RGBA_Image_Loadopts *lo); EAPI int evas_common_image_ram_usage (RGBA_Image *im); EAPI void evas_common_image_dirty (RGBA_Image *im); -EAPI void evas_common_image_cache_free (void); -EAPI RGBA_Image *evas_common_load_image_from_file (const char *file, const char *key, RGBA_Image_Loadopts *lo); -EAPI void evas_common_load_image_data_from_file(RGBA_Image *im); -EAPI int evas_common_save_image_to_file (RGBA_Image *im, const char *file, const char *key, int quality, int compress); -EAPI void evas_common_image_premul (RGBA_Image *im); -EAPI void evas_common_image_set_alpha_sparse (RGBA_Image *im); - -EAPI RGBA_Image *evas_common_image_line_buffer_obtain (int len); -EAPI void evas_common_image_line_buffer_release (void); -EAPI void evas_common_image_line_buffer_free (void); +EAPI RGBA_Image *evas_common_image_line_buffer_obtain (int len); +EAPI void evas_common_image_line_buffer_release (void); +EAPI void evas_common_image_line_buffer_free (void); EAPI RGBA_Image *evas_common_image_alpha_line_buffer_obtain (int len); EAPI void evas_common_image_alpha_line_buffer_release (void); EAPI void evas_common_image_alpha_line_buffer_free (void); +/*done*/ +EAPI RGBA_Image *evas_common_load_image_from_file (const char *file, const char *key, RGBA_Image_Loadopts *lo); +EAPI void evas_common_load_image_data_from_file(RGBA_Image *im); +EAPI int evas_common_save_image_to_file (RGBA_Image *im, const char *file, const char *key, int quality, int compress); + + + /****/ EAPI void evas_common_rectangle_init (void); @@ -901,6 +933,9 @@ void evas_common_array_hash_free (Evas_Array_Hash *hash); void evas_common_array_hash_add (Evas_Array_Hash *hash, int key, int data); int evas_common_array_hash_search (Evas_Array_Hash *hash, int key); +void evas_stringshare_init(void); +void evas_stringshare_shutdown(void); + /*****************************************************************************/ #ifdef __cplusplus diff --git a/legacy/evas/src/modules/loaders/edb/evas_image_load_edb.c b/legacy/evas/src/modules/loaders/edb/evas_image_load_edb.c index 00d2d6fed6..6c1039ad80 100644 --- a/legacy/evas/src/modules/loaders/edb/evas_image_load_edb.c +++ b/legacy/evas/src/modules/loaders/edb/evas_image_load_edb.c @@ -1,9 +1,9 @@ -#include -#include - #include "evas_common.h" #include "evas_private.h" +#include +#include + #define SWAP32(x) (x) = ((((x) & 0x000000ff ) << 24) | (((x) & 0x0000ff00 ) << 8) | (((x) & 0x00ff0000 ) >> 8) | (((x) & 0xff000000 ) >> 24)) diff --git a/legacy/evas/src/modules/loaders/eet/evas_image_load_eet.c b/legacy/evas/src/modules/loaders/eet/evas_image_load_eet.c index b008011671..a88b60604d 100644 --- a/legacy/evas/src/modules/loaders/eet/evas_image_load_eet.c +++ b/legacy/evas/src/modules/loaders/eet/evas_image_load_eet.c @@ -1,8 +1,8 @@ -#include - #include "evas_common.h" #include "evas_private.h" +#include + int evas_image_load_file_head_eet(RGBA_Image *im, const char *file, const char *key); int evas_image_load_file_data_eet(RGBA_Image *im, const char *file, const char *key); diff --git a/legacy/evas/src/modules/loaders/gif/evas_image_load_gif.c b/legacy/evas/src/modules/loaders/gif/evas_image_load_gif.c index f27afeba8a..2bb99a408f 100644 --- a/legacy/evas/src/modules/loaders/gif/evas_image_load_gif.c +++ b/legacy/evas/src/modules/loaders/gif/evas_image_load_gif.c @@ -1,12 +1,12 @@ +#include "evas_common.h" +#include "evas_private.h" + #include #include #include #include -#include "evas_common.h" -#include "evas_private.h" - int evas_image_load_file_head_gif(RGBA_Image *im, const char *file, const char *key); int evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key); diff --git a/legacy/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c b/legacy/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c index 3ae2fbd154..846a6cf674 100644 --- a/legacy/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c +++ b/legacy/evas/src/modules/loaders/jpeg/evas_image_load_jpeg.c @@ -1,10 +1,10 @@ +#include "evas_common.h" +#include "evas_private.h" + #include #include #include -#include "evas_common.h" -#include "evas_private.h" - typedef struct _JPEG_error_mgr *emptr; struct _JPEG_error_mgr diff --git a/legacy/evas/src/modules/loaders/png/evas_image_load_png.c b/legacy/evas/src/modules/loaders/png/evas_image_load_png.c index a2eb574b42..276c6aeae8 100644 --- a/legacy/evas/src/modules/loaders/png/evas_image_load_png.c +++ b/legacy/evas/src/modules/loaders/png/evas_image_load_png.c @@ -1,3 +1,7 @@ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include #include diff --git a/legacy/evas/src/modules/loaders/svg/evas_image_load_svg.c b/legacy/evas/src/modules/loaders/svg/evas_image_load_svg.c index dd35836bdc..71512249ec 100644 --- a/legacy/evas/src/modules/loaders/svg/evas_image_load_svg.c +++ b/legacy/evas/src/modules/loaders/svg/evas_image_load_svg.c @@ -1,5 +1,6 @@ #include "evas_common.h" #include "evas_private.h" + #include #include diff --git a/legacy/evas/src/modules/loaders/tiff/evas_image_load_tiff.c b/legacy/evas/src/modules/loaders/tiff/evas_image_load_tiff.c index e944395674..48e257f67a 100644 --- a/legacy/evas/src/modules/loaders/tiff/evas_image_load_tiff.c +++ b/legacy/evas/src/modules/loaders/tiff/evas_image_load_tiff.c @@ -1,10 +1,9 @@ -#include - -#include - #include "evas_common.h" #include "evas_private.h" +#include +#include + int evas_image_load_file_head_tiff(RGBA_Image *im, const char *file, const char *key); int evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key); diff --git a/legacy/evas/src/modules/loaders/xpm/evas_image_load_xpm.c b/legacy/evas/src/modules/loaders/xpm/evas_image_load_xpm.c index b56f7ff614..c8bbfb5a72 100644 --- a/legacy/evas/src/modules/loaders/xpm/evas_image_load_xpm.c +++ b/legacy/evas/src/modules/loaders/xpm/evas_image_load_xpm.c @@ -1,7 +1,6 @@ #include "evas_common.h" #include "evas_private.h" - int evas_image_load_file_head_xpm(RGBA_Image *im, const char *file, const char *key); int evas_image_load_file_data_xpm(RGBA_Image *im, const char *file, const char *key); diff --git a/legacy/evas/src/modules/savers/edb/evas_image_save_edb.c b/legacy/evas/src/modules/savers/edb/evas_image_save_edb.c index b0e8fcaca7..d2e8c9a132 100644 --- a/legacy/evas/src/modules/savers/edb/evas_image_save_edb.c +++ b/legacy/evas/src/modules/savers/edb/evas_image_save_edb.c @@ -1,9 +1,8 @@ -#include -#include - #include "evas_common.h" #include "evas_private.h" +#include +#include int evas_image_save_file_edb(RGBA_Image *im, const char *file, const char *key, int quality, int compress); diff --git a/legacy/evas/src/modules/savers/eet/evas_image_save_eet.c b/legacy/evas/src/modules/savers/eet/evas_image_save_eet.c index 6fa572c848..909b6e57c5 100644 --- a/legacy/evas/src/modules/savers/eet/evas_image_save_eet.c +++ b/legacy/evas/src/modules/savers/eet/evas_image_save_eet.c @@ -1,8 +1,7 @@ -#include - #include "evas_common.h" #include "evas_private.h" +#include int evas_image_save_file_eet(RGBA_Image *im, const char *file, const char *key, int quality, int compress); diff --git a/legacy/evas/src/modules/savers/jpeg/evas_image_save_jpeg.c b/legacy/evas/src/modules/savers/jpeg/evas_image_save_jpeg.c index 99db5aa336..8a5b7da496 100644 --- a/legacy/evas/src/modules/savers/jpeg/evas_image_save_jpeg.c +++ b/legacy/evas/src/modules/savers/jpeg/evas_image_save_jpeg.c @@ -1,10 +1,9 @@ -#include -#include -#include - #include "evas_common.h" #include "evas_private.h" +#include +#include +#include int evas_image_save_file_jpeg(RGBA_Image *im, const char *file, const char *key, int quality, int compress); diff --git a/legacy/evas/src/modules/savers/png/evas_image_save_png.c b/legacy/evas/src/modules/savers/png/evas_image_save_png.c index 97983d6952..cc9e9d8d20 100644 --- a/legacy/evas/src/modules/savers/png/evas_image_save_png.c +++ b/legacy/evas/src/modules/savers/png/evas_image_save_png.c @@ -1,10 +1,13 @@ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include #include #include "evas_common.h" #include "evas_private.h" - int evas_image_save_file_png(RGBA_Image *im, const char *file, const char *key, int quality, int compress); Evas_Image_Save_Func evas_image_save_png_func = diff --git a/legacy/evas/src/modules/savers/tiff/evas_image_save_tiff.c b/legacy/evas/src/modules/savers/tiff/evas_image_save_tiff.c index dd05091220..59a42b1ab4 100644 --- a/legacy/evas/src/modules/savers/tiff/evas_image_save_tiff.c +++ b/legacy/evas/src/modules/savers/tiff/evas_image_save_tiff.c @@ -1,8 +1,7 @@ -#include - #include "evas_common.h" #include "evas_private.h" +#include int evas_image_save_file_tiff(RGBA_Image *im, const char *file, const char *key, int quality, int compress);