test_bbox.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include <ft2build.h>
  2. #include FT_FREETYPE_H
  3. #include FT_BBOX_H
  4. #include <time.h> /* for clock() */
  5. /* SunOS 4.1.* does not define CLOCKS_PER_SEC, so include <sys/param.h> */
  6. /* to get the HZ macro which is the equivalent. */
  7. #if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
  8. #include <sys/param.h>
  9. #define CLOCKS_PER_SEC HZ
  10. #endif
  11. static long
  12. get_time( void )
  13. {
  14. return clock() * 10000L / CLOCKS_PER_SEC;
  15. }
  16. /* test bbox computations */
  17. #define XSCALE 65536
  18. #define XX(x) ((FT_Pos)(x*XSCALE))
  19. #define XVEC(x,y) { XX(x), XX(y) }
  20. #define XVAL(x) ((x)/(1.0*XSCALE))
  21. /* dummy outline #1 */
  22. static FT_Vector dummy_vec_1[4] =
  23. {
  24. #if 1
  25. XVEC( 408.9111, 535.3164 ),
  26. XVEC( 455.8887, 634.396 ),
  27. XVEC( -37.8765, 786.2207 ),
  28. XVEC( 164.6074, 535.3164 )
  29. #else
  30. { (FT_Int32)0x0198E93DL , (FT_Int32)0x021750FFL }, /* 408.9111, 535.3164 */
  31. { (FT_Int32)0x01C7E312L , (FT_Int32)0x027A6560L }, /* 455.8887, 634.3960 */
  32. { (FT_Int32)0xFFDA1F9EL , (FT_Int32)0x0312387FL }, /* -37.8765, 786.2207 */
  33. { (FT_Int32)0x00A49B7EL , (FT_Int32)0x021750FFL } /* 164.6074, 535.3164 */
  34. #endif
  35. };
  36. static char dummy_tag_1[4] =
  37. {
  38. FT_CURVE_TAG_ON,
  39. FT_CURVE_TAG_CUBIC,
  40. FT_CURVE_TAG_CUBIC,
  41. FT_CURVE_TAG_ON
  42. };
  43. static short dummy_contour_1[1] =
  44. {
  45. 3
  46. };
  47. static FT_Outline dummy_outline_1 =
  48. {
  49. 1,
  50. 4,
  51. dummy_vec_1,
  52. dummy_tag_1,
  53. dummy_contour_1,
  54. 0
  55. };
  56. /* dummy outline #2 */
  57. static FT_Vector dummy_vec_2[4] =
  58. {
  59. XVEC( 100.0, 100.0 ),
  60. XVEC( 100.0, 200.0 ),
  61. XVEC( 200.0, 200.0 ),
  62. XVEC( 200.0, 133.0 )
  63. };
  64. static FT_Outline dummy_outline_2 =
  65. {
  66. 1,
  67. 4,
  68. dummy_vec_2,
  69. dummy_tag_1,
  70. dummy_contour_1,
  71. 0
  72. };
  73. static void
  74. dump_outline( FT_Outline* outline )
  75. {
  76. FT_BBox bbox;
  77. /* compute and display cbox */
  78. FT_Outline_Get_CBox( outline, &bbox );
  79. printf( "cbox = [%.2f %.2f %.2f %.2f]\n",
  80. XVAL( bbox.xMin ),
  81. XVAL( bbox.yMin ),
  82. XVAL( bbox.xMax ),
  83. XVAL( bbox.yMax ) );
  84. /* compute and display bbox */
  85. FT_Outline_Get_BBox( outline, &bbox );
  86. printf( "bbox = [%.2f %.2f %.2f %.2f]\n",
  87. XVAL( bbox.xMin ),
  88. XVAL( bbox.yMin ),
  89. XVAL( bbox.xMax ),
  90. XVAL( bbox.yMax ) );
  91. }
  92. static void
  93. profile_outline( FT_Outline* outline,
  94. long repeat )
  95. {
  96. FT_BBox bbox;
  97. long count;
  98. long time0;
  99. time0 = get_time();
  100. for ( count = repeat; count > 0; count-- )
  101. FT_Outline_Get_CBox( outline, &bbox );
  102. time0 = get_time() - time0;
  103. printf( "time = %5.2f cbox = [%.2f %.2f %.2f %.2f]\n",
  104. ((double)time0/10000.0),
  105. XVAL( bbox.xMin ),
  106. XVAL( bbox.yMin ),
  107. XVAL( bbox.xMax ),
  108. XVAL( bbox.yMax ) );
  109. time0 = get_time();
  110. for ( count = repeat; count > 0; count-- )
  111. FT_Outline_Get_BBox( outline, &bbox );
  112. time0 = get_time() - time0;
  113. printf( "time = %5.2f bbox = [%.2f %.2f %.2f %.2f]\n",
  114. ((double)time0/10000.0),
  115. XVAL( bbox.xMin ),
  116. XVAL( bbox.yMin ),
  117. XVAL( bbox.xMax ),
  118. XVAL( bbox.yMax ) );
  119. }
  120. #define REPEAT 100000L
  121. int main( int argc, char** argv )
  122. {
  123. printf( "outline #1\n" );
  124. profile_outline( &dummy_outline_1, REPEAT );
  125. printf( "outline #2\n" );
  126. profile_outline( &dummy_outline_2, REPEAT );
  127. return 0;
  128. }