Revert "Refactor evas_sw_xlib_outbuf to allocate less in case of rotations."

This reverts commit 139737247d.

THis fix was completely wrong.

Conflicts:

	ChangeLog
This commit is contained in:
Stefan Schmidt 2013-02-20 17:21:30 +00:00
parent 251eac7d7a
commit 5e99f9b968
3 changed files with 12 additions and 69 deletions

View File

@ -55,10 +55,6 @@
* Fix memory leak in eina_xattr_value_ls.
* Fix memory leak in gstreamer_ecore_x_check
2013-02-08 Daniel Willman
* Fix memory usage spike when rotating with the software_x11 engine.
2013-02-08 Tom Hacohen (TAsn)
* Evas textblock: Fixed a selection issue with different scripts and

1
NEWS
View File

@ -165,7 +165,6 @@ Fixes:
* Fix memory usage of Ecore_Con_Server
* Fix memory leak in eina_xattr_value_ls.
* Fix memory leak in gstreamer_ecore_x_check
* Fix memory usage spike when rotating with the software_x11 engine.
* Evas textblock: Fixed a selection issue with different scripts and bidi.
* Fix memory leak in error case in ethumb.
* fix bug not to display preedit string with PREEDIT_TYPE_NONE style

View File

@ -364,7 +364,7 @@ evas_software_xlib_outbuf_setup_x(int w, int h, int rot, Outbuf_Depth depth,
RGBA_Image *
evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
{
RGBA_Image *im = NULL;
RGBA_Image *im;
Outbuf_Region *obr;
int bpl = 0;
int use_shm = 1;
@ -459,11 +459,6 @@ evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w
}
else
{
/* FIXME: For the onebuf case we probably need to do the same thing we did below
* (try to get an existing image before we allocate a new one). This code path
* is not really used at the moment so no way to test (and that's why the change
* is not implemented here as well.
*/
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
im = (RGBA_Image *)evas_cache2_image_empty(evas_common_image_cache2_get());
@ -617,73 +612,26 @@ evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w
}
else
{
obr->xob = _find_xob(buf->priv.x11.xlib.disp,
buf->priv.x11.xlib.vis,
buf->priv.x11.xlib.depth,
w, h,
use_shm,
NULL);
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
{
if (obr->xob)
im = (RGBA_Image *)evas_cache2_image_data(evas_common_image_cache2_get(),
w, h,
(DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
if (!im)
{
if (obr->xob) _unfind_xob(obr->xob, 0);
im = (RGBA_Image *)evas_cache2_image_empty(evas_common_image_cache2_get());
if (!im)
{
free(obr);
return NULL;
}
else
{
im->cache_entry.w = w;
im->cache_entry.h = h;
im->cache_entry.flags.alpha |= alpha ? 1 : 0;
evas_cache2_image_surface_alloc(&im->cache_entry, w, h);
}
}
}
im = (RGBA_Image *)evas_cache2_image_empty(evas_common_image_cache2_get());
else
#endif
im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
if (!im)
{
if (obr->xob)
im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
w, h,
(DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
alpha, EVAS_COLORSPACE_ARGB8888);
if (!im)
{
if (obr->xob) _unfind_xob(obr->xob, 0);
im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
if (!im)
{
free(obr);
return NULL;
}
else
{
im->cache_entry.w = w;
im->cache_entry.h = h;
im->cache_entry.flags.alpha |= alpha ? 1 : 0;
evas_cache_image_surface_alloc(&im->cache_entry, w, h);
}
}
free(obr);
return NULL;
}
/* Need to update cache_entry w/h here because the render path expects them to be updated
* to the new geometry. */
im->cache_entry.w = w;
im->cache_entry.h = h;
im->cache_entry.flags.alpha |= alpha ? 1 : 0;
#ifdef EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_surface_alloc(&im->cache_entry, w, h);
else
#endif
evas_cache_image_surface_alloc(&im->cache_entry, w, h);
im->extended_info = obr;
if ((buf->rot == 0) || (buf->rot == 180))
{