forked from enlightenment/efl
evas: remove EVAS_FRAME_QUEUING.
NOTE: This should be part of evas_render itself and not delegated to the engine. So cleaning things to make it easier during evas_render rewrite. SVN revision: 70503
This commit is contained in:
parent
9dbaea6dd1
commit
377cc2368a
|
@ -711,4 +711,4 @@
|
||||||
2012-04-26 Cedric Bail
|
2012-04-26 Cedric Bail
|
||||||
|
|
||||||
* Lock less font rendering.
|
* Lock less font rendering.
|
||||||
* Removing EVAS_SLI, METRIC_CACHE and WORD_CACHE.
|
* Removing EVAS_FRAME_QUEUING, EVAS_SLI, METRIC_CACHE and WORD_CACHE.
|
||||||
|
|
|
@ -7,7 +7,7 @@ Improvements:
|
||||||
* Lock less font rendering.
|
* Lock less font rendering.
|
||||||
|
|
||||||
Removal:
|
Removal:
|
||||||
* Remove EVAS_SLI, METRIC_CACHE and WORD_CACHE.
|
* Remove EVAS_FRAME_QUEUING, EVAS_SLI, METRIC_CACHE and WORD_CACHE.
|
||||||
|
|
||||||
Evas 1.2.0
|
Evas 1.2.0
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,6 @@ struct _Evas_Cache_Image
|
||||||
int usage;
|
int usage;
|
||||||
unsigned int limit;
|
unsigned int limit;
|
||||||
int references;
|
int references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LK(lock);
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Evas_Cache_Engine_Image_Func
|
struct _Evas_Cache_Engine_Image_Func
|
||||||
|
|
|
@ -65,13 +65,7 @@ _evas_cache_image_dirty_add(Image_Entry *im)
|
||||||
_evas_cache_image_lru_nodata_del(im);
|
_evas_cache_image_lru_nodata_del(im);
|
||||||
im->flags.dirty = 1;
|
im->flags.dirty = 1;
|
||||||
im->flags.cached = 1;
|
im->flags.cached = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
im->cache->dirty = eina_inlist_prepend(im->cache->dirty, EINA_INLIST_GET(im));
|
im->cache->dirty = eina_inlist_prepend(im->cache->dirty, EINA_INLIST_GET(im));
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
if (im->cache_key)
|
if (im->cache_key)
|
||||||
{
|
{
|
||||||
eina_stringshare_del(im->cache_key);
|
eina_stringshare_del(im->cache_key);
|
||||||
|
@ -85,13 +79,7 @@ _evas_cache_image_dirty_del(Image_Entry *im)
|
||||||
if (!im->flags.dirty) return;
|
if (!im->flags.dirty) return;
|
||||||
im->flags.dirty = 0;
|
im->flags.dirty = 0;
|
||||||
im->flags.cached = 0;
|
im->flags.cached = 0;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
im->cache->dirty = eina_inlist_remove(im->cache->dirty, EINA_INLIST_GET(im));
|
im->cache->dirty = eina_inlist_remove(im->cache->dirty, EINA_INLIST_GET(im));
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -104,13 +92,7 @@ _evas_cache_image_activ_add(Image_Entry *im)
|
||||||
if (!im->cache_key) return;
|
if (!im->cache_key) return;
|
||||||
im->flags.activ = 1;
|
im->flags.activ = 1;
|
||||||
im->flags.cached = 1;
|
im->flags.cached = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
eina_hash_direct_add(im->cache->activ, im->cache_key, im);
|
eina_hash_direct_add(im->cache->activ, im->cache_key, im);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -120,13 +102,7 @@ _evas_cache_image_activ_del(Image_Entry *im)
|
||||||
if (!im->cache_key) return;
|
if (!im->cache_key) return;
|
||||||
im->flags.activ = 0;
|
im->flags.activ = 0;
|
||||||
im->flags.cached = 0;
|
im->flags.cached = 0;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
eina_hash_del(im->cache->activ, im->cache_key, im);
|
eina_hash_del(im->cache->activ, im->cache_key, im);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -139,15 +115,9 @@ _evas_cache_image_lru_add(Image_Entry *im)
|
||||||
if (!im->cache_key) return;
|
if (!im->cache_key) return;
|
||||||
im->flags.lru = 1;
|
im->flags.lru = 1;
|
||||||
im->flags.cached = 1;
|
im->flags.cached = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
eina_hash_direct_add(im->cache->inactiv, im->cache_key, im);
|
eina_hash_direct_add(im->cache->inactiv, im->cache_key, im);
|
||||||
im->cache->lru = eina_inlist_prepend(im->cache->lru, EINA_INLIST_GET(im));
|
im->cache->lru = eina_inlist_prepend(im->cache->lru, EINA_INLIST_GET(im));
|
||||||
im->cache->usage += im->cache->func.mem_size_get(im);
|
im->cache->usage += im->cache->func.mem_size_get(im);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -157,15 +127,9 @@ _evas_cache_image_lru_del(Image_Entry *im)
|
||||||
if (!im->cache_key) return;
|
if (!im->cache_key) return;
|
||||||
im->flags.lru = 0;
|
im->flags.lru = 0;
|
||||||
im->flags.cached = 0;
|
im->flags.cached = 0;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
eina_hash_del(im->cache->inactiv, im->cache_key, im);
|
eina_hash_del(im->cache->inactiv, im->cache_key, im);
|
||||||
im->cache->lru = eina_inlist_remove(im->cache->lru, EINA_INLIST_GET(im));
|
im->cache->lru = eina_inlist_remove(im->cache->lru, EINA_INLIST_GET(im));
|
||||||
im->cache->usage -= im->cache->func.mem_size_get(im);
|
im->cache->usage -= im->cache->func.mem_size_get(im);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -177,13 +141,7 @@ _evas_cache_image_lru_nodata_add(Image_Entry *im)
|
||||||
_evas_cache_image_lru_del(im);
|
_evas_cache_image_lru_del(im);
|
||||||
im->flags.lru = 1;
|
im->flags.lru = 1;
|
||||||
im->flags.cached = 1;
|
im->flags.cached = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
im->cache->lru_nodata = eina_inlist_prepend(im->cache->lru_nodata, EINA_INLIST_GET(im));
|
im->cache->lru_nodata = eina_inlist_prepend(im->cache->lru_nodata, EINA_INLIST_GET(im));
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -192,13 +150,7 @@ _evas_cache_image_lru_nodata_del(Image_Entry *im)
|
||||||
if (!im->flags.lru_nodata) return;
|
if (!im->flags.lru_nodata) return;
|
||||||
im->flags.lru = 0;
|
im->flags.lru = 0;
|
||||||
im->flags.cached = 0;
|
im->flags.cached = 0;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
im->cache->lru_nodata = eina_inlist_remove(im->cache->lru_nodata, EINA_INLIST_GET(im));
|
im->cache->lru_nodata = eina_inlist_remove(im->cache->lru_nodata, EINA_INLIST_GET(im));
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->cache->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -231,9 +183,6 @@ _evas_cache_image_entry_delete(Evas_Cache_Image *cache, Image_Entry *ie)
|
||||||
#ifdef BUILD_ASYNC_PRELOAD
|
#ifdef BUILD_ASYNC_PRELOAD
|
||||||
LKD(ie->lock);
|
LKD(ie->lock);
|
||||||
LKD(ie->lock_cancel);
|
LKD(ie->lock_cancel);
|
||||||
#endif
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKD(ie->lock_references);
|
|
||||||
#endif
|
#endif
|
||||||
cache->func.dealloc(ie);
|
cache->func.dealloc(ie);
|
||||||
}
|
}
|
||||||
|
@ -300,9 +249,6 @@ _evas_cache_image_entry_new(Evas_Cache_Image *cache,
|
||||||
if (tstamp) ie->tstamp = *tstamp;
|
if (tstamp) ie->tstamp = *tstamp;
|
||||||
else memset(&ie->tstamp, 0, sizeof(Image_Timestamp));
|
else memset(&ie->tstamp, 0, sizeof(Image_Timestamp));
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(ie->lock_references);
|
|
||||||
#endif
|
|
||||||
#ifdef BUILD_ASYNC_PRELOAD
|
#ifdef BUILD_ASYNC_PRELOAD
|
||||||
LKI(ie->lock);
|
LKI(ie->lock);
|
||||||
LKI(ie->lock_cancel);
|
LKI(ie->lock_cancel);
|
||||||
|
@ -439,17 +385,11 @@ _evas_cache_image_async_cancel(void *data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ie->flags.loaded) _evas_cache_image_async_end(ie);
|
if (ie->flags.loaded) _evas_cache_image_async_end(ie);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(ie->lock_references);
|
|
||||||
#endif
|
|
||||||
if (ie->references == 0)
|
if (ie->references == 0)
|
||||||
{
|
{
|
||||||
_evas_cache_image_lru_add(ie);
|
_evas_cache_image_lru_add(ie);
|
||||||
cache = ie->cache;
|
cache = ie->cache;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(ie->lock_references);
|
|
||||||
#endif
|
|
||||||
if (cache) evas_cache_image_flush(cache);
|
if (cache) evas_cache_image_flush(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,20 +479,11 @@ evas_cache_image_get(Evas_Cache_Image *cache)
|
||||||
EAPI void
|
EAPI void
|
||||||
evas_cache_image_set(Evas_Cache_Image *cache, unsigned int limit)
|
evas_cache_image_set(Evas_Cache_Image *cache, unsigned int limit)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(cache->lock);
|
|
||||||
#endif
|
|
||||||
if (cache->limit == limit)
|
if (cache->limit == limit)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(cache->lock);
|
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cache->limit = limit;
|
cache->limit = limit;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(cache->lock);
|
|
||||||
#endif
|
|
||||||
evas_cache_image_flush(cache);
|
evas_cache_image_flush(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,9 +507,6 @@ evas_cache_image_init(const Evas_Cache_Image_Func *cb)
|
||||||
cache->inactiv = eina_hash_string_superfast_new(NULL);
|
cache->inactiv = eina_hash_string_superfast_new(NULL);
|
||||||
cache->activ = eina_hash_string_superfast_new(NULL);
|
cache->activ = eina_hash_string_superfast_new(NULL);
|
||||||
cache->references = 1;
|
cache->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(cache->lock);
|
|
||||||
#endif
|
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,22 +524,11 @@ evas_cache_image_shutdown(Evas_Cache_Image *cache)
|
||||||
Eina_List *delete_list;
|
Eina_List *delete_list;
|
||||||
Image_Entry *im;
|
Image_Entry *im;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(cache->lock);
|
|
||||||
#endif
|
|
||||||
cache->references--;
|
cache->references--;
|
||||||
if (cache->references != 0)
|
if (cache->references != 0)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(cache->lock);
|
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
/* Release and destroy lock early ! */
|
|
||||||
LKU(cache->lock);
|
|
||||||
LKD(cache->lock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BUILD_ASYNC_PRELOAD
|
#ifdef BUILD_ASYNC_PRELOAD
|
||||||
EINA_LIST_FREE(cache->preload, im)
|
EINA_LIST_FREE(cache->preload, im)
|
||||||
|
@ -755,13 +672,7 @@ evas_cache_image_request(Evas_Cache_Image *cache, const char *file,
|
||||||
hkey[size] = '\0';
|
hkey[size] = '\0';
|
||||||
|
|
||||||
/* find image by key in active hash */
|
/* find image by key in active hash */
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(cache->lock);
|
|
||||||
#endif
|
|
||||||
im = eina_hash_find(cache->activ, hkey);
|
im = eina_hash_find(cache->activ, hkey);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(cache->lock);
|
|
||||||
#endif
|
|
||||||
if (im)
|
if (im)
|
||||||
{
|
{
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
|
@ -784,13 +695,7 @@ evas_cache_image_request(Evas_Cache_Image *cache, const char *file,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find image by key in inactive/lru hash */
|
/* find image by key in inactive/lru hash */
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(cache->lock);
|
|
||||||
#endif
|
|
||||||
im = eina_hash_find(cache->inactiv, hkey);
|
im = eina_hash_find(cache->inactiv, hkey);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(cache->lock);
|
|
||||||
#endif
|
|
||||||
if (im)
|
if (im)
|
||||||
{
|
{
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
|
@ -834,13 +739,7 @@ evas_cache_image_request(Evas_Cache_Image *cache, const char *file,
|
||||||
|
|
||||||
on_ok:
|
on_ok:
|
||||||
*error = EVAS_LOAD_ERROR_NONE;
|
*error = EVAS_LOAD_ERROR_NONE;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
im->references++;
|
im->references++;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
return im;
|
return im;
|
||||||
|
|
||||||
on_stat_error:
|
on_stat_error:
|
||||||
|
@ -872,33 +771,14 @@ evas_cache_image_drop(Image_Entry *im)
|
||||||
Evas_Cache_Image *cache;
|
Evas_Cache_Image *cache;
|
||||||
int references;
|
int references;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
im->references--;
|
im->references--;
|
||||||
if (im->references < 0) im->references = 0;
|
if (im->references < 0) im->references = 0;
|
||||||
references = im->references;
|
references = im->references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cache = im->cache;
|
cache = im->cache;
|
||||||
|
|
||||||
if (references == 0)
|
if (references == 0)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->ref_fq_add);
|
|
||||||
LKL(im->ref_fq_del);
|
|
||||||
if (im->ref_fq[0] != im->ref_fq[1])
|
|
||||||
{
|
|
||||||
LKU(im->ref_fq_add);
|
|
||||||
LKU(im->ref_fq_del);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LKU(im->ref_fq_add);
|
|
||||||
LKU(im->ref_fq_del);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BUILD_ASYNC_PRELOAD
|
#ifdef BUILD_ASYNC_PRELOAD
|
||||||
if (im->preload)
|
if (im->preload)
|
||||||
{
|
{
|
||||||
|
@ -922,13 +802,7 @@ evas_cache_image_data_not_needed(Image_Entry *im)
|
||||||
{
|
{
|
||||||
int references;
|
int references;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
references = im->references;
|
references = im->references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
if (references > 1) return;
|
if (references > 1) return;
|
||||||
if ((im->flags.dirty) || (!im->flags.need_data)) return;
|
if ((im->flags.dirty) || (!im->flags.need_data)) return;
|
||||||
_evas_cache_image_lru_nodata_add(im);
|
_evas_cache_image_lru_nodata_add(im);
|
||||||
|
@ -945,13 +819,7 @@ evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned
|
||||||
{
|
{
|
||||||
#ifndef EVAS_CSERVE
|
#ifndef EVAS_CSERVE
|
||||||
int references;
|
int references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
references = im->references;
|
references = im->references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
// if ref 1 also copy if using shared cache as its read-only
|
// if ref 1 also copy if using shared cache as its read-only
|
||||||
if (references == 1) im_dirty = im;
|
if (references == 1) im_dirty = im;
|
||||||
else
|
else
|
||||||
|
@ -965,13 +833,7 @@ evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned
|
||||||
if (cache->func.debug) cache->func.debug("dirty-src", im);
|
if (cache->func.debug) cache->func.debug("dirty-src", im);
|
||||||
cache->func.dirty(im_dirty, im);
|
cache->func.dirty(im_dirty, im);
|
||||||
if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
|
if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im_dirty->lock_references);
|
|
||||||
#endif
|
|
||||||
im_dirty->references = 1;
|
im_dirty->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im_dirty->lock_references);
|
|
||||||
#endif
|
|
||||||
evas_cache_image_drop(im);
|
evas_cache_image_drop(im);
|
||||||
}
|
}
|
||||||
_evas_cache_image_dirty_add(im_dirty);
|
_evas_cache_image_dirty_add(im_dirty);
|
||||||
|
@ -996,13 +858,7 @@ evas_cache_image_alone(Image_Entry *im)
|
||||||
int references;
|
int references;
|
||||||
|
|
||||||
cache = im->cache;
|
cache = im->cache;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
references = im->references;
|
references = im->references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (references <= 1)
|
if (references <= 1)
|
||||||
{
|
{
|
||||||
|
@ -1018,13 +874,7 @@ evas_cache_image_alone(Image_Entry *im)
|
||||||
if (cache->func.debug) cache->func.debug("dirty-src", im);
|
if (cache->func.debug) cache->func.debug("dirty-src", im);
|
||||||
cache->func.dirty(im_dirty, im);
|
cache->func.dirty(im_dirty, im);
|
||||||
if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
|
if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im_dirty->lock_references);
|
|
||||||
#endif
|
|
||||||
im_dirty->references = 1;
|
im_dirty->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im_dirty->lock_references);
|
|
||||||
#endif
|
|
||||||
evas_cache_image_drop(im);
|
evas_cache_image_drop(im);
|
||||||
}
|
}
|
||||||
return im_dirty;
|
return im_dirty;
|
||||||
|
@ -1057,13 +907,7 @@ evas_cache_image_copied_data(Evas_Cache_Image *cache,
|
||||||
_evas_cache_image_entry_delete(cache, im);
|
_evas_cache_image_entry_delete(cache, im);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
im->references = 1;
|
im->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
if (cache->func.debug) cache->func.debug("copied-data", im);
|
if (cache->func.debug) cache->func.debug("copied-data", im);
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
@ -1088,13 +932,7 @@ evas_cache_image_data(Evas_Cache_Image *cache, unsigned int w, unsigned int h, D
|
||||||
_evas_cache_image_entry_delete(cache, im);
|
_evas_cache_image_entry_delete(cache, im);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
im->references = 1;
|
im->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
if (cache->func.debug) cache->func.debug("data", im);
|
if (cache->func.debug) cache->func.debug("data", im);
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
@ -1136,13 +974,7 @@ evas_cache_image_size_set(Image_Entry *im, unsigned int w, unsigned int h)
|
||||||
_evas_cache_image_entry_surface_alloc(cache, im2, w, h);
|
_evas_cache_image_entry_surface_alloc(cache, im2, w, h);
|
||||||
error = cache->func.size_set(im2, im, w, h);
|
error = cache->func.size_set(im2, im, w, h);
|
||||||
if (error != 0) goto on_error;
|
if (error != 0) goto on_error;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im2->lock_references);
|
|
||||||
#endif
|
|
||||||
im2->references = 1;
|
im2->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im2->lock_references);
|
|
||||||
#endif
|
|
||||||
evas_cache_image_drop(im);
|
evas_cache_image_drop(im);
|
||||||
if (cache->func.debug) cache->func.debug("size_set", im2);
|
if (cache->func.debug) cache->func.debug("size_set", im2);
|
||||||
return im2;
|
return im2;
|
||||||
|
@ -1376,13 +1208,7 @@ evas_cache_image_empty(Evas_Cache_Image *cache)
|
||||||
|
|
||||||
im = _evas_cache_image_entry_new(cache, NULL, NULL, NULL, NULL, NULL, NULL);
|
im = _evas_cache_image_entry_new(cache, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
if (!im) return NULL;
|
if (!im) return NULL;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(im->lock_references);
|
|
||||||
#endif
|
|
||||||
im->references = 1;
|
im->references = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(im->lock_references);
|
|
||||||
#endif
|
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@ evas_init(void)
|
||||||
#ifdef BUILD_ASYNC_PRELOAD
|
#ifdef BUILD_ASYNC_PRELOAD
|
||||||
_evas_preload_thread_init();
|
_evas_preload_thread_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return _evas_init_count;
|
return _evas_init_count;
|
||||||
|
|
||||||
|
@ -77,13 +74,6 @@ evas_shutdown(void)
|
||||||
if (--_evas_init_count != 0)
|
if (--_evas_init_count != 0)
|
||||||
return _evas_init_count;
|
return _evas_init_count;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (evas_common_frameq_enabled())
|
|
||||||
{
|
|
||||||
evas_common_frameq_finish();
|
|
||||||
evas_common_frameq_destroy();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef BUILD_ASYNC_EVENTS
|
#ifdef BUILD_ASYNC_EVENTS
|
||||||
_evas_preload_thread_shutdown();
|
_evas_preload_thread_shutdown();
|
||||||
#endif
|
#endif
|
||||||
|
@ -158,10 +148,6 @@ evas_free(Evas *e)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (e->walking_list == 0) evas_render_idle_flush(e);
|
if (e->walking_list == 0) evas_render_idle_flush(e);
|
||||||
|
|
||||||
if (e->walking_list > 0) return;
|
if (e->walking_list > 0) return;
|
||||||
|
@ -344,10 +330,6 @@ evas_output_size_set(Evas *e, int w, int h)
|
||||||
if (w < 1) w = 1;
|
if (w < 1) w = 1;
|
||||||
if (h < 1) h = 1;
|
if (h < 1) h = 1;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
e->output.w = w;
|
e->output.w = w;
|
||||||
e->output.h = h;
|
e->output.h = h;
|
||||||
e->output.changed = 1;
|
e->output.changed = 1;
|
||||||
|
|
|
@ -888,10 +888,6 @@ evas_object_image_data_set(Evas_Object *obj, void *data)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
_evas_object_image_cleanup(obj, o);
|
_evas_object_image_cleanup(obj, o);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (o->engine_data)
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
#endif
|
|
||||||
p_data = o->engine_data;
|
p_data = o->engine_data;
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
|
@ -968,9 +964,6 @@ evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing)
|
||||||
return NULL;
|
return NULL;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
if (!o->engine_data) return NULL;
|
if (!o->engine_data) return NULL;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
data = NULL;
|
data = NULL;
|
||||||
if (obj->layer->evas->engine.func->image_scale_hint_set)
|
if (obj->layer->evas->engine.func->image_scale_hint_set)
|
||||||
|
@ -1153,9 +1146,6 @@ evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool has_alpha)
|
||||||
{
|
{
|
||||||
int stride = 0;
|
int stride = 0;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
#endif
|
|
||||||
o->engine_data = obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output,
|
o->engine_data = obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output,
|
||||||
o->engine_data,
|
o->engine_data,
|
||||||
o->cur.has_alpha);
|
o->cur.has_alpha);
|
||||||
|
@ -1676,13 +1666,6 @@ evas_object_image_colorspace_set(Evas_Object *obj, Evas_Colorspace cspace)
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
_evas_object_image_cleanup(obj, o);
|
_evas_object_image_cleanup(obj, o);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if ((Evas_Colorspace)o->cur.cspace != cspace)
|
|
||||||
{
|
|
||||||
if (o->engine_data)
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
o->cur.cspace = cspace;
|
o->cur.cspace = cspace;
|
||||||
if (o->engine_data)
|
if (o->engine_data)
|
||||||
|
@ -1823,10 +1806,6 @@ evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
if (o->scale_hint == hint) return;
|
if (o->scale_hint == hint) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (o->engine_data)
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
#endif
|
|
||||||
o->scale_hint = hint;
|
o->scale_hint = hint;
|
||||||
if (o->engine_data)
|
if (o->engine_data)
|
||||||
{
|
{
|
||||||
|
@ -1874,10 +1853,6 @@ evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hin
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
if (o->content_hint == hint) return;
|
if (o->content_hint == hint) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (o->engine_data)
|
|
||||||
evas_common_pipe_op_image_flush(o->engine_data);
|
|
||||||
#endif
|
|
||||||
o->content_hint = hint;
|
o->content_hint = hint;
|
||||||
if (o->engine_data)
|
if (o->engine_data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -408,9 +408,6 @@ evas_object_del(Evas_Object *obj)
|
||||||
obj->del_ref = EINA_TRUE;
|
obj->del_ref = EINA_TRUE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
evas_object_hide(obj);
|
evas_object_hide(obj);
|
||||||
if (obj->focused)
|
if (obj->focused)
|
||||||
|
|
|
@ -352,11 +352,6 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
|
||||||
obj->layer->evas->pointer.y, 1, 1);
|
obj->layer->evas->pointer.y, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (o->font)
|
|
||||||
evas_common_pipe_op_text_flush((RGBA_Font *) o->font);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DO IT */
|
/* DO IT */
|
||||||
if (o->font)
|
if (o->font)
|
||||||
{
|
{
|
||||||
|
@ -1874,9 +1869,6 @@ _evas_object_text_rehint(Evas_Object *obj)
|
||||||
|
|
||||||
o = (Evas_Object_Text *)(obj->object_data);
|
o = (Evas_Object_Text *)(obj->object_data);
|
||||||
if (!o->font) return;
|
if (!o->font) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_pipe_op_text_flush((RGBA_Font *) o->font);
|
|
||||||
#endif
|
|
||||||
evas_font_load_hinting_set(obj->layer->evas, o->font,
|
evas_font_load_hinting_set(obj->layer->evas, o->font,
|
||||||
obj->layer->evas->hinting);
|
obj->layer->evas->hinting);
|
||||||
was = evas_object_is_in_output_rect(obj,
|
was = evas_object_is_in_output_rect(obj,
|
||||||
|
|
|
@ -9942,9 +9942,6 @@ _evas_object_textblock_rehint(Evas_Object *obj)
|
||||||
Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it);
|
Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it);
|
||||||
if (ti->parent.format->font.font)
|
if (ti->parent.format->font.font)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_pipe_op_text_flush((RGBA_Font *) ti->parent.format->font.font);
|
|
||||||
#endif
|
|
||||||
evas_font_load_hinting_set(obj->layer->evas,
|
evas_font_load_hinting_set(obj->layer->evas,
|
||||||
ti->parent.format->font.font,
|
ti->parent.format->font.font,
|
||||||
obj->layer->evas->hinting);
|
obj->layer->evas->hinting);
|
||||||
|
|
|
@ -264,14 +264,9 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
obj->rect_del = 0;
|
obj->rect_del = 0;
|
||||||
obj->render_pre = 0;
|
obj->render_pre = 0;
|
||||||
|
|
||||||
#ifndef EVAS_FRAME_QUEUING
|
|
||||||
/* because of clip objects - delete 2 cycles later */
|
|
||||||
if (obj->delete_me == 2)
|
if (obj->delete_me == 2)
|
||||||
#else
|
eina_array_push(delete_objects, obj);
|
||||||
if (obj->delete_me == evas_common_frameq_get_frameq_sz() + 2)
|
else if (obj->delete_me != 0) obj->delete_me++;
|
||||||
#endif
|
|
||||||
eina_array_push(delete_objects, obj);
|
|
||||||
else if (obj->delete_me != 0) obj->delete_me++;
|
|
||||||
/* If the object will be removed, we should not cache anything during this run. */
|
/* If the object will be removed, we should not cache anything during this run. */
|
||||||
if (obj->delete_me != 0) clean_them = EINA_TRUE;
|
if (obj->delete_me != 0) clean_them = EINA_TRUE;
|
||||||
|
|
||||||
|
@ -1755,10 +1750,6 @@ evas_render_updates(Evas *e)
|
||||||
return NULL;
|
return NULL;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush_ready ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!e->changed) return NULL;
|
if (!e->changed) return NULL;
|
||||||
return evas_render_updates_internal(e, 1, 1);
|
return evas_render_updates_internal(e, 1, 1);
|
||||||
}
|
}
|
||||||
|
@ -1770,10 +1761,6 @@ evas_render(Evas *e)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush_ready ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!e->changed) return;
|
if (!e->changed) return;
|
||||||
evas_render_updates_internal(e, 0, 1);
|
evas_render_updates_internal(e, 0, 1);
|
||||||
}
|
}
|
||||||
|
@ -1817,15 +1804,7 @@ evas_render_idle_flush(Evas *e)
|
||||||
EAPI void
|
EAPI void
|
||||||
evas_sync(Evas *e)
|
evas_sync(Evas *e)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
(void) e;
|
||||||
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
|
|
||||||
return;
|
|
||||||
MAGIC_CHECK_END();
|
|
||||||
|
|
||||||
evas_common_frameq_flush();
|
|
||||||
#else
|
|
||||||
(void) e;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1895,22 +1874,15 @@ evas_render_object_recalc(Evas_Object *obj)
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
#ifndef EVAS_FRAME_QUEUING
|
|
||||||
if ((!obj->changed) && (obj->delete_me < 2))
|
if ((!obj->changed) && (obj->delete_me < 2))
|
||||||
#else
|
{
|
||||||
if ((!obj->changed))
|
Evas *e;
|
||||||
#endif
|
|
||||||
{
|
|
||||||
Evas *e;
|
|
||||||
|
|
||||||
e = obj->layer->evas;
|
e = obj->layer->evas;
|
||||||
if ((!e) || (e->cleanup)) return;
|
if ((!e) || (e->cleanup)) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
eina_array_push(&e->pending_objects, obj);
|
||||||
if (obj->delete_me >= evas_common_frameq_get_frameq_sz() + 2) return;
|
obj->changed = 1;
|
||||||
#endif
|
}
|
||||||
eina_array_push(&e->pending_objects, obj);
|
|
||||||
obj->changed = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
|
/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
|
||||||
|
|
|
@ -67,10 +67,6 @@ EAPI int evas_common_font_query_char_at_coords (RGBA_Font *fn, con
|
||||||
EAPI int evas_common_font_query_last_up_to_pos (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y);
|
EAPI int evas_common_font_query_last_up_to_pos (RGBA_Font *fn, const Evas_Text_Props *intl_props, int x, int y);
|
||||||
EAPI int evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len);
|
EAPI int evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len);
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
EAPI void evas_common_font_draw_finish(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void evas_common_font_load_init(void);
|
void evas_common_font_load_init(void);
|
||||||
void evas_common_font_load_shutdown(void);
|
void evas_common_font_load_shutdown(void);
|
||||||
|
|
||||||
|
|
|
@ -42,13 +42,6 @@ evas_common_font_draw_init(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
EAPI void
|
|
||||||
evas_common_font_draw_finish(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BiDi handling: We receive the shaped string + other props from text_props,
|
* BiDi handling: We receive the shaped string + other props from text_props,
|
||||||
* we need to reorder it so we'll have the visual string (the way we draw)
|
* we need to reorder it so we'll have the visual string (the way we draw)
|
||||||
|
@ -341,9 +334,6 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int
|
||||||
if (ext_w <= 0) return;
|
if (ext_w <= 0) return;
|
||||||
if (ext_h <= 0) return;
|
if (ext_h <= 0) return;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(fn->lock);
|
|
||||||
#endif
|
|
||||||
// evas_common_font_size_use(fn);
|
// evas_common_font_size_use(fn);
|
||||||
func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, dst, 1, dc->render_op);
|
func = evas_common_gfx_func_composite_mask_color_span_get(dc->col.col, dst, 1, dc->render_op);
|
||||||
|
|
||||||
|
@ -373,7 +363,4 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int
|
||||||
}
|
}
|
||||||
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;
|
dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch;
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(fn->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,11 +475,6 @@ evas_common_font_memory_load(const char *name, int size, const void *data, int d
|
||||||
fi->hinting = fn->hinting;
|
fi->hinting = fn->hinting;
|
||||||
fn->references = 1;
|
fn->references = 1;
|
||||||
LKI(fn->lock);
|
LKI(fn->lock);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(fn->ref_fq_add);
|
|
||||||
LKI(fn->ref_fq_del);
|
|
||||||
eina_condition_new(&(fn->cond_fq_del), &(fn->ref_fq_del));
|
|
||||||
#endif
|
|
||||||
if (fi->inuse) evas_common_font_int_promote(fi);
|
if (fi->inuse) evas_common_font_int_promote(fi);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -539,11 +534,6 @@ evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend)
|
||||||
fi->hinting = fn->hinting;
|
fi->hinting = fn->hinting;
|
||||||
fn->references = 1;
|
fn->references = 1;
|
||||||
LKI(fn->lock);
|
LKI(fn->lock);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(fn->ref_fq_add);
|
|
||||||
LKI(fn->ref_fq_del);
|
|
||||||
eina_condition_new(&(fn->cond_fq_del), &(fn->ref_fq_del));
|
|
||||||
#endif
|
|
||||||
if (fi->inuse) evas_common_font_int_promote(fi);
|
if (fi->inuse) evas_common_font_int_promote(fi);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -607,18 +597,6 @@ evas_common_font_free(RGBA_Font *fn)
|
||||||
if (!fn) return;
|
if (!fn) return;
|
||||||
fn->references--;
|
fn->references--;
|
||||||
if (fn->references > 0) return;
|
if (fn->references > 0) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(fn->ref_fq_add);
|
|
||||||
LKL(fn->ref_fq_del);
|
|
||||||
if (fn->ref_fq[0] != fn->ref_fq[1])
|
|
||||||
{
|
|
||||||
LKU(fn->ref_fq_add);
|
|
||||||
LKU(fn->ref_fq_del);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LKU(fn->ref_fq_add);
|
|
||||||
LKU(fn->ref_fq_del);
|
|
||||||
#endif
|
|
||||||
EINA_LIST_FOREACH(fn->fonts, l, fi)
|
EINA_LIST_FOREACH(fn->fonts, l, fi)
|
||||||
{
|
{
|
||||||
fi->references--;
|
fi->references--;
|
||||||
|
@ -632,11 +610,6 @@ evas_common_font_free(RGBA_Font *fn)
|
||||||
eina_list_free(fn->fonts);
|
eina_list_free(fn->fonts);
|
||||||
if (fn->fash) fn->fash->freeme(fn->fash);
|
if (fn->fash) fn->fash->freeme(fn->fash);
|
||||||
LKD(fn->lock);
|
LKD(fn->lock);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKD(fn->ref_fq_add);
|
|
||||||
LKD(fn->ref_fq_del);
|
|
||||||
eina_condition_free(&(fn->cond_fq_del));
|
|
||||||
#endif
|
|
||||||
free(fn);
|
free(fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,6 @@ evas_common_font_shutdown(void)
|
||||||
evas_common_font_flush();
|
evas_common_font_flush();
|
||||||
|
|
||||||
FT_Done_FreeType(evas_ft_lib);
|
FT_Done_FreeType(evas_ft_lib);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_font_draw_finish();
|
|
||||||
#endif
|
|
||||||
evas_ft_lib = 0;
|
evas_ft_lib = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,16 +8,6 @@ extern LK(lock_bidi); // for fribidi API calls
|
||||||
extern LK(lock_ot); // for harfbuzz calls
|
extern LK(lock_ot); // for harfbuzz calls
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# if defined(EVAS_FRAME_QUEUING) || defined(BUILD_PIPE_RENDER)
|
|
||||||
# define FTLOCK() LKL(lock_font_draw)
|
|
||||||
# define FTUNLOCK() LKU(lock_font_draw)
|
|
||||||
|
|
||||||
# define BIDILOCK() LKL(lock_bidi)
|
|
||||||
# define BIDIUNLOCK() LKU(lock_bidi)
|
|
||||||
|
|
||||||
# define OTLOCK() LKL(lock_ot)
|
|
||||||
# define OTUNLOCK() LKU(lock_ot)
|
|
||||||
# else
|
|
||||||
# define FTLOCK(x)
|
# define FTLOCK(x)
|
||||||
# define FTUNLOCK(x)
|
# define FTUNLOCK(x)
|
||||||
|
|
||||||
|
@ -27,7 +17,6 @@ extern LK(lock_ot); // for harfbuzz calls
|
||||||
/* Macros for text walking */
|
/* Macros for text walking */
|
||||||
# define OTLOCK()
|
# define OTLOCK()
|
||||||
# define OTUNLOCK()
|
# define OTUNLOCK()
|
||||||
# endif
|
|
||||||
|
|
||||||
void evas_common_font_source_unload(RGBA_Font_Source *fs);
|
void evas_common_font_source_unload(RGBA_Font_Source *fs);
|
||||||
void evas_common_font_source_reload(RGBA_Font_Source *fs);
|
void evas_common_font_source_reload(RGBA_Font_Source *fs);
|
||||||
|
|
|
@ -139,12 +139,6 @@ _evas_common_rgba_image_new(void)
|
||||||
if (!im) return NULL;
|
if (!im) return NULL;
|
||||||
im->flags = RGBA_IMAGE_NOTHING;
|
im->flags = RGBA_IMAGE_NOTHING;
|
||||||
im->ref = 1;
|
im->ref = 1;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(im->cache_entry.ref_fq_add);
|
|
||||||
LKI(im->cache_entry.ref_fq_del);
|
|
||||||
eina_condition_new(&(im->cache_entry.cond_fq_del),
|
|
||||||
&(im->cache_entry.ref_fq_del));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
evas_common_rgba_image_scalecache_init(&im->cache_entry);
|
evas_common_rgba_image_scalecache_init(&im->cache_entry);
|
||||||
|
|
||||||
|
@ -158,11 +152,6 @@ _evas_common_rgba_image_delete(Image_Entry *ie)
|
||||||
|
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
evas_common_pipe_free(im);
|
evas_common_pipe_free(im);
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKD(im->cache_entry.ref_fq_add);
|
|
||||||
LKD(im->cache_entry.ref_fq_del);
|
|
||||||
eina_condition_free(&(im->cache_entry.cond_fq_del));
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
evas_common_rgba_image_scalecache_shutdown(&im->cache_entry);
|
evas_common_rgba_image_scalecache_shutdown(&im->cache_entry);
|
||||||
if (ie->info.module) evas_module_unref((Evas_Module *)ie->info.module);
|
if (ie->info.module) evas_module_unref((Evas_Module *)ie->info.module);
|
||||||
|
|
|
@ -37,9 +37,6 @@ struct _Scaleitem
|
||||||
unsigned int dst_w, dst_h;
|
unsigned int dst_w, dst_h;
|
||||||
unsigned int flop;
|
unsigned int flop;
|
||||||
unsigned int size_adjust;
|
unsigned int size_adjust;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLK(lock);
|
|
||||||
#endif
|
|
||||||
Eina_Bool forced_unload : 1;
|
Eina_Bool forced_unload : 1;
|
||||||
Eina_Bool smooth : 1;
|
Eina_Bool smooth : 1;
|
||||||
Eina_Bool populate_me : 1;
|
Eina_Bool populate_me : 1;
|
||||||
|
@ -124,9 +121,6 @@ evas_common_rgba_image_scalecache_dirty(Image_Entry *ie)
|
||||||
{
|
{
|
||||||
Scaleitem *sci;
|
Scaleitem *sci;
|
||||||
sci = im->cache.list->data;
|
sci = im->cache.list->data;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
WRLKL(sci->lock);
|
|
||||||
#endif
|
|
||||||
im->cache.list = eina_list_remove(im->cache.list, sci);
|
im->cache.list = eina_list_remove(im->cache.list, sci);
|
||||||
if (sci->im)
|
if (sci->im)
|
||||||
{
|
{
|
||||||
|
@ -140,10 +134,6 @@ evas_common_rgba_image_scalecache_dirty(Image_Entry *ie)
|
||||||
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
||||||
LKU(cache_lock);
|
LKU(cache_lock);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLKU(sci->lock);
|
|
||||||
RWLKD(sci->lock);
|
|
||||||
#endif
|
|
||||||
free(sci);
|
free(sci);
|
||||||
}
|
}
|
||||||
LKU(im->cache.lock);
|
LKU(im->cache.lock);
|
||||||
|
@ -238,9 +228,6 @@ _sci_find(RGBA_Image *im,
|
||||||
{
|
{
|
||||||
l = eina_list_last(im->cache.list);
|
l = eina_list_last(im->cache.list);
|
||||||
sci = l->data;
|
sci = l->data;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
WRLKL(sci->lock);
|
|
||||||
#endif
|
|
||||||
im->cache.list = eina_list_remove_list(im->cache.list, l);
|
im->cache.list = eina_list_remove_list(im->cache.list, l);
|
||||||
if ((sci->usage == im->cache.newest_usage) ||
|
if ((sci->usage == im->cache.newest_usage) ||
|
||||||
(sci->usage_count == im->cache.newest_usage_count))
|
(sci->usage_count == im->cache.newest_usage_count))
|
||||||
|
@ -255,9 +242,6 @@ _sci_find(RGBA_Image *im,
|
||||||
// INF(" 1- %i", sci->dst_w * sci->dst_h * 4);
|
// INF(" 1- %i", sci->dst_w * sci->dst_h * 4);
|
||||||
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLKU(sci->lock);
|
|
||||||
#endif
|
|
||||||
if (max_scale_items < 1) return NULL;
|
if (max_scale_items < 1) return NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -268,9 +252,6 @@ _sci_find(RGBA_Image *im,
|
||||||
return NULL;
|
return NULL;
|
||||||
sci = calloc(1, sizeof(Scaleitem));
|
sci = calloc(1, sizeof(Scaleitem));
|
||||||
sci->parent_im = im;
|
sci->parent_im = im;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLKI(sci->lock);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
sci->usage = 0;
|
sci->usage = 0;
|
||||||
sci->usage_count = 0;
|
sci->usage_count = 0;
|
||||||
|
@ -304,9 +285,6 @@ _cache_prune(Scaleitem *notsci, Eina_Bool copies_only)
|
||||||
if (!sci) return;
|
if (!sci) return;
|
||||||
}
|
}
|
||||||
if (sci == notsci) return;
|
if (sci == notsci) return;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
WRLKL(sci->lock);
|
|
||||||
#endif
|
|
||||||
if (sci->im)
|
if (sci->im)
|
||||||
{
|
{
|
||||||
evas_common_rgba_image_free(&sci->im->cache_entry);
|
evas_common_rgba_image_free(&sci->im->cache_entry);
|
||||||
|
@ -322,10 +300,6 @@ _cache_prune(Scaleitem *notsci, Eina_Bool copies_only)
|
||||||
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci);
|
||||||
memset(sci, 0, sizeof(Eina_Inlist));
|
memset(sci, 0, sizeof(Eina_Inlist));
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLKU(sci->lock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// INF("FLUSH %i > %i", cache_size, max_cache_size);
|
// INF("FLUSH %i > %i", cache_size, max_cache_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -548,14 +522,10 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
LKL(im->cache.lock);
|
LKL(im->cache.lock);
|
||||||
if ((src_region_w == dst_region_w) && (src_region_h == dst_region_h))
|
if ((src_region_w == dst_region_w) && (src_region_h == dst_region_h))
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
||||||
if (!evas_common_frameq_enabled())
|
evas_cache_image_load_data(&im->cache_entry);
|
||||||
#endif
|
evas_common_image_colorspace_normalize(im);
|
||||||
{
|
|
||||||
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
|
||||||
evas_cache_image_load_data(&im->cache_entry);
|
|
||||||
evas_common_image_colorspace_normalize(im);
|
|
||||||
}
|
|
||||||
// noscales++;
|
// noscales++;
|
||||||
LKU(im->cache.lock);
|
LKU(im->cache.lock);
|
||||||
if (im->image.data)
|
if (im->image.data)
|
||||||
|
@ -575,14 +545,10 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
LKU(cache_lock);
|
LKU(cache_lock);
|
||||||
if (!sci)
|
if (!sci)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
||||||
if (!evas_common_frameq_enabled())
|
evas_cache_image_load_data(&im->cache_entry);
|
||||||
#endif
|
evas_common_image_colorspace_normalize(im);
|
||||||
{
|
|
||||||
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
|
||||||
evas_cache_image_load_data(&im->cache_entry);
|
|
||||||
evas_common_image_colorspace_normalize(im);
|
|
||||||
}
|
|
||||||
// misses++;
|
// misses++;
|
||||||
LKU(im->cache.lock);
|
LKU(im->cache.lock);
|
||||||
if (im->image.data)
|
if (im->image.data)
|
||||||
|
@ -740,9 +706,6 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
if (sci->flop >= FLOP_DEL) sci->flop -= FLOP_DEL;
|
if (sci->flop >= FLOP_DEL) sci->flop -= FLOP_DEL;
|
||||||
}
|
}
|
||||||
// INF("use cached!");
|
// INF("use cached!");
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RDLKL(sci->lock);
|
|
||||||
#endif
|
|
||||||
LKU(im->cache.lock);
|
LKU(im->cache.lock);
|
||||||
evas_common_scale_rgba_in_to_out_clip_sample
|
evas_common_scale_rgba_in_to_out_clip_sample
|
||||||
(sci->im, dst, dc,
|
(sci->im, dst, dc,
|
||||||
|
@ -750,15 +713,11 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
dst_region_w, dst_region_h,
|
dst_region_w, dst_region_h,
|
||||||
dst_region_x, dst_region_y,
|
dst_region_x, dst_region_y,
|
||||||
dst_region_w, dst_region_h);
|
dst_region_w, dst_region_h);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
RWLKU(sci->lock);
|
|
||||||
#endif
|
|
||||||
// hits++;
|
// hits++;
|
||||||
// INF("check %p %i < %i",
|
// INF("check %p %i < %i",
|
||||||
// im,
|
// im,
|
||||||
// (int)im->cache.orig_usage,
|
// (int)im->cache.orig_usage,
|
||||||
// (int)im->cache.newest_usage);
|
// (int)im->cache.newest_usage);
|
||||||
#ifndef EVAS_FRAME_QUEUING
|
|
||||||
/* while framequeuing is applied,
|
/* while framequeuing is applied,
|
||||||
* original image data is loaded by the main thread
|
* original image data is loaded by the main thread
|
||||||
* just before enqueuing the rendering op into the pipe.
|
* just before enqueuing the rendering op into the pipe.
|
||||||
|
@ -785,18 +744,12 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
||||||
if (!evas_common_frameq_enabled())
|
evas_cache_image_load_data(&im->cache_entry);
|
||||||
#endif
|
evas_common_image_colorspace_normalize(im);
|
||||||
{
|
|
||||||
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
|
||||||
evas_cache_image_load_data(&im->cache_entry);
|
|
||||||
evas_common_image_colorspace_normalize(im);
|
|
||||||
}
|
|
||||||
// misses++;
|
// misses++;
|
||||||
LKU(im->cache.lock);
|
LKU(im->cache.lock);
|
||||||
if (im->image.data)
|
if (im->image.data)
|
||||||
|
@ -817,14 +770,9 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst,
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
RGBA_Image *im = (RGBA_Image *)ie;
|
RGBA_Image *im = (RGBA_Image *)ie;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
||||||
if (!evas_common_frameq_enabled())
|
evas_cache_image_load_data(&im->cache_entry);
|
||||||
#endif
|
evas_common_image_colorspace_normalize(im);
|
||||||
{
|
|
||||||
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
|
|
||||||
evas_cache_image_load_data(&im->cache_entry);
|
|
||||||
evas_common_image_colorspace_normalize(im);
|
|
||||||
}
|
|
||||||
if (im->image.data)
|
if (im->image.data)
|
||||||
{
|
{
|
||||||
if (smooth)
|
if (smooth)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11,81 +11,9 @@ typedef struct _Thinfo
|
||||||
pthread_t thread_id;
|
pthread_t thread_id;
|
||||||
pthread_barrier_t *barrier;
|
pthread_barrier_t *barrier;
|
||||||
RGBA_Pipe_Thread_Info *info;
|
RGBA_Pipe_Thread_Info *info;
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
void *fq_info;
|
|
||||||
#endif
|
|
||||||
} Thinfo;
|
} Thinfo;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
struct _Evas_Surface
|
|
||||||
{
|
|
||||||
EINA_INLIST;
|
|
||||||
RGBA_Image *im;
|
|
||||||
int x, y, w, h;
|
|
||||||
int dontpush; // dont push the surface out after drawing done
|
|
||||||
};
|
|
||||||
typedef struct _Evas_Surface Evas_Surface;
|
|
||||||
|
|
||||||
struct _Evas_Frame
|
|
||||||
{
|
|
||||||
EINA_INLIST;
|
|
||||||
Evas_Surface *surfaces;
|
|
||||||
void *data;
|
|
||||||
int in_process;
|
|
||||||
int ready;
|
|
||||||
int dont_schedule;
|
|
||||||
struct timeval ready_time;
|
|
||||||
|
|
||||||
void (*output_redraws_next_update_push) (void *data, void *surface, int x, int y, int w, int h);
|
|
||||||
void (*output_flush) (void *data);
|
|
||||||
void (*output_set_priv)(void *data, void *cur, void *prev);
|
|
||||||
};
|
|
||||||
typedef struct _Evas_Frame Evas_Frame;
|
|
||||||
|
|
||||||
|
|
||||||
struct _Evas_FrameQ
|
|
||||||
{
|
|
||||||
int initialised;
|
|
||||||
Evas_Frame *frames;
|
|
||||||
Eina_Condition cond_new;
|
|
||||||
Eina_Condition cond_ready;
|
|
||||||
Eina_Condition cond_done;
|
|
||||||
LK(mutex);
|
|
||||||
|
|
||||||
int thread_num;
|
|
||||||
Thinfo thinfo[TH_MAX];
|
|
||||||
int frameq_sz;
|
|
||||||
|
|
||||||
Evas_Frame *cur_frame;
|
|
||||||
};
|
|
||||||
typedef struct _Evas_FrameQ Evas_FrameQ;
|
|
||||||
#define FRAMEQ_SZ_PER_THREAD 2
|
|
||||||
|
|
||||||
struct _Evas_Frameq_Thread_Info
|
|
||||||
{
|
|
||||||
Evas_FrameQ *frameq;
|
|
||||||
};
|
|
||||||
typedef struct _Evas_Frameq_Thread_Info Evas_Frameq_Thread_Info;
|
|
||||||
|
|
||||||
EAPI Evas_Surface *evas_common_frameq_new_surface(void *surface, int x, int y, int w, int h);
|
|
||||||
EAPI void evas_common_frameq_add_surface(Evas_Surface *surface);
|
|
||||||
EAPI void evas_common_frameq_set_frame_data(void *data,
|
|
||||||
void (*fn_output_redraws_next_update_push) (void *data, void *surface, int x, int y, int w, int h),
|
|
||||||
void (*fn_output_flush) (void *data),
|
|
||||||
void (*fn_output_set_priv)(void *data, void *cur, void *prev));
|
|
||||||
EAPI void evas_common_frameq_prepare_frame(void);
|
|
||||||
EAPI void evas_common_frameq_ready_frame(void);
|
|
||||||
EAPI void evas_common_frameq_init(void);
|
|
||||||
EAPI void evas_common_frameq_destroy(void);
|
|
||||||
EAPI void evas_common_frameq_flush(void);
|
|
||||||
EAPI void evas_common_frameq_flush_ready(void);
|
|
||||||
EAPI int evas_common_frameq_get_frameq_sz(void);
|
|
||||||
EAPI int evas_common_frameq_enabled(void);
|
|
||||||
EAPI void evas_common_frameq_begin(void);
|
|
||||||
EAPI void evas_common_frameq_finish(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* image rendering pipelines... new optional system - non-immediate and
|
/* image rendering pipelines... new optional system - non-immediate and
|
||||||
* threadable
|
* threadable
|
||||||
*/
|
*/
|
||||||
|
@ -104,9 +32,4 @@ EAPI void evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
|
||||||
int smooth, int level);
|
int smooth, int level);
|
||||||
EAPI void evas_common_pipe_flush(RGBA_Image *im);
|
EAPI void evas_common_pipe_flush(RGBA_Image *im);
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
EAPI void evas_common_pipe_op_text_flush(RGBA_Font *fn);
|
|
||||||
EAPI void evas_common_pipe_op_image_flush(RGBA_Image *im);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _EVAS_PIPE_H */
|
#endif /* _EVAS_PIPE_H */
|
||||||
|
|
|
@ -581,18 +581,9 @@ struct _Image_Entry
|
||||||
Image_Timestamp tstamp;
|
Image_Timestamp tstamp;
|
||||||
|
|
||||||
int references;
|
int references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LK(lock_references); // needed for accessing references
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
RGBA_Pipe *pipe;
|
RGBA_Pipe *pipe;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LK(ref_fq_add);
|
|
||||||
LK(ref_fq_del);
|
|
||||||
Eina_Condition cond_fq_del;
|
|
||||||
int ref_fq[2]; // ref_fq[0] is for addition, ref_fq[1] is for deletion
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned char scale;
|
unsigned char scale;
|
||||||
|
@ -912,12 +903,6 @@ struct _RGBA_Font
|
||||||
Fash_Int *fash;
|
Fash_Int *fash;
|
||||||
Font_Hint_Flags hinting;
|
Font_Hint_Flags hinting;
|
||||||
int references;
|
int references;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
int ref_fq[2]; //ref_fq[0] is for addition, ref_fq[1] is for deletion
|
|
||||||
Eina_Condition cond_fq_del;
|
|
||||||
LK(ref_fq_add);
|
|
||||||
LK(ref_fq_del);
|
|
||||||
#endif
|
|
||||||
LK(lock);
|
LK(lock);
|
||||||
unsigned char sizeok : 1;
|
unsigned char sizeok : 1;
|
||||||
};
|
};
|
||||||
|
|
|
@ -438,11 +438,7 @@ static void
|
||||||
eng_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
|
eng_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
|
evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -456,11 +452,7 @@ static void
|
||||||
eng_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
|
eng_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
|
||||||
{
|
{
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
|
evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -486,11 +478,7 @@ static void
|
||||||
eng_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
|
eng_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
|
||||||
{
|
{
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
evas_common_pipe_poly_draw(surface, context, polygon, x, y);
|
evas_common_pipe_poly_draw(surface, context, polygon, x, y);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -820,11 +808,7 @@ eng_image_draw(void *data __UNUSED__, void *context, void *surface, void *image,
|
||||||
if (!image) return;
|
if (!image) return;
|
||||||
im = image;
|
im = image;
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
evas_common_rgba_image_scalecache_prepare((Image_Entry *)(im),
|
evas_common_rgba_image_scalecache_prepare((Image_Entry *)(im),
|
||||||
surface, context, smooth,
|
surface, context, smooth,
|
||||||
|
@ -903,11 +887,7 @@ eng_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *im
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
# endif
|
|
||||||
)
|
|
||||||
evas_common_pipe_map_draw(im, surface, context, npoints, p, smooth, level);
|
evas_common_pipe_map_draw(im, surface, context, npoints, p, smooth, level);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -1187,11 +1167,7 @@ static void
|
||||||
eng_font_draw(void *data __UNUSED__, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *text_props)
|
eng_font_draw(void *data __UNUSED__, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *text_props)
|
||||||
{
|
{
|
||||||
#ifdef BUILD_PIPE_RENDER
|
#ifdef BUILD_PIPE_RENDER
|
||||||
if ((cpunum > 1)
|
if ((cpunum > 1))
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
&& evas_common_frameq_enabled()
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
evas_common_pipe_text_draw(surface, context, (RGBA_Font *) font, x, y,
|
evas_common_pipe_text_draw(surface, context, (RGBA_Font *) font, x, y,
|
||||||
text_props);
|
text_props);
|
||||||
else
|
else
|
||||||
|
|
|
@ -93,10 +93,6 @@ struct _Render_Engine
|
||||||
int dpi;
|
int dpi;
|
||||||
} xr;
|
} xr;
|
||||||
*/
|
*/
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
Evas_Engine_Render_Mode render_mode;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void (*outbuf_free)(Outbuf *ob);
|
void (*outbuf_free)(Outbuf *ob);
|
||||||
void (*outbuf_reconfigure)(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth);
|
void (*outbuf_reconfigure)(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth);
|
||||||
int (*outbuf_get_rot)(Outbuf *ob);
|
int (*outbuf_get_rot)(Outbuf *ob);
|
||||||
|
@ -106,9 +102,6 @@ struct _Render_Engine
|
||||||
void (*outbuf_flush)(Outbuf *ob);
|
void (*outbuf_flush)(Outbuf *ob);
|
||||||
void (*outbuf_idle_flush)(Outbuf *ob);
|
void (*outbuf_idle_flush)(Outbuf *ob);
|
||||||
Eina_Bool (*outbuf_alpha_get)(Outbuf *ob);
|
Eina_Bool (*outbuf_alpha_get)(Outbuf *ob);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
void (*outbuf_set_priv)(Outbuf *ob, void *cur, void *prev);
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* prototypes we will use here */
|
/* prototypes we will use here */
|
||||||
|
@ -483,10 +476,6 @@ eng_setup(Evas *e, void *in)
|
||||||
re->outbuf_flush = evas_software_xlib_outbuf_flush;
|
re->outbuf_flush = evas_software_xlib_outbuf_flush;
|
||||||
re->outbuf_idle_flush = evas_software_xlib_outbuf_idle_flush;
|
re->outbuf_idle_flush = evas_software_xlib_outbuf_idle_flush;
|
||||||
re->outbuf_alpha_get = evas_software_xlib_outbuf_alpha_get;
|
re->outbuf_alpha_get = evas_software_xlib_outbuf_alpha_get;
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
re->outbuf_set_priv = evas_software_xlib_outbuf_set_priv;
|
|
||||||
re->render_mode = info->render_mode;
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -515,10 +504,6 @@ eng_setup(Evas *e, void *in)
|
||||||
re->outbuf_flush = evas_software_xcb_outbuf_flush;
|
re->outbuf_flush = evas_software_xcb_outbuf_flush;
|
||||||
re->outbuf_idle_flush = evas_software_xcb_outbuf_idle_flush;
|
re->outbuf_idle_flush = evas_software_xcb_outbuf_idle_flush;
|
||||||
re->outbuf_alpha_get = evas_software_xcb_outbuf_alpha_get;
|
re->outbuf_alpha_get = evas_software_xcb_outbuf_alpha_get;
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
re->outbuf_set_priv = evas_software_xcb_outbuf_priv_set;
|
|
||||||
re->render_mode = info->render_mode;
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -528,9 +513,6 @@ eng_setup(Evas *e, void *in)
|
||||||
{
|
{
|
||||||
int ponebuf = 0;
|
int ponebuf = 0;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
evas_common_frameq_flush();
|
|
||||||
#endif
|
|
||||||
re = e->engine.data.output;
|
re = e->engine.data.output;
|
||||||
ponebuf = re->ob->onebuf;
|
ponebuf = re->ob->onebuf;
|
||||||
|
|
||||||
|
@ -554,9 +536,6 @@ eng_setup(Evas *e, void *in)
|
||||||
info->info.destination_alpha);
|
info->info.destination_alpha);
|
||||||
|
|
||||||
evas_software_xlib_outbuf_debug_set(re->ob, info->info.debug);
|
evas_software_xlib_outbuf_debug_set(re->ob, info->info.debug);
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
re->render_mode = info->render_mode;
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -581,9 +560,6 @@ eng_setup(Evas *e, void *in)
|
||||||
info->info.destination_alpha);
|
info->info.destination_alpha);
|
||||||
|
|
||||||
evas_software_xcb_outbuf_debug_set(re->ob, info->info.debug);
|
evas_software_xcb_outbuf_debug_set(re->ob, info->info.debug);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
re->render_mode = info->render_mode;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
re->ob->onebuf = ponebuf;
|
re->ob->onebuf = ponebuf;
|
||||||
|
@ -713,112 +689,24 @@ static void
|
||||||
eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
|
eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
Render_Engine *re;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
Evas_Surface *e_surface;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
re = (Render_Engine *)data;
|
||||||
#if defined(BUILD_PIPE_RENDER) && !defined(EVAS_FRAME_QUEUING)
|
#if defined(BUILD_PIPE_RENDER)
|
||||||
evas_common_pipe_map_begin(surface);
|
evas_common_pipe_map_begin(surface);
|
||||||
#endif /* BUILD_PIPE_RENDER && !EVAS_FRAME_QUEUING*/
|
#endif /* BUILD_PIPE_RENDER */
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
|
|
||||||
{
|
|
||||||
/* create a new frame if this is the first surface of this frame */
|
|
||||||
evas_common_frameq_prepare_frame();
|
|
||||||
/* add surface into the frame */
|
|
||||||
e_surface = evas_common_frameq_new_surface(surface, x, y, w, h);
|
|
||||||
evas_common_frameq_add_surface(e_surface);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
|
re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
|
||||||
re->outbuf_free_region_for_update(re->ob, surface);
|
re->outbuf_free_region_for_update(re->ob, surface);
|
||||||
evas_common_cpu_end_opt();
|
evas_common_cpu_end_opt();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
static void *
|
|
||||||
eng_image_map_surface_new(void *data , int w, int h, int alpha)
|
|
||||||
{
|
|
||||||
void *surface;
|
|
||||||
DATA32 *pixels;
|
|
||||||
Render_Engine *re;
|
|
||||||
Evas_Surface *e_surface;
|
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
|
||||||
|
|
||||||
surface =
|
|
||||||
evas_cache_image_copied_data(evas_common_image_cache_get(), w, h, NULL,
|
|
||||||
alpha, EVAS_COLORSPACE_ARGB8888);
|
|
||||||
pixels = evas_cache_image_pixels(surface);
|
|
||||||
|
|
||||||
if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
|
|
||||||
{
|
|
||||||
/* create a new frame if this is the first surface of this frame */
|
|
||||||
evas_common_frameq_prepare_frame();
|
|
||||||
|
|
||||||
/* add surface into the frame */
|
|
||||||
e_surface = evas_common_frameq_new_surface(surface, 0, 0, w, h);
|
|
||||||
|
|
||||||
/* this surface is not going to be pushed to screen */
|
|
||||||
e_surface->dontpush = 1;
|
|
||||||
evas_common_frameq_add_surface(e_surface);
|
|
||||||
}
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eng_output_frameq_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
Render_Engine *re;
|
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
|
||||||
re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
|
|
||||||
re->outbuf_free_region_for_update(re->ob, surface);
|
|
||||||
evas_common_cpu_end_opt();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eng_output_frameq_flush(void *data)
|
|
||||||
{
|
|
||||||
Render_Engine *re;
|
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
|
||||||
re->outbuf_flush(re->ob);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eng_output_frameq_set_priv(void *data, void *cur, void *prev)
|
|
||||||
{
|
|
||||||
Render_Engine *re;
|
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
|
||||||
re->outbuf_set_priv(re->ob, cur, prev);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eng_output_flush(void *data)
|
eng_output_flush(void *data)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
Render_Engine *re;
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
re = (Render_Engine *)data;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
re->outbuf_flush(re->ob);
|
||||||
if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
|
|
||||||
{
|
|
||||||
evas_common_frameq_set_frame_data(data,
|
|
||||||
eng_output_frameq_redraws_next_update_push,
|
|
||||||
eng_output_frameq_flush,
|
|
||||||
eng_output_frameq_set_priv);
|
|
||||||
evas_common_frameq_ready_frame();
|
|
||||||
evas_common_frameq_begin();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
re->outbuf_flush(re->ob);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -887,9 +775,6 @@ module_open(Evas_Module *em)
|
||||||
ORD(output_redraws_next_update_push);
|
ORD(output_redraws_next_update_push);
|
||||||
ORD(output_flush);
|
ORD(output_flush);
|
||||||
ORD(output_idle_flush);
|
ORD(output_idle_flush);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
ORD(image_map_surface_new);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* now advertise out own api */
|
/* now advertise out own api */
|
||||||
em->functions = (void *)(&func);
|
em->functions = (void *)(&func);
|
||||||
|
|
|
@ -119,11 +119,6 @@ struct _Outbuf
|
||||||
/* a list of previous frame pending regions to write to the target */
|
/* a list of previous frame pending regions to write to the target */
|
||||||
Eina_List *prev_pending_writes;
|
Eina_List *prev_pending_writes;
|
||||||
|
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
/* protecting prev_pending_writes */
|
|
||||||
LK(lock);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
unsigned char mask_dither : 1;
|
unsigned char mask_dither : 1;
|
||||||
unsigned char destination_alpha : 1;
|
unsigned char destination_alpha : 1;
|
||||||
unsigned char debug : 1;
|
unsigned char debug : 1;
|
||||||
|
|
|
@ -297,13 +297,13 @@ evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vi
|
||||||
/* Sync only needed for testing */
|
/* Sync only needed for testing */
|
||||||
if (try_shm == 2) _xcbob_sync(conn);
|
if (try_shm == 2) _xcbob_sync(conn);
|
||||||
|
|
||||||
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
#if defined(LIBXEXT_VERSION_LOW)
|
||||||
if (evas_common_frameq_enabled())
|
if (evas_common_frameq_enabled())
|
||||||
xcb_grab_server(conn);
|
xcb_grab_server(conn);
|
||||||
#endif
|
#endif
|
||||||
xcb_shm_attach(conn, xcbob->shm_info->shmseg,
|
xcb_shm_attach(conn, xcbob->shm_info->shmseg,
|
||||||
xcbob->shm_info->shmid, 0);
|
xcbob->shm_info->shmid, 0);
|
||||||
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
#if defined(LIBXEXT_VERSION_LOW)
|
||||||
if (evas_common_frameq_enabled())
|
if (evas_common_frameq_enabled())
|
||||||
xcb_ungrab_server(conn);
|
xcb_ungrab_server(conn);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,29 +25,17 @@ static int _shmsize = 0;
|
||||||
static int _shmlimit = (10 * 1024 * 1024);
|
static int _shmlimit = (10 * 1024 * 1024);
|
||||||
static const unsigned int _shmcountlimit = 32;
|
static const unsigned int _shmcountlimit = 32;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
#define SHMPOOL_LOCK()
|
||||||
static LK(lock_shmpool);
|
#define SHMPOOL_UNLOCK()
|
||||||
# define SHMPOOL_LOCK() LKL(lock_shmpool);
|
|
||||||
# define SHMPOOL_UNLOCK() LKU(lock_shmpool);
|
|
||||||
#else
|
|
||||||
# define SHMPOOL_LOCK()
|
|
||||||
# define SHMPOOL_UNLOCK()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_software_xcb_outbuf_init(void)
|
evas_software_xcb_outbuf_init(void)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(lock_shmpool);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_software_xcb_outbuf_free(Outbuf *buf)
|
evas_software_xcb_outbuf_free(Outbuf *buf)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
while (buf->priv.pending_writes)
|
while (buf->priv.pending_writes)
|
||||||
{
|
{
|
||||||
RGBA_Image *im = NULL;
|
RGBA_Image *im = NULL;
|
||||||
|
@ -63,9 +51,6 @@ evas_software_xcb_outbuf_free(Outbuf *buf)
|
||||||
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
|
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
evas_software_xcb_outbuf_idle_flush(buf);
|
evas_software_xcb_outbuf_idle_flush(buf);
|
||||||
evas_software_xcb_outbuf_flush(buf);
|
evas_software_xcb_outbuf_flush(buf);
|
||||||
if (buf->priv.x11.xcb.gc)
|
if (buf->priv.x11.xcb.gc)
|
||||||
|
@ -77,9 +62,6 @@ evas_software_xcb_outbuf_free(Outbuf *buf)
|
||||||
buf->priv.x11.xcb.cmap,
|
buf->priv.x11.xcb.cmap,
|
||||||
buf->priv.x11.xcb.visual,
|
buf->priv.x11.xcb.visual,
|
||||||
buf->priv.pal);
|
buf->priv.pal);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKD(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
free(buf);
|
free(buf);
|
||||||
_clear_xcbob(EINA_FALSE);
|
_clear_xcbob(EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
@ -231,10 +213,6 @@ evas_software_xcb_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, xcb_co
|
||||||
evas_software_xcb_outbuf_drawable_set(buf, draw);
|
evas_software_xcb_outbuf_drawable_set(buf, draw);
|
||||||
evas_software_xcb_outbuf_mask_set(buf, mask);
|
evas_software_xcb_outbuf_mask_set(buf, mask);
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,10 +448,7 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
|
||||||
// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
|
// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
|
||||||
if (!evas_common_frameq_enabled())
|
|
||||||
#endif
|
|
||||||
buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
|
|
||||||
|
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
@ -585,9 +560,6 @@ evas_software_xcb_outbuf_flush(Outbuf *buf)
|
||||||
buf->priv.x11.xcb.gcm,
|
buf->priv.x11.xcb.gcm,
|
||||||
obr->x, obr->y, 0);
|
obr->x, obr->y, 0);
|
||||||
}
|
}
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
# endif
|
|
||||||
while (buf->priv.prev_pending_writes)
|
while (buf->priv.prev_pending_writes)
|
||||||
{
|
{
|
||||||
im = buf->priv.prev_pending_writes->data;
|
im = buf->priv.prev_pending_writes->data;
|
||||||
|
@ -601,9 +573,6 @@ evas_software_xcb_outbuf_flush(Outbuf *buf)
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
buf->priv.prev_pending_writes = buf->priv.pending_writes;
|
buf->priv.prev_pending_writes = buf->priv.pending_writes;
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
# endif
|
|
||||||
buf->priv.pending_writes = NULL;
|
buf->priv.pending_writes = NULL;
|
||||||
xcb_flush(buf->priv.x11.xcb.conn);
|
xcb_flush(buf->priv.x11.xcb.conn);
|
||||||
#else
|
#else
|
||||||
|
@ -648,9 +617,6 @@ evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
if (buf->priv.prev_pending_writes)
|
if (buf->priv.prev_pending_writes)
|
||||||
_xcbob_sync(buf->priv.x11.xcb.conn);
|
_xcbob_sync(buf->priv.x11.xcb.conn);
|
||||||
while (buf->priv.prev_pending_writes)
|
while (buf->priv.prev_pending_writes)
|
||||||
|
@ -668,9 +634,6 @@ evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
|
||||||
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
|
if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
_clear_xcbob(EINA_FALSE);
|
_clear_xcbob(EINA_FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -967,13 +930,6 @@ evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
void
|
|
||||||
evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev __UNUSED__)
|
|
||||||
{
|
|
||||||
buf->priv.pending_writes = (Eina_List *)cur;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
static Xcb_Output_Buffer *
|
static Xcb_Output_Buffer *
|
||||||
|
|
|
@ -23,8 +23,4 @@ Eina_Bool evas_software_xcb_outbuf_alpha_get(Outbuf *buf);
|
||||||
void evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug);
|
void evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug);
|
||||||
void evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h);
|
void evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h);
|
||||||
|
|
||||||
# ifdef EVAS_FRAME_QUEUING
|
|
||||||
void evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -305,13 +305,13 @@ evas_software_xlib_x_output_buffer_new(Display *d, Visual *v, int depth, int w,
|
||||||
ph = XSetErrorHandler((XErrorHandler)
|
ph = XSetErrorHandler((XErrorHandler)
|
||||||
x_output_tmp_x_err);
|
x_output_tmp_x_err);
|
||||||
}
|
}
|
||||||
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
#if defined(LIBXEXT_VERSION_LOW)
|
||||||
/* workaround for libXext of lower then 1.1.1 */
|
/* workaround for libXext of lower then 1.1.1 */
|
||||||
if (evas_common_frameq_enabled())
|
if (evas_common_frameq_enabled())
|
||||||
XLockDisplay(d);
|
XLockDisplay(d);
|
||||||
#endif
|
#endif
|
||||||
XShmAttach(d, xob->shm_info);
|
XShmAttach(d, xob->shm_info);
|
||||||
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
#if defined(LIBXEXT_VERSION_LOW)
|
||||||
/* workaround for libXext of lower then 1.1.1 */
|
/* workaround for libXext of lower then 1.1.1 */
|
||||||
if (evas_common_frameq_enabled())
|
if (evas_common_frameq_enabled())
|
||||||
XUnlockDisplay(d);
|
XUnlockDisplay(d);
|
||||||
|
|
|
@ -29,14 +29,8 @@ static int shmsize = 0;
|
||||||
static int shmmemlimit = 10 * 1024 * 1024;
|
static int shmmemlimit = 10 * 1024 * 1024;
|
||||||
static const unsigned int shmcountlimit = 32;
|
static const unsigned int shmcountlimit = 32;
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
static LK(lock_shmpool);
|
|
||||||
#define SHMPOOL_LOCK() LKL(lock_shmpool)
|
|
||||||
#define SHMPOOL_UNLOCK() LKU(lock_shmpool)
|
|
||||||
#else
|
|
||||||
#define SHMPOOL_LOCK()
|
#define SHMPOOL_LOCK()
|
||||||
#define SHMPOOL_UNLOCK()
|
#define SHMPOOL_UNLOCK()
|
||||||
#endif
|
|
||||||
|
|
||||||
static X_Output_Buffer *
|
static X_Output_Buffer *
|
||||||
_find_xob(Display *d, Visual *v, int depth, int w, int h, int shm, void *data)
|
_find_xob(Display *d, Visual *v, int depth, int w, int h, int shm, void *data)
|
||||||
|
@ -150,17 +144,11 @@ _clear_xob(int psync)
|
||||||
void
|
void
|
||||||
evas_software_xlib_outbuf_init(void)
|
evas_software_xlib_outbuf_init(void)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(lock_shmpool);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_software_xlib_outbuf_free(Outbuf *buf)
|
evas_software_xlib_outbuf_free(Outbuf *buf)
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
while (buf->priv.pending_writes)
|
while (buf->priv.pending_writes)
|
||||||
{
|
{
|
||||||
RGBA_Image *im;
|
RGBA_Image *im;
|
||||||
|
@ -174,9 +162,6 @@ evas_software_xlib_outbuf_free(Outbuf *buf)
|
||||||
if (obr->mxob) _unfind_xob(obr->mxob, 0);
|
if (obr->mxob) _unfind_xob(obr->mxob, 0);
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
evas_software_xlib_outbuf_idle_flush(buf);
|
evas_software_xlib_outbuf_idle_flush(buf);
|
||||||
evas_software_xlib_outbuf_flush(buf);
|
evas_software_xlib_outbuf_flush(buf);
|
||||||
if (buf->priv.x11.xlib.gc)
|
if (buf->priv.x11.xlib.gc)
|
||||||
|
@ -186,9 +171,6 @@ evas_software_xlib_outbuf_free(Outbuf *buf)
|
||||||
if (buf->priv.pal)
|
if (buf->priv.pal)
|
||||||
evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
|
evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
|
||||||
buf->priv.x11.xlib.vis, buf->priv.pal);
|
buf->priv.x11.xlib.vis, buf->priv.pal);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKD(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
free(buf);
|
free(buf);
|
||||||
_clear_xob(0);
|
_clear_xob(0);
|
||||||
}
|
}
|
||||||
|
@ -361,9 +343,6 @@ evas_software_xlib_outbuf_setup_x(int w, int h, int rot, Outbuf_Depth depth,
|
||||||
evas_software_xlib_outbuf_drawable_set(buf, draw);
|
evas_software_xlib_outbuf_drawable_set(buf, draw);
|
||||||
evas_software_xlib_outbuf_mask_set(buf, mask);
|
evas_software_xlib_outbuf_mask_set(buf, mask);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKI(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,10 +615,7 @@ evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w
|
||||||
// memset(im->image.data, 0, w * h * sizeof(DATA32));
|
// memset(im->image.data, 0, w * h * sizeof(DATA32));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
|
||||||
if (!evas_common_frameq_enabled())
|
|
||||||
#endif
|
|
||||||
buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
|
|
||||||
return im;
|
return im;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,9 +716,6 @@ evas_software_xlib_outbuf_flush(Outbuf *buf)
|
||||||
buf->priv.x11.xlib.gcm,
|
buf->priv.x11.xlib.gcm,
|
||||||
obr->x, obr->y, 0);
|
obr->x, obr->y, 0);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
while (buf->priv.prev_pending_writes)
|
while (buf->priv.prev_pending_writes)
|
||||||
{
|
{
|
||||||
im = buf->priv.prev_pending_writes->data;
|
im = buf->priv.prev_pending_writes->data;
|
||||||
|
@ -756,9 +729,6 @@ evas_software_xlib_outbuf_flush(Outbuf *buf)
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
buf->priv.prev_pending_writes = buf->priv.pending_writes;
|
buf->priv.prev_pending_writes = buf->priv.pending_writes;
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
buf->priv.pending_writes = NULL;
|
buf->priv.pending_writes = NULL;
|
||||||
XFlush(buf->priv.x11.xlib.disp);
|
XFlush(buf->priv.x11.xlib.disp);
|
||||||
#else
|
#else
|
||||||
|
@ -819,9 +789,6 @@ evas_software_xlib_outbuf_idle_flush(Outbuf *buf)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKL(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
if (buf->priv.prev_pending_writes) XSync(buf->priv.x11.xlib.disp, False);
|
if (buf->priv.prev_pending_writes) XSync(buf->priv.x11.xlib.disp, False);
|
||||||
while (buf->priv.prev_pending_writes)
|
while (buf->priv.prev_pending_writes)
|
||||||
{
|
{
|
||||||
|
@ -838,9 +805,6 @@ evas_software_xlib_outbuf_idle_flush(Outbuf *buf)
|
||||||
if (obr->mxob) _unfind_xob(obr->mxob, 0);
|
if (obr->mxob) _unfind_xob(obr->mxob, 0);
|
||||||
free(obr);
|
free(obr);
|
||||||
}
|
}
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
LKU(buf->priv.lock);
|
|
||||||
#endif
|
|
||||||
_clear_xob(0);
|
_clear_xob(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1128,10 +1092,3 @@ evas_software_xlib_outbuf_alpha_get(Outbuf *buf)
|
||||||
return buf->priv.x11.xlib.mask;
|
return buf->priv.x11.xlib.mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
void
|
|
||||||
evas_software_xlib_outbuf_set_priv(Outbuf *buf, void *cur, void *prev __UNUSED__)
|
|
||||||
{
|
|
||||||
buf->priv.pending_writes = (Eina_List *)cur;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -83,10 +83,5 @@ void evas_software_xlib_outbuf_debug_show (Outbuf *buf,
|
||||||
int h);
|
int h);
|
||||||
|
|
||||||
Eina_Bool evas_software_xlib_outbuf_alpha_get (Outbuf *buf);
|
Eina_Bool evas_software_xlib_outbuf_alpha_get (Outbuf *buf);
|
||||||
#ifdef EVAS_FRAME_QUEUING
|
|
||||||
void evas_software_xlib_outbuf_set_priv (Outbuf *buf,
|
|
||||||
void *cur,
|
|
||||||
void *prev);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue