/user/microwin/src/contrib/speedtst/speed.c

https://github.com/rhuitl/uClinux · C · 292 lines · 249 code · 27 blank · 16 comment · 10 complexity · f1c8c843c401303a85dee9cb854aa013 MD5 · raw file

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #ifdef TEST_FOR_X
  5. #include <X11/Xlib.h>
  6. #else
  7. #define MWINCLUDECOLORS
  8. #include <microwin/nano-X.h>
  9. #endif
  10. #define NUM_POINTS 80
  11. time_t start_time, end_time;
  12. void start_timer()
  13. {
  14. time(&start_time);
  15. }
  16. void end_timer()
  17. {
  18. time(&end_time);
  19. printf("start=%lu, end=%lu, time=%lu\n",
  20. start_time, end_time, end_time-start_time);
  21. }
  22. int main()
  23. {
  24. #ifdef TEST_FOR_X
  25. Display *display;
  26. Window window;
  27. GC gc;
  28. XGCValues gcValues;
  29. Colormap colormap;
  30. Pixmap src_pixmap;
  31. unsigned long fgColor, bgColor;
  32. int screenNum;
  33. XPoint points[NUM_POINTS];
  34. #else
  35. GR_WINDOW_ID window;
  36. GR_WINDOW_ID src_pixmap;
  37. unsigned char* src_pixmap_buf[320*240*2];
  38. GR_GC_ID gc;
  39. GR_POINT points[NUM_POINTS];
  40. #endif
  41. int c, c1, count=4500;
  42. int x, y, x1, y1, x2, y2;
  43. #ifdef TEST_FOR_X
  44. if(!(display=XOpenDisplay(""))) {
  45. printf("Cannot connect to X.\n");
  46. }
  47. screenNum = DefaultScreen(display);
  48. colormap = DefaultColormap(display, screenNum);
  49. bgColor = BlackPixel(display, screenNum);
  50. fgColor = WhitePixel(display, screenNum);
  51. window = XCreateSimpleWindow(display, RootWindow(display, screenNum),
  52. 0, 0 , 639, 479, 0,
  53. fgColor, bgColor);
  54. src_pixmap = XCreatePixmap(display, window, 320, 240, 16);
  55. XMapRaised(display, window);
  56. gcValues.background = bgColor;
  57. gcValues.foreground = fgColor;
  58. gcValues.line_width = 1;
  59. gcValues.line_style = LineSolid;
  60. gcValues.fill_style = FillSolid;
  61. gcValues.fill_rule = WindingRule;
  62. gcValues.arc_mode = ArcPieSlice;
  63. gc = XCreateGC(display, window,
  64. GCForeground | GCBackground | GCLineWidth | GCLineStyle |
  65. GCFillStyle,
  66. &gcValues);
  67. #else
  68. GrOpen();
  69. window = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, 639, 479, 0, BLACK, BLUE);
  70. src_pixmap = GrNewPixmap(640, 480, src_pixmap_buf);
  71. GrMapWindow(window);
  72. gc = GrNewGC();
  73. GrSetGCForeground(gc, WHITE);
  74. GrSetGCBackground(gc, BLACK);
  75. GrSetGCMode(gc, GR_MODE_COPY);
  76. #endif
  77. /* Horizontal Line
  78. ***********************************************/
  79. printf("Horizontal Line(XDrawLine)\n");
  80. start_timer();
  81. for(c=0; c<count*20; c++)
  82. {
  83. y1=random()%480;
  84. #ifdef TEST_FOR_X
  85. XDrawLine(display, window, gc, 0, y1, 639, y1);
  86. XFlush(display);
  87. #else
  88. GrLine(window, gc, 0, y1, 639, y1);
  89. GrFlush();
  90. #endif
  91. }
  92. end_timer();
  93. #ifdef TEST_FOR_X
  94. XClearWindow(display, window);
  95. #else
  96. GrClearWindow(window, GR_TRUE);
  97. #endif
  98. /* Vertical Line
  99. ***********************************************/
  100. printf("Vertical Line(XDrawLine)\n");
  101. start_timer();
  102. for(c=0; c<count*19; c++)
  103. {
  104. x1=random()%640;
  105. #ifdef TEST_FOR_X
  106. XDrawLine(display, window, gc, x1, 0, x1, 479);
  107. XFlush(display);
  108. #else
  109. GrLine(window, gc, x1, 0, x1, 479);
  110. GrFlush();
  111. #endif
  112. }
  113. end_timer();
  114. #ifdef TEST_FOR_X
  115. XClearWindow(display, window);
  116. #else
  117. GrClearWindow(window, GR_TRUE);
  118. #endif
  119. /* General Line
  120. ***********************************************/
  121. printf("General Line(XDrawLine)\n");
  122. start_timer();
  123. for(c=0; c<count*22; c++)
  124. {
  125. x1 = random()%640;
  126. x2 = random()%640;
  127. y1 = random()%480;
  128. y2 = random()%480;
  129. #ifdef TEST_FOR_X
  130. XDrawLine(display, window, gc, x1, y1, x2, y2);
  131. XFlush(display);
  132. #else
  133. GrLine(window, gc, x1, y1, x2, y2);
  134. GrFlush();
  135. #endif
  136. }
  137. end_timer();
  138. #ifdef TEST_FOR_X
  139. XClearWindow(display, window);
  140. #else
  141. GrClearWindow(window, GR_TRUE);
  142. #endif
  143. /* Point
  144. *************************************************/
  145. printf("XPoint\n");
  146. start_timer();
  147. for(c=0; c<count*25; c++)
  148. {
  149. x1 = random()%640;
  150. y1 = random()%480;
  151. #ifdef TEST_FOR_X
  152. XDrawPoint(display, window, gc, x1, y1);
  153. XFlush(display);
  154. #else
  155. GrPoint(window, gc, x1, y1);
  156. GrFlush();
  157. #endif
  158. }
  159. end_timer();
  160. #ifdef TEST_FOR_X
  161. XClearWindow(display, window);
  162. #else
  163. GrClearWindow(window, GR_TRUE);
  164. #endif
  165. /* Rectangle
  166. *************************************************/
  167. printf("XRectangle\n");
  168. start_timer();
  169. for(c=0; c<count*20; c++)
  170. {
  171. x1=random()%639;
  172. y1=random()%479;
  173. x2=random()%(639-x1)+1;
  174. y2=random()%(479-y1)+1;
  175. #ifdef TEST_FOR_X
  176. XDrawRectangle(display, window, gc, x1, y1, x2, y2);
  177. XFlush(display);
  178. #else
  179. GrRect(window, gc, x1, y1, x2, y2);
  180. GrFlush();
  181. #endif
  182. }
  183. end_timer();
  184. #ifdef TEST_FOR_X
  185. XClearWindow(display, window);
  186. #else
  187. GrClearWindow(window, GR_TRUE);
  188. #endif
  189. /* FillRectangle
  190. *************************************************/
  191. printf("XFillRectangle\n");
  192. start_timer();
  193. for(c=0; c<count*18; c++)
  194. {
  195. x1=random()%639;
  196. y1=random()%479;
  197. x2=random()%(639-x1)+1;
  198. y2=random()%(479-y1)+1;
  199. #ifdef TEST_FOR_X
  200. XFillRectangle(display, window, gc, x1, y1, x2, y2);
  201. XFlush(display);
  202. #else
  203. GrFillRect(window, gc, x1, y1, x2, y2);
  204. GrFlush();
  205. #endif
  206. }
  207. end_timer();
  208. #ifdef TEST_FOR_X
  209. XClearWindow(display, window);
  210. #else
  211. GrClearWindow(window, GR_TRUE);
  212. #endif
  213. /* FillPolygon
  214. *************************************************/
  215. printf("XFillPolygon\n");
  216. start_timer();
  217. for(c=0; c<count; c++)
  218. {
  219. for(c1=0; c1<NUM_POINTS; c1++)
  220. {
  221. points[c1].x = random()%640;
  222. points[c1].y = random()%480;
  223. }
  224. #ifdef TEST_FOR_X
  225. XFillPolygon(display, window, gc, points, NUM_POINTS,
  226. 0, 0);
  227. XFlush(display);
  228. #else
  229. GrFillPoly(window, gc, NUM_POINTS, points);
  230. GrFlush();
  231. #endif
  232. }
  233. end_timer();
  234. #ifdef TEST_FOR_X
  235. XClearWindow(display, window);
  236. #else
  237. GrClearWindow(window, GR_TRUE);
  238. #endif
  239. /* CopyArea
  240. ***********************************************/
  241. printf("XCopyArea\n");
  242. start_timer();
  243. for(c=0; c<count*5; c++)
  244. {
  245. x1=random()%320;
  246. y1=random()%240;
  247. x2=random()%319+1;
  248. y2=random()%239+1;
  249. #ifdef TEST_FOR_X
  250. XCopyArea(display, src_pixmap, window, gc,
  251. 0, 0, x2, y2, x1, y1);
  252. XFlush(display);
  253. #else
  254. GrCopyArea(window, gc, x1, y1, x2 ,y2, src_pixmap,
  255. 0, 0, 0);
  256. GrFlush();
  257. #endif
  258. }
  259. end_timer();
  260. #ifdef TEST_FOR_X
  261. XDestroyWindow(display, window);
  262. #else
  263. GrClose();
  264. #endif
  265. }