texture-cache: Avoid creating unnecessary ClutterImages
After loading the GdkPixbuf, StTextureCache unconditionally creates a ClutterImage and, if it's not in the cache, add it to the cache. That's a waste of resources when the image is already committed to the texture cache. Fix that by reusing the ClutterImage of the cache if it is already there; otherwise, create a new ClutterImage as we were previously doing.
This commit is contained in:
parent
deec0bf255
commit
1847a4f4cc
@ -528,20 +528,30 @@ finish_texture_load (AsyncTextureLoadData *data,
|
|||||||
if (pixbuf == NULL)
|
if (pixbuf == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
image = pixbuf_to_clutter_image (pixbuf);
|
|
||||||
if (!image)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
|
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
|
||||||
{
|
{
|
||||||
gpointer orig_key, value;
|
gpointer orig_key = NULL, value = NULL;
|
||||||
|
|
||||||
if (!g_hash_table_lookup_extended (cache->priv->keyed_cache, data->key,
|
if (!g_hash_table_lookup_extended (cache->priv->keyed_cache, data->key,
|
||||||
&orig_key, &value))
|
&orig_key, &value))
|
||||||
{
|
{
|
||||||
|
image = pixbuf_to_clutter_image (pixbuf);
|
||||||
|
if (!image)
|
||||||
|
goto out;
|
||||||
|
|
||||||
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (data->key),
|
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (data->key),
|
||||||
g_object_ref (image));
|
g_object_ref (image));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image = g_object_ref (value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image = pixbuf_to_clutter_image (pixbuf);
|
||||||
|
if (!image)
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (iter = data->actors; iter; iter = iter->next)
|
for (iter = data->actors; iter; iter = iter->next)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user