stuff
This commit is contained in:
parent
deb58b818d
commit
8ba026875b
@ -35,13 +35,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Trace allocate/free.
|
/* Trace allocate/free.
|
||||||
#define VIPS_DEBUG_RED
|
#define VIPS_DEBUG_AMBER
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Trace reschedule
|
/* Trace reschedule
|
||||||
#define VIPS_DEBUG_GREEN
|
#define VIPS_DEBUG_GREEN
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Trace serious problems.
|
||||||
|
*/
|
||||||
|
#define VIPS_DEBUG_RED
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif /*HAVE_CONFIG_H*/
|
#endif /*HAVE_CONFIG_H*/
|
||||||
@ -71,9 +75,9 @@ static const int have_threads = 1;
|
|||||||
static const int have_threads = 0;
|
static const int have_threads = 0;
|
||||||
#endif /*HAVE_THREADS*/
|
#endif /*HAVE_THREADS*/
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_RED
|
#ifdef VIPS_DEBUG_AMBER
|
||||||
static int render_num_renders = 0;
|
static int render_num_renders = 0;
|
||||||
#endif /*VIPS_DEBUG_RED*/
|
#endif /*VIPS_DEBUG_AMBER*/
|
||||||
|
|
||||||
/* A tile in our cache.
|
/* A tile in our cache.
|
||||||
*/
|
*/
|
||||||
@ -93,7 +97,9 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
gboolean dirty;
|
gboolean dirty;
|
||||||
|
|
||||||
int ticks; /* Time of last use, for LRU flush */
|
/* Time of last use, for LRU flush
|
||||||
|
*/
|
||||||
|
int ticks;
|
||||||
} Tile;
|
} Tile;
|
||||||
|
|
||||||
/* Per-call state.
|
/* Per-call state.
|
||||||
@ -197,7 +203,7 @@ render_thread_state_new( VipsImage *im, void *a )
|
|||||||
static void *
|
static void *
|
||||||
tile_free( Tile *tile )
|
tile_free( Tile *tile )
|
||||||
{
|
{
|
||||||
VIPS_DEBUG_MSG_RED( "tile_free\n" );
|
VIPS_DEBUG_MSG_AMBER( "tile_free\n" );
|
||||||
|
|
||||||
IM_FREEF( im_region_free, tile->region );
|
IM_FREEF( im_region_free, tile->region );
|
||||||
im_free( tile );
|
im_free( tile );
|
||||||
@ -208,7 +214,7 @@ tile_free( Tile *tile )
|
|||||||
static int
|
static int
|
||||||
render_free( Render *render )
|
render_free( Render *render )
|
||||||
{
|
{
|
||||||
VIPS_DEBUG_MSG_RED( "render_free: %p\n", render );
|
VIPS_DEBUG_MSG_AMBER( "render_free: %p\n", render );
|
||||||
|
|
||||||
g_assert( render->ref_count == 0 );
|
g_assert( render->ref_count == 0 );
|
||||||
|
|
||||||
@ -234,9 +240,9 @@ render_free( Render *render )
|
|||||||
|
|
||||||
im_free( render );
|
im_free( render );
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_RED
|
#ifdef VIPS_DEBUG_AMBER
|
||||||
render_num_renders -= 1;
|
render_num_renders -= 1;
|
||||||
#endif /*VIPS_DEBUG_RED*/
|
#endif /*VIPS_DEBUG_AMBER*/
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
@ -418,8 +424,10 @@ render_work( VipsThreadState *state, void *a )
|
|||||||
tile->area.left, tile->area.top );
|
tile->area.left, tile->area.top );
|
||||||
|
|
||||||
if( im_prepare_to( state->reg, tile->region,
|
if( im_prepare_to( state->reg, tile->region,
|
||||||
&tile->area, tile->area.left, tile->area.top ) )
|
&tile->area, tile->area.left, tile->area.top ) ) {
|
||||||
|
VIPS_DEBUG_MSG_RED( "render_work: im_prepare_to() failed\n" );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
}
|
||||||
tile->painted = TRUE;
|
tile->painted = TRUE;
|
||||||
|
|
||||||
/* Now clients can update.
|
/* Now clients can update.
|
||||||
@ -480,12 +488,14 @@ render_thread_main( void *client )
|
|||||||
"threadpool start\n" );
|
"threadpool start\n" );
|
||||||
|
|
||||||
render_reschedule = FALSE;
|
render_reschedule = FALSE;
|
||||||
(void) vips_threadpool_run( render->in,
|
if( vips_threadpool_run( render->in,
|
||||||
render_thread_state_new,
|
render_thread_state_new,
|
||||||
render_allocate,
|
render_allocate,
|
||||||
render_work,
|
render_work,
|
||||||
NULL,
|
NULL,
|
||||||
render );
|
render ) )
|
||||||
|
VIPS_DEBUG_MSG_RED( "render_thread_main: "
|
||||||
|
"threadpool_run failed\n" );
|
||||||
|
|
||||||
VIPS_DEBUG_MSG_GREEN( "render_thread_main: "
|
VIPS_DEBUG_MSG_GREEN( "render_thread_main: "
|
||||||
"threadpool return\n" );
|
"threadpool return\n" );
|
||||||
@ -556,7 +566,7 @@ tile_equal( gconstpointer a, gconstpointer b )
|
|||||||
static int
|
static int
|
||||||
render_close_cb( Render *render )
|
render_close_cb( Render *render )
|
||||||
{
|
{
|
||||||
VIPS_DEBUG_MSG_RED( "render_close_cb\n" );
|
VIPS_DEBUG_MSG_AMBER( "render_close_cb\n" );
|
||||||
|
|
||||||
render_unref( render );
|
render_unref( render );
|
||||||
|
|
||||||
@ -625,11 +635,11 @@ render_new( VipsImage *in, VipsImage *out, VipsImage *mask,
|
|||||||
render_ref( render );
|
render_ref( render );
|
||||||
}
|
}
|
||||||
|
|
||||||
VIPS_DEBUG_MSG_RED( "render_new: %p\n", render );
|
VIPS_DEBUG_MSG_AMBER( "render_new: %p\n", render );
|
||||||
|
|
||||||
#ifdef VIPS_DEBUG_RED
|
#ifdef VIPS_DEBUG_AMBER
|
||||||
render_num_renders += 1;
|
render_num_renders += 1;
|
||||||
#endif /*VIPS_DEBUG_RED*/
|
#endif /*VIPS_DEBUG_AMBER*/
|
||||||
|
|
||||||
return( render );
|
return( render );
|
||||||
}
|
}
|
||||||
@ -641,7 +651,7 @@ tile_new( Render *render )
|
|||||||
{
|
{
|
||||||
Tile *tile;
|
Tile *tile;
|
||||||
|
|
||||||
VIPS_DEBUG_MSG_RED( "tile_new\n" );
|
VIPS_DEBUG_MSG_AMBER( "tile_new\n" );
|
||||||
|
|
||||||
/* Don't use auto-free: we need to make sure we free the tile after
|
/* Don't use auto-free: we need to make sure we free the tile after
|
||||||
* Render.
|
* Render.
|
||||||
@ -694,7 +704,8 @@ render_tile_add( Tile *tile, Rect *area )
|
|||||||
* them.
|
* them.
|
||||||
*/
|
*/
|
||||||
if( im_region_buffer( tile->region, &tile->area ) )
|
if( im_region_buffer( tile->region, &tile->area ) )
|
||||||
VIPS_DEBUG_MSG( "render_work: buffer allocate failed\n" );
|
VIPS_DEBUG_MSG_RED( "render_tile_add: "
|
||||||
|
"buffer allocate failed\n" );
|
||||||
|
|
||||||
g_hash_table_insert( render->tiles, &tile->area, tile );
|
g_hash_table_insert( render->tiles, &tile->area, tile );
|
||||||
}
|
}
|
||||||
@ -759,7 +770,9 @@ tile_queue( Tile *tile )
|
|||||||
"painting tile %dx%d synchronously\n",
|
"painting tile %dx%d synchronously\n",
|
||||||
tile->area.left, tile->area.top );
|
tile->area.left, tile->area.top );
|
||||||
|
|
||||||
im_prepare( tile->region, &tile->area );
|
if( im_prepare( tile->region, &tile->area ) )
|
||||||
|
VIPS_DEBUG_MSG_RED( "tile_queue: prepare failed\n" );
|
||||||
|
|
||||||
tile->painted = TRUE;
|
tile->painted = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -920,6 +933,8 @@ region_fill( REGION *out, void *seq, void *a, void *b )
|
|||||||
tile = render_tile_request( render, &area );
|
tile = render_tile_request( render, &area );
|
||||||
if( tile )
|
if( tile )
|
||||||
tile_copy( tile, out );
|
tile_copy( tile, out );
|
||||||
|
else
|
||||||
|
VIPS_DEBUG_MSG_RED( "region_fill: argh!\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
g_mutex_unlock( render->lock );
|
g_mutex_unlock( render->lock );
|
||||||
@ -1077,8 +1092,8 @@ vips_sink_screen( VipsImage *in, VipsImage *out, VipsImage *mask,
|
|||||||
void
|
void
|
||||||
im__print_renders( void )
|
im__print_renders( void )
|
||||||
{
|
{
|
||||||
#ifdef VIPS_DEBUG_RED
|
#ifdef VIPS_DEBUG_AMBER
|
||||||
printf( "%d active renders\n", render_num_renders );
|
printf( "%d active renders\n", render_num_renders );
|
||||||
#endif /*VIPS_DEBUG_RED*/
|
#endif /*VIPS_DEBUG_AMBER*/
|
||||||
printf( "%d dirty renders\n", g_slist_length( render_dirty_all ) );
|
printf( "%d dirty renders\n", g_slist_length( render_dirty_all ) );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user