00001 #include <ft2build.h>
00002 #include FT_FREETYPE_H
00003 #include FT_BBOX_H
00004
00005
00006 #include <time.h>
00007
00008
00009
00010 #if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
00011 #include <sys/param.h>
00012 #define CLOCKS_PER_SEC HZ
00013 #endif
00014
00015 static long
00016 get_time( void )
00017 {
00018 return clock() * 10000L / CLOCKS_PER_SEC;
00019 }
00020
00021
00022
00023
00024
00025
00026 #define XSCALE 65536
00027 #define XX(x) ((FT_Pos)(x*XSCALE))
00028 #define XVEC(x,y) { XX(x), XX(y) }
00029 #define XVAL(x) ((x)/(1.0*XSCALE))
00030
00031
00032 static FT_Vector dummy_vec_1[4] =
00033 {
00034 #if 1
00035 XVEC( 408.9111, 535.3164 ),
00036 XVEC( 455.8887, 634.396 ),
00037 XVEC( -37.8765, 786.2207 ),
00038 XVEC( 164.6074, 535.3164 )
00039 #else
00040 { (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL },
00041 { (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L },
00042 { (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL },
00043 { (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL }
00044 #endif
00045 };
00046
00047 static char dummy_tag_1[4] =
00048 {
00049 FT_CURVE_TAG_ON,
00050 FT_CURVE_TAG_CUBIC,
00051 FT_CURVE_TAG_CUBIC,
00052 FT_CURVE_TAG_ON
00053 };
00054
00055 static short dummy_contour_1[1] =
00056 {
00057 3
00058 };
00059
00060 static FT_Outline dummy_outline_1 =
00061 {
00062 1,
00063 4,
00064 dummy_vec_1,
00065 dummy_tag_1,
00066 dummy_contour_1,
00067 0
00068 };
00069
00070
00071
00072 static FT_Vector dummy_vec_2[4] =
00073 {
00074 XVEC( 100.0, 100.0 ),
00075 XVEC( 100.0, 200.0 ),
00076 XVEC( 200.0, 200.0 ),
00077 XVEC( 200.0, 133.0 )
00078 };
00079
00080 static FT_Outline dummy_outline_2 =
00081 {
00082 1,
00083 4,
00084 dummy_vec_2,
00085 dummy_tag_1,
00086 dummy_contour_1,
00087 0
00088 };
00089
00090
00091 static void
00092 dump_outline( FT_Outline* outline )
00093 {
00094 FT_BBox bbox;
00095
00096
00097 FT_Outline_Get_CBox( outline, &bbox );
00098 printf( "cbox = [%.2f %.2f %.2f %.2f]\n",
00099 XVAL( bbox.xMin ),
00100 XVAL( bbox.yMin ),
00101 XVAL( bbox.xMax ),
00102 XVAL( bbox.yMax ) );
00103
00104
00105 FT_Outline_Get_BBox( outline, &bbox );
00106 printf( "bbox = [%.2f %.2f %.2f %.2f]\n",
00107 XVAL( bbox.xMin ),
00108 XVAL( bbox.yMin ),
00109 XVAL( bbox.xMax ),
00110 XVAL( bbox.yMax ) );
00111 }
00112
00113
00114
00115 static void
00116 profile_outline( FT_Outline* outline,
00117 long repeat )
00118 {
00119 FT_BBox bbox;
00120 long count;
00121 long time0;
00122
00123 time0 = get_time();
00124 for ( count = repeat; count > 0; count-- )
00125 FT_Outline_Get_CBox( outline, &bbox );
00126
00127 time0 = get_time() - time0;
00128 printf( "time = %5.2f cbox = [%.2f %.2f %.2f %.2f]\n",
00129 ((double)time0/10000.0),
00130 XVAL( bbox.xMin ),
00131 XVAL( bbox.yMin ),
00132 XVAL( bbox.xMax ),
00133 XVAL( bbox.yMax ) );
00134
00135
00136 time0 = get_time();
00137 for ( count = repeat; count > 0; count-- )
00138 FT_Outline_Get_BBox( outline, &bbox );
00139
00140 time0 = get_time() - time0;
00141 printf( "time = %5.2f bbox = [%.2f %.2f %.2f %.2f]\n",
00142 ((double)time0/10000.0),
00143 XVAL( bbox.xMin ),
00144 XVAL( bbox.yMin ),
00145 XVAL( bbox.xMax ),
00146 XVAL( bbox.yMax ) );
00147 }
00148
00149 #define REPEAT 100000L
00150
00151 int main( int argc, char** argv )
00152 {
00153 printf( "outline #1\n" );
00154 profile_outline( &dummy_outline_1, REPEAT );
00155
00156 printf( "outline #2\n" );
00157 profile_outline( &dummy_outline_2, REPEAT );
00158 return 0;
00159 }
00160