コード例 #1
0
ファイル: buffer.c プロジェクト: achanda101/libvips
/* Pixels have been calculated: publish for other parts of this thread to see.
 */
void 
vips_buffer_done( VipsBuffer *buffer )
{
	if( !buffer->done ) {
		VipsImage *im = buffer->im;
		VipsBufferCache *cache = buffer_cache_get();
		VipsBufferCacheList *cache_list;

#ifdef DEBUG
		printf( "vips_buffer_done: thread %p adding to cache %p\n",
			g_thread_self(), cache );
		vips_buffer_print( buffer ); 
#endif /*DEBUG*/

		/* Look up and update the buffer list. 
		 */
		if( !(cache_list = g_hash_table_lookup( cache->hash, im )) ) {
			cache_list = buffer_cache_list_new( cache, im );
			g_hash_table_insert( cache->hash, im, cache_list );
		}

		g_assert( !g_slist_find( cache_list->buffers, buffer ) );
		g_assert( cache_list->thread == cache->thread );

		cache_list->buffers = 
			g_slist_prepend( cache_list->buffers, buffer );
		buffer->done = TRUE;
		buffer->cache = cache;
	}
}
コード例 #2
0
ファイル: buffer.c プロジェクト: kjell/libvips
static void *
vips_buffer_dump( VipsBuffer *buffer, size_t *reserve, size_t *alive )
{
	vips_buffer_print( buffer ); 

	g_assert( buffer->im );
	g_assert( buffer->buf );

	if( !buffer->cache &&
		!buffer->done ) {  
		/* Global buffer, not linked to any cache.
		 */
		printf( "global buffer %p, %.3g MB\n", 
			buffer, buffer->bsize / (1024 * 1024.0) ); 
		*alive += buffer->bsize;
	}

	else if( buffer->cache &&
		buffer->done &&
		!vips_rect_isempty( &buffer->area ) &&
		g_slist_find( buffer->cache->buffers, buffer ) ) {
		/* Published on a thread. 
		 */
		printf( "thread buffer %p, %.3g MB\n", 
			buffer, buffer->bsize / (1024 * 1024.0) ); 
		*alive += buffer->bsize;
	}

	else if( buffer->ref_count == 0 &&
		buffer->cache &&
		!buffer->done &&
		vips_rect_isempty( &buffer->area ) &&
		g_slist_find( buffer->cache->reserve, buffer ) )
		/* Held in reserve.
		 */
		*reserve += buffer->bsize;

	else
		printf( "buffer craziness!\n" ); 

	return( NULL );
}
コード例 #3
0
ファイル: buffer.c プロジェクト: FlavioFalcao/libvips
static void *
vips_buffer_dump( VipsBuffer *buffer, size_t *reserve, size_t *alive )
{
	vips_buffer_print( buffer ); 

	if( buffer->im &&
		buffer->buf &&
		buffer->cache ) {  
		printf( "buffer %p, %.3g MB\n", 
			buffer, buffer->bsize / (1024 * 1024.0) ); 
		*alive += buffer->bsize;
	}
	else 
	if( buffer->im &&
		buffer->buf &&
		!buffer->cache )   	
		*reserve += buffer->bsize;
	else
		printf( "buffer craziness!\n" ); 

	return( NULL );
}
コード例 #4
0
ファイル: buffer.c プロジェクト: FlavioFalcao/libvips
/* Pixels have been calculated: publish for other parts of this thread to see.
 */
void 
vips_buffer_done( VipsBuffer *buffer )
{
	if( !buffer->done ) {
		VipsImage *im = buffer->im;
		VipsBufferCache *cache = buffer_cache_get( im ); 

#ifdef DEBUG_VERBOSE
		printf( "vips_buffer_done: thread %p adding to cache %p\n",
			g_thread_self(), cache );
		vips_buffer_print( buffer ); 
#endif /*DEBUG_VERBOSE*/

		g_assert( !g_slist_find( cache->buffers, buffer ) );
		g_assert( !buffer->cache ); 

		buffer->done = TRUE;
		buffer->cache = cache;

		cache->buffers = g_slist_prepend( cache->buffers, buffer );
	}
}