cedric small speedups patches for edje back in - minus the ones that break

things. (0004).


SVN revision: 34234
This commit is contained in:
Carsten Haitzler 2008-04-10 08:58:19 +00:00
parent 06bf5d5c13
commit 0e4c0eb8ec
3 changed files with 77 additions and 11 deletions

View File

@ -1114,6 +1114,61 @@ _edje_gradient_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3,
}
}
static int
_edje_nitoa_rec(char *string, int len, unsigned int value)
{
const char *array = "0123456789";
int length;
int quotient;
int modulo;
if (len <= 0) return 0;
if (value == 0) return 0;
quotient = value / 10;
modulo = value % 10;
length = _edje_nitoa_rec(string, len - 1, quotient);
if (length + 1 > len) return length;
string[length] = array[modulo];
return length + 1;
}
static int
_edje_nitoa(char *string, int len, int value)
{
int length;
if (len <= 0) return 0;
if (len == 1)
{
*string = '\0';
return 1;
}
if (value < 0)
{
*string = '-';
++string;
--len;
}
if (value == 0)
{
strncpy(string, "0", len);
return 1;
}
length = _edje_nitoa_rec(string, len, value);
string[length] = '\0';
return length;
}
static void
_edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc, double pos)
{
@ -1173,7 +1228,11 @@ _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
}
else
{
snprintf(buf, sizeof(buf), "images/%i", image_id);
/* Replace snprint("images/%i") == memcpy + itoa */
#define IMAGES "images/"
memcpy(buf, IMAGES, strlen(IMAGES));
_edje_nitoa(buf + strlen(IMAGES), sizeof(buf) - strlen(IMAGES), image_id);
evas_object_image_file_set(ep->object, ed->file->path, buf);
if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE)
{

View File

@ -1002,14 +1002,24 @@ _edje_collection_free_prog_cache_matches_free_cb(const Evas_Hash *hash, const ch
static void
_cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source)
{
Evas_Object *parent;
Edje *ed;
char new_src[4096]; /* XXX is this max reasonable? */
Evas_Object *parent;
Edje *ed;
char new_src[4096]; /* XXX is this max reasonable? */
int length_parent;
int length_source;
parent = data;
ed = _edje_fetch(obj);
if (!ed) return;
snprintf(new_src, sizeof(new_src), "%s%c%s", ed->parent,
EDJE_PART_PATH_SEPARATOR, source);
/* Replace snprint("%s%c%s") == memcpy + *new_src + memcat */
length_parent = strlen(ed->parent);
length_source = strlen(source);
if (length_source + length_parent + 2 > sizeof(new_src))
return ;
memcpy(new_src, ed->parent, length_parent);
new_src[length_parent] = EDJE_PART_PATH_SEPARATOR;
memcpy(new_src + length_parent + 1, source, length_source + 1);
edje_object_signal_emit(parent, signal, new_src);
}

View File

@ -95,7 +95,7 @@ _edje_match_states_insert(Edje_States *list,
{
const size_t i = idx * (patterns_max_length + 1) + pos;
if (list->has[i]) return;
if (list->size > i && list->has[i]) return;
list->has[i] = 1;
}
@ -103,6 +103,7 @@ _edje_match_states_insert(Edje_States *list,
list->states[i].idx = idx;
list->states[i].pos = pos;
list->has[i] = 0;
++list->size;
}
@ -112,7 +113,6 @@ _edje_match_states_clear(Edje_States *list,
size_t patterns_max_length)
{
list->size = 0;
memset(list->has, 0, patterns_size * (patterns_max_length + 1) * sizeof (*list->has));
}
/* Token manipulation. */
@ -232,9 +232,6 @@ _edje_match_patterns_exec_init_states(Edje_States *states,
states->size = patterns_size;
memset(states->has,
0,
patterns_size * (patterns_max_length + 1) * sizeof (*states->has));
for (i = 0; i < patterns_size; ++i)
{
states->states[i].idx = i;