[ftbench] only one timer in use

Now, cleared 'elapsed' timer. All time measurement is done in the benchmark() function. Created a timer inside of main() function to show total spent time.
This commit is contained in:
goksu 2023-09-21 15:14:41 +03:00
parent 8797ad3d53
commit dcfebc9a07
No known key found for this signature in database
1 changed files with 46 additions and 103 deletions

View File

@ -66,8 +66,7 @@
typedef int
(*bcall_t)( btimer_t* timer,
FT_Face face,
(*bcall_t)( FT_Face face,
void* user_data );
@ -273,35 +272,34 @@
double warmup )
{
int n, done;
btimer_t timer, elapsed;
btimer_t timer;
if ( test->cache_first )
{
TIMER_RESET( &timer );
test->bench( &timer, face, test->user_data );
test->bench( face, test->user_data );
}
TIMER_START(&elapsed);
TIMER_START(&timer);
for(int i = 0; i<warmup; i++)
test->bench( &timer,face, test->user_data);
TIMER_STOP(&elapsed);
test->bench(face, test->user_data);
TIMER_STOP(&timer);
printf( " %-25s ", test->title );
fflush( stdout );
TIMER_RESET( &timer );
TIMER_RESET( &elapsed );
for ( n = 0, done = 0; !max_iter || n < max_iter; n++ )
{
TIMER_START( &elapsed );
TIMER_START( &timer );
done += test->bench( &timer, face, test->user_data );
done += test->bench( face, test->user_data );
TIMER_STOP( &elapsed );
TIMER_STOP( &timer );
if ( TIMER_GET( &elapsed ) > 1E6 * max_time )
if ( TIMER_GET( &timer ) > 1E6 * max_time )
break;
}
@ -318,8 +316,7 @@
*/
static int
test_load( btimer_t* timer,
FT_Face face,
test_load( FT_Face face,
void* user_data )
{
int i, done = 0;
@ -327,23 +324,18 @@
FT_UNUSED( user_data );
TIMER_START( timer );
FOREACH( i )
{
if ( !FT_Load_Glyph( face, (FT_UInt)i, load_flags ) )
done++;
}
TIMER_STOP( timer );
return done;
}
static int
test_load_advances( btimer_t* timer,
FT_Face face,
test_load_advances( FT_Face face,
void* user_data )
{
int done = 0;
@ -365,15 +357,11 @@
advances = (FT_Fixed *)calloc( sizeof ( FT_Fixed ), (size_t)count );
TIMER_START( timer );
FT_Get_Advances( face,
(FT_UInt)start, (FT_UInt)count,
(FT_Int32)flags, advances );
done += (int)count;
TIMER_STOP( timer );
free( advances );
return done;
@ -381,8 +369,7 @@
static int
test_render( btimer_t* timer,
FT_Face face,
test_render( FT_Face face,
void* user_data )
{
int i, done = 0;
@ -395,19 +382,16 @@
if ( FT_Load_Glyph( face, (FT_UInt)i, load_flags ) )
continue;
TIMER_START( timer );
if ( !FT_Render_Glyph( face->glyph, render_mode ) )
if ( !FT_Render_Glyph( face->glyph, render_mode ) )
done++;
TIMER_STOP( timer );
}
}
return done;
}
static int
test_embolden( btimer_t* timer,
FT_Face face,
test_embolden( FT_Face face,
void* user_data )
{
int i, done = 0;
@ -420,19 +404,16 @@
if ( FT_Load_Glyph( face, (FT_UInt)i, load_flags ) )
continue;
TIMER_START( timer );
FT_GlyphSlot_Embolden( face->glyph );
FT_GlyphSlot_Embolden( face->glyph );
done++;
TIMER_STOP( timer );
}
}
return done;
}
static int
test_stroke( btimer_t* timer,
FT_Face face,
test_stroke( FT_Face face,
void* user_data )
{
FT_Glyph glyph;
@ -456,9 +437,7 @@
FT_Get_Glyph( face->glyph, &glyph ) )
continue;
TIMER_START( timer );
FT_Glyph_Stroke( &glyph, stroker, 1 );
TIMER_STOP( timer );
FT_Glyph_Stroke( &glyph, stroker, 1 );
FT_Done_Glyph( glyph );
done++;
@ -471,8 +450,7 @@
static int
test_get_glyph( btimer_t* timer,
FT_Face face,
test_get_glyph( FT_Face face,
void* user_data )
{
FT_Glyph glyph;
@ -487,22 +465,19 @@
if ( FT_Load_Glyph( face, (FT_UInt)i, load_flags ) )
continue;
TIMER_START( timer );
if ( !FT_Get_Glyph( face->glyph, &glyph ) )
if ( !FT_Get_Glyph( face->glyph, &glyph ) )
{
FT_Done_Glyph( glyph );
done++;
}
TIMER_STOP( timer );
}
}
return done;
}
static int
test_get_cbox( btimer_t* timer,
FT_Face face,
test_get_cbox( FT_Face face,
void* user_data )
{
FT_Glyph glyph;
@ -521,9 +496,7 @@
if ( FT_Get_Glyph( face->glyph, &glyph ) )
continue;
TIMER_START( timer );
FT_Glyph_Get_CBox( glyph, FT_GLYPH_BBOX_PIXELS, &bbox );
TIMER_STOP( timer );
FT_Glyph_Get_CBox( glyph, FT_GLYPH_BBOX_PIXELS, &bbox );
FT_Done_Glyph( glyph );
done++;
@ -534,8 +507,7 @@
static int
test_get_bbox( btimer_t* timer,
FT_Face face,
test_get_bbox( FT_Face face,
void* user_data )
{
FT_BBox bbox;
@ -550,9 +522,7 @@
if ( FT_Load_Glyph( face, (FT_UInt)i, load_flags ) )
continue;
TIMER_START( timer );
FT_Outline_Get_BBox( &face->glyph->outline, &bbox );
TIMER_STOP( timer );
FT_Outline_Get_BBox( &face->glyph->outline, &bbox );
done++;
}
@ -562,31 +532,25 @@
static int
test_get_char_index( btimer_t* timer,
FT_Face face,
test_get_char_index( FT_Face face,
void* user_data )
{
bcharset_t* charset = (bcharset_t*)user_data;
int i, done = 0;
TIMER_START( timer );
for ( i = 0; i < charset->size; i++ )
{
if ( FT_Get_Char_Index(face, charset->code[i]) )
done++;
}
TIMER_STOP( timer );
return done;
}
static int
test_cmap_cache( btimer_t* timer,
FT_Face face,
test_cmap_cache( FT_Face face,
void* user_data )
{
bcharset_t* charset = (bcharset_t*)user_data;
@ -595,8 +559,6 @@
FT_UNUSED( face );
TIMER_START( timer );
for ( i = 0; i < charset->size; i++ )
{
if ( FTC_CMapCache_Lookup( cmap_cache,
@ -606,15 +568,12 @@
done++;
}
TIMER_STOP( timer );
return done;
}
static int
test_image_cache( btimer_t* timer,
FT_Face face,
test_image_cache( FT_Face face,
void* user_data )
{
FT_Glyph glyph;
@ -624,9 +583,6 @@
FT_UNUSED( face );
FT_UNUSED( user_data );
TIMER_START( timer );
FOREACH( i )
{
if ( !FTC_ImageCache_Lookup( image_cache,
@ -637,15 +593,12 @@
done++;
}
TIMER_STOP( timer );
return done;
}
static int
test_sbit_cache( btimer_t* timer,
FT_Face face,
test_sbit_cache( FT_Face face,
void* user_data )
{
FTC_SBit glyph;
@ -655,9 +608,6 @@
FT_UNUSED( face );
FT_UNUSED( user_data );
TIMER_START( timer );
FOREACH( i )
{
if ( !FTC_SBitCache_Lookup( sbit_cache,
@ -668,15 +618,12 @@
done++;
}
TIMER_STOP( timer );
return done;
}
static int
test_cmap_iter( btimer_t* timer,
FT_Face face,
test_cmap_iter( FT_Face face,
void* user_data )
{
FT_UInt idx;
@ -686,23 +633,18 @@
FT_UNUSED( user_data );
TIMER_START( timer );
charcode = FT_Get_First_Char( face, &idx );
done = ( idx != 0 );
while ( idx != 0 )
charcode = FT_Get_Next_Char( face, charcode, &idx );
TIMER_STOP( timer );
return done;
return done;
}
static int
test_new_face( btimer_t* timer,
FT_Face face,
test_new_face( FT_Face face,
void* user_data )
{
FT_Face bench_face;
@ -711,20 +653,15 @@
FT_UNUSED( user_data );
TIMER_START( timer );
if ( !get_face( &bench_face ) )
FT_Done_Face( bench_face );
TIMER_STOP( timer );
return 1;
return 1;
}
static int
test_new_face_and_load_glyph( btimer_t* timer,
FT_Face face,
test_new_face_and_load_glyph( FT_Face face,
void* user_data )
{
FT_Face bench_face;
@ -735,8 +672,6 @@
FT_UNUSED( user_data );
TIMER_START( timer );
if ( !get_face( &bench_face ) )
{
FOREACH( i )
@ -748,8 +683,6 @@
FT_Done_Face( bench_face );
}
TIMER_STOP( timer );
return done;
}
@ -1103,6 +1036,10 @@
{
FT_Face face;
FT_Error error;
btimer_t total;
TIMER_RESET(&total);
TIMER_START(&total);
unsigned long max_bytes = CACHE_SIZE * 1024;
char* test_string = NULL;
@ -1356,6 +1293,9 @@
if ( warmup_iter < 0 )
warmup_iter = -warmup_iter;
break;
/* break; */
default:
@ -1616,6 +1556,9 @@
break;
}
}
TIMER_STOP(&total);
double total_time = TIMER_GET(&total);
printf("\nTotal time: %.0fs\n", total_time/1000000);
if ( cache_man )
FTC_Manager_Done( cache_man );