aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_image_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_image_main.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_image_main.c77
1 files changed, 71 insertions, 6 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_image_main.c b/libraries/evas/src/lib/engines/common/evas_image_main.c
index d2f8c0b..9c233b3 100644
--- a/libraries/evas/src/lib/engines/common/evas_image_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_image_main.c
@@ -16,6 +16,8 @@
16# include <memcheck.h> 16# include <memcheck.h>
17#endif 17#endif
18 18
19//#define SURFDBG 1
20
19static Evas_Cache_Image * eci = NULL; 21static Evas_Cache_Image * eci = NULL;
20static int reference = 0; 22static int reference = 0;
21 23
@@ -212,6 +214,30 @@ evas_common_rgba_image_free(Image_Entry *ie)
212 _evas_common_rgba_image_delete(ie); 214 _evas_common_rgba_image_delete(ie);
213} 215}
214 216
217#ifdef SURFDBG
218static Eina_List *surfs = NULL;
219
220static void
221surf_debug(void)
222{
223 Eina_List *l;
224 Image_Entry *ie;
225 RGBA_Image *im;
226 int i = 0;
227
228 printf("----SURFS----\n");
229 EINA_LIST_FOREACH(surfs, l, ie)
230 {
231 im = ie;
232 printf("%i - %p - %ix%i [%s][%s]\n",
233 i, im->image.data, ie->allocated.w, ie->allocated.h,
234 ie->file, ie->key
235 );
236 i++;
237 }
238}
239#endif
240
215EAPI void 241EAPI void
216evas_common_rgba_image_unload(Image_Entry *ie) 242evas_common_rgba_image_unload(Image_Entry *ie)
217{ 243{
@@ -252,7 +278,12 @@ evas_common_rgba_image_unload(Image_Entry *ie)
252#endif 278#endif
253 279
254 if (im->image.data && !im->image.no_free) 280 if (im->image.data && !im->image.no_free)
255 free(im->image.data); 281 {
282 free(im->image.data);
283#ifdef SURFDBG
284 surfs = eina_list_remove(surfs, ie);
285#endif
286 }
256 im->image.data = NULL; 287 im->image.data = NULL;
257 ie->allocated.w = 0; 288 ie->allocated.w = 0;
258 ie->allocated.h = 0; 289 ie->allocated.h = 0;
@@ -260,6 +291,9 @@ evas_common_rgba_image_unload(Image_Entry *ie)
260#ifdef BUILD_ASYNC_PRELOAD 291#ifdef BUILD_ASYNC_PRELOAD
261 ie->flags.preload_done = 0; 292 ie->flags.preload_done = 0;
262#endif 293#endif
294#ifdef SURFDBG
295 surf_debug();
296#endif
263} 297}
264 298
265void 299void
@@ -318,10 +352,20 @@ _evas_common_rgba_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned
318 else 352 else
319 siz = w * h * sizeof(DATA32); 353 siz = w * h * sizeof(DATA32);
320 354
321 if (im->image.data) free(im->image.data); 355 if (im->image.data)
356 {
357 free(im->image.data);
358#ifdef SURFDBG
359 surfs = eina_list_remove(surfs, ie);
360#endif
361 }
322 im->image.data = malloc(siz); 362 im->image.data = malloc(siz);
323 if (!im->image.data) return -1; 363 if (!im->image.data) return -1;
324 364 ie->allocated.w = w;
365 ie->allocated.h = h;
366#ifdef SURFDBG
367 surfs = eina_list_append(surfs, ie);
368#endif
325#ifdef HAVE_VALGRIND 369#ifdef HAVE_VALGRIND
326# ifdef VALGRIND_MAKE_READABLE 370# ifdef VALGRIND_MAKE_READABLE
327 VALGRIND_MAKE_READABLE(im->image.data, siz); 371 VALGRIND_MAKE_READABLE(im->image.data, siz);
@@ -332,7 +376,9 @@ _evas_common_rgba_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned
332# endif 376# endif
333#endif 377#endif
334 _evas_common_rgba_image_post_surface(ie); 378 _evas_common_rgba_image_post_surface(ie);
335 379#ifdef SURFDBG
380 surf_debug();
381#endif
336 return 0; 382 return 0;
337} 383}
338 384
@@ -366,7 +412,12 @@ _evas_common_rgba_image_surface_delete(Image_Entry *ie)
366 im->cs.data = NULL; 412 im->cs.data = NULL;
367 413
368 if (im->image.data && !im->image.no_free) 414 if (im->image.data && !im->image.no_free)
369 free(im->image.data); 415 {
416 free(im->image.data);
417#ifdef SURFDBG
418 surfs = eina_list_remove(surfs, ie);
419#endif
420 }
370#ifdef EVAS_CSERVE 421#ifdef EVAS_CSERVE
371 else if (ie->data1) 422 else if (ie->data1)
372 evas_cserve_image_free(ie); 423 evas_cserve_image_free(ie);
@@ -380,6 +431,9 @@ _evas_common_rgba_image_surface_delete(Image_Entry *ie)
380#endif 431#endif
381 ie->flags.loaded = 0; 432 ie->flags.loaded = 0;
382 evas_common_rgba_image_scalecache_dirty(&im->cache_entry); 433 evas_common_rgba_image_scalecache_dirty(&im->cache_entry);
434#ifdef SURFDBG
435 surf_debug();
436#endif
383} 437}
384 438
385static void 439static void
@@ -597,7 +651,15 @@ evas_common_image_colorspace_normalize(RGBA_Image *im)
597#ifdef EVAS_CSERVE 651#ifdef EVAS_CSERVE
598 if (((Image_Entry *)im)->data1) evas_cserve_image_free(&im->cache_entry); 652 if (((Image_Entry *)im)->data1) evas_cserve_image_free(&im->cache_entry);
599#endif 653#endif
600 if (!im->image.no_free) free(im->image.data); 654 if (!im->image.no_free)
655 {
656 free(im->image.data);
657#ifdef SURFDBG
658 surfs = eina_list_remove(surfs, im);
659#endif
660 ((Image_Entry *)im)->allocated.w = 0;
661 ((Image_Entry *)im)->allocated.h = 0;
662 }
601 im->image.data = im->cs.data; 663 im->image.data = im->cs.data;
602 im->cs.no_free = im->image.no_free; 664 im->cs.no_free = im->image.no_free;
603 } 665 }
@@ -634,6 +696,9 @@ evas_common_image_colorspace_normalize(RGBA_Image *im)
634 break; 696 break;
635 } 697 }
636 im->cs.dirty = 0; 698 im->cs.dirty = 0;
699#ifdef SURFDBG
700 surf_debug();
701#endif
637} 702}
638 703
639EAPI void 704EAPI void