Mercurial > mplayer.hg
annotate TOOLS/fastmemcpybench.c @ 27409:e2de11109139
If (has outline) blur(outline) else blur(glyph).
If there is an outline, the glyph itself should not be blurred. Keeps
the border between glyph and outline clear (unblurred), which is
probably how it should be.
Patch by Diogo Franco (diogomfranco gmail com).
author | eugeni |
---|---|
date | Thu, 07 Aug 2008 22:20:58 +0000 |
parents | 13c920fdf7f5 |
children | 08d18fe9da52 |
rev | line source |
---|---|
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
1 /* |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
2 fastmemcpybench.c used to benchmark fastmemcpy.h code from libvo. |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
3 |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
4 Note: this code can not be used on PentMMX-PII because they contain |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
5 a bug in rdtsc. For Intel processors since P6(PII) rdpmc should be used |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
6 instead. For PIII it's disputable and seems bug was fixed but I don't |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
7 tested it. |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
8 */ |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
9 |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
10 #include <stdio.h> |
572 | 11 #include <stdlib.h> |
12 #include <string.h> | |
13 #include <sys/ioctl.h> | |
14 #include <unistd.h> | |
15 #include <fcntl.h> | |
16 #include <sys/mman.h> | |
17 #include <sys/time.h> | |
13839 | 18 #include <inttypes.h> |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
19 |
572 | 20 //#define ARR_SIZE 100000 |
21 #define ARR_SIZE (1024*768*2) | |
22 | |
27365
13c920fdf7f5
Change a bunch of video-output-specific preprocessor directives from a HAVE_
diego
parents:
26759
diff
changeset
|
23 #ifdef CONFIG_MGA |
572 | 24 |
17017 | 25 #include "drivers/mga_vid.h" |
572 | 26 |
27 static mga_vid_config_t mga_vid_config; | |
28 static unsigned char* frame=NULL; | |
29 static int f; | |
30 | |
31 static int mga_init(){ | |
32 | |
33 f = open("/dev/mga_vid",O_RDWR); | |
34 if(f == -1) | |
35 { | |
36 fprintf(stderr,"Couldn't open /dev/mga_vid\n"); | |
26759
8eff880f638c
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26575
diff
changeset
|
37 return -1; |
572 | 38 } |
39 | |
40 mga_vid_config.num_frames=1; | |
41 mga_vid_config.frame_size=ARR_SIZE; | |
42 mga_vid_config.format=MGA_VID_FORMAT_YUY2; | |
43 | |
44 mga_vid_config.colkey_on=0; | |
45 mga_vid_config.src_width = 640; | |
46 mga_vid_config.src_height= 480; | |
47 mga_vid_config.dest_width = 320; | |
48 mga_vid_config.dest_height= 200; | |
49 mga_vid_config.x_org= 0; | |
50 mga_vid_config.y_org= 0; | |
51 | |
52 mga_vid_config.version=MGA_VID_VERSION; | |
53 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config)) | |
54 { | |
55 perror("Error in mga_vid_config ioctl()"); | |
56 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n"); | |
57 exit(1); | |
58 } | |
59 ioctl(f,MGA_VID_ON,0); | |
60 | |
61 frame = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0); | |
62 if(!frame){ | |
63 printf("Can't mmap mga frame\n"); | |
64 exit(1); | |
65 } | |
66 | |
67 //clear the buffer | |
68 //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); | |
69 | |
70 return 0; | |
71 | |
72 } | |
73 | |
74 #endif | |
75 | |
76 // Returns current time in microseconds | |
26575
1ca484e74f18
Mark all functions that are only used within the file as static.
diego
parents:
24211
diff
changeset
|
77 static unsigned int GetTimer(){ |
572 | 78 struct timeval tv; |
79 struct timezone tz; | |
80 // float s; | |
81 gettimeofday(&tv,&tz); | |
82 // s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec; | |
26759
8eff880f638c
cosmetics: Remove useless parentheses from return statements.
diego
parents:
26575
diff
changeset
|
83 return tv.tv_sec * 1000000 + tv.tv_usec; |
572 | 84 } |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
85 |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
86 static inline unsigned long long int read_tsc( void ) |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
87 { |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
88 unsigned long long int retval; |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
89 __asm __volatile ("rdtsc":"=A"(retval)::"memory"); |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
90 return retval; |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
91 } |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
92 |
3076
bfc881c0e591
newly allocated memory seems to point to only 1 zero filled 4k page or something so there is a near 100% cache hit rate ... not very realistic, writeing something in the source array fixes that so the benchmark scores are meaningfull now
michael
parents:
687
diff
changeset
|
93 unsigned char __attribute__((aligned(4096)))arr1[ARR_SIZE],arr2[ARR_SIZE]; |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
94 |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
95 int main( void ) |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
96 { |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
97 unsigned long long int v1,v2; |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
98 unsigned char * marr1,*marr2; |
572 | 99 int i; |
100 unsigned int t; | |
27365
13c920fdf7f5
Change a bunch of video-output-specific preprocessor directives from a HAVE_
diego
parents:
26759
diff
changeset
|
101 #ifdef CONFIG_MGA |
572 | 102 mga_init(); |
103 marr1 = &frame[3]; | |
104 #else | |
3081 | 105 marr1 = &arr1[3]; |
572 | 106 #endif |
3081 | 107 marr2 = &arr2[9]; |
3076
bfc881c0e591
newly allocated memory seems to point to only 1 zero filled 4k page or something so there is a near 100% cache hit rate ... not very realistic, writeing something in the source array fixes that so the benchmark scores are meaningfull now
michael
parents:
687
diff
changeset
|
108 |
3082 | 109 for(i=0; i<ARR_SIZE-16; i++) marr1[i] = marr2[i] = i; |
3076
bfc881c0e591
newly allocated memory seems to point to only 1 zero filled 4k page or something so there is a near 100% cache hit rate ... not very realistic, writeing something in the source array fixes that so the benchmark scores are meaningfull now
michael
parents:
687
diff
changeset
|
110 |
572 | 111 t=GetTimer(); |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
112 v1 = read_tsc(); |
572 | 113 for(i=0;i<100;i++) memcpy(marr1,marr2,ARR_SIZE-16); |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
114 v2 = read_tsc(); |
572 | 115 t=GetTimer()-t; |
116 // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t | |
687 | 117 printf(NAME": cpu clocks=%llu = %dus (%5.3ffps) %5.1fMB/s\n",v2-v1,t,100000000.0f/(float)t,(float)ARR_SIZE*95.36743f/(float)t); |
562
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
118 return 0; |
312fee2a6816
Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff
changeset
|
119 } |