void a_mapcache_add ( GdkPixbuf *pixbuf, mapcache_extra_t extra, gint x, gint y, gint z, guint16 type, gint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor, const gchar* name ) { guint nn = name ? g_str_hash ( name ) : 0; gchar *key = g_strdup_printf ( HASHKEY_FORMAT_STRING, type, x, y, z, zoom, nn, alpha, xshrinkfactor, yshrinkfactor ); g_mutex_lock(mc_mutex); cache_add(key, pixbuf, extra); // TODO: that should be done on preference change only... max_cache_size = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "mapcache_size")->u * 1024 * 1024; if ( cache_size > max_cache_size ) { if ( queue_tail ) { gchar *oldkey = list_shift_add_entry ( key ); cache_remove(oldkey); while ( cache_size > max_cache_size && (queue_tail->next != queue_tail) ) { /* make sure there's more than one thing to delete */ oldkey = list_shift (); cache_remove(oldkey); } } /* chop off 'start' etc */ } else { list_add_entry ( key ); /* business as usual */ } g_mutex_unlock(mc_mutex); static int tmp = 0; if ( (++tmp == 100 )) { g_debug("DEBUG: cache count=%d size=%u list count=%d\n", g_hash_table_size(cache), cache_size, queue_count ); tmp=0; } }
void a_mapcache_add ( GdkPixbuf *pixbuf, gint x, gint y, gint z, guint8 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor ) { gchar *key = g_strdup_printf ( HASHKEY_FORMAT_STRING, x, y, z, type, zoom, alpha, xshrinkfactor, yshrinkfactor ); static int tmp = 0; g_mutex_lock(mc_mutex); cache_add(key, pixbuf); // TODO: that should be done on preference change only... max_queue_size = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "mapcache_size")->u * 1024 * 1024; if ( queue_size > max_queue_size ) { gchar *oldkey = list_shift_add_entry ( key ); cache_remove(oldkey); while ( queue_size > max_queue_size && (queue_tail->next != queue_tail) ) { /* make sure there's more than one thing to delete */ oldkey = list_shift (); cache_remove(oldkey); } /* chop off 'start' etc */ } else { list_add_entry ( key ); /* business as usual */ } g_mutex_unlock(mc_mutex); if ( (++tmp == 100 )) { g_print("DEBUG: queue count=%d size=%u\n", queue_count, queue_size ); tmp=0; } }