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