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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
11 #include <stdlib.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
12 #include <string.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
13 #include <sys/ioctl.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
14 #include <unistd.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
15 #include <fcntl.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
16 #include <sys/mman.h>
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
17 #include <sys/time.h>
13839
40391656ae23 small compilation fix
rathann
parents: 3082
diff changeset
18 #include <inttypes.h>
562
312fee2a6816 Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff changeset
19
572
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
20 //#define ARR_SIZE 100000
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
21 #define ARR_SIZE (1024*768*2)
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
24
17017
dd053aeb5442 Unify include path handling by using -I.
diego
parents: 13839
diff changeset
25 #include "drivers/mga_vid.h"
572
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
26
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
27 static mga_vid_config_t mga_vid_config;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
28 static unsigned char* frame=NULL;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
29 static int f;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
30
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
31 static int mga_init(){
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
32
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
33 f = open("/dev/mga_vid",O_RDWR);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
34 if(f == -1)
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
35 {
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
38 }
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
39
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
40 mga_vid_config.num_frames=1;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
41 mga_vid_config.frame_size=ARR_SIZE;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
42 mga_vid_config.format=MGA_VID_FORMAT_YUY2;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
43
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
44 mga_vid_config.colkey_on=0;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
45 mga_vid_config.src_width = 640;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
46 mga_vid_config.src_height= 480;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
47 mga_vid_config.dest_width = 320;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
48 mga_vid_config.dest_height= 200;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
49 mga_vid_config.x_org= 0;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
50 mga_vid_config.y_org= 0;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
51
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
52 mga_vid_config.version=MGA_VID_VERSION;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
53 if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
54 {
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
55 perror("Error in mga_vid_config ioctl()");
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
56 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
57 exit(1);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
58 }
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
59 ioctl(f,MGA_VID_ON,0);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
60
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
61 frame = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
62 if(!frame){
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
63 printf("Can't mmap mga frame\n");
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
64 exit(1);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
65 }
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
66
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
67 //clear the buffer
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
68 //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
69
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
70 return 0;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
71
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
72 }
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
73
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
74 #endif
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
75
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
78 struct timeval tv;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
79 struct timezone tz;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
80 // float s;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
81 gettimeofday(&tv,&tz);
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
99 int i;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
102 mga_init();
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
103 marr1 = &frame[3];
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
104 #else
3081
aa361482f2f1 missaligned arrays, as nick requested
michael
parents: 3076
diff changeset
105 marr1 = &arr1[3];
572
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
106 #endif
3081
aa361482f2f1 missaligned arrays, as nick requested
michael
parents: 3076
diff changeset
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
michael
parents: 3081
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
111 t=GetTimer();
562
312fee2a6816 Initial release, used to benchmark fastmemcpy.h code from libvo.
atmosfear
parents:
diff changeset
112 v1 = read_tsc();
572
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
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
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
115 t=GetTimer()-t;
9935c60a15a0 added mga_vid support (systemram->videoram tests)
arpi_esp
parents: 562
diff changeset
116 // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t
687
bcb46c9eaae1 slight proofreading
nickols_k
parents: 572
diff changeset
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 }