File: index.php - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

001: <?php
002: 
003: header ('Content-Type: text/html; charset=utf-8');
004: 
005: ?>
006: 
007: <html>
008:   <head>
009:     <style type="text/css">
010:       body
011:       {
012:         padding : 16px;
013:         margin  : 0px;
014:       }
015: 
016:       table
017:       {
018:         margin      : auto;
019:         border-collapse : collapse;
020:         border      : 1px solid gray;
021:         color     : #FFFFFF;
022:         font      : normal normal normal 10px verdana, arial, helvetica, sans-serif;
023:       }
024: 
025:       td
026:       {
027:         padding     : 0.4em;
028:         color     : #363636;
029:         text-align    : center;
030:         vertical-align  : top;
031:       }
032: 
033:       td:nth-child(1)
034:       {
035:         padding     : 0.4em 0.8em;
036:         background    : #C2D3D4;
037:         text-align    : left;
038:       }
039: 
040:       th
041:       {
042:         padding     : 0.6em 1.2em;
043:         background    : #5C443A;
044:         color     : #FFFFFF;
045:         text-align    : center;
046:         text-transform  : uppercase;
047:         vertical-align  : top;
048:       }
049: 
050:       tr
051:       {
052:         background  : #D3E4E5;
053:         border    : 1px dotted gray;
054:       }
055: 
056:       tr:nth-child(2n)
057:       {
058:         background  : #FFFFFF;
059:       }
060: 
061:       tr:hover
062:       {
063:         background  : #99BCBF;
064:         border    : 1px solid #03476F;
065:         color   : #000000;
066:       }
067:     </style>
068:   </head>
069:   <body>
070:     <table>
071:       <tr>
072:         <th>Test name</th>
073:         <th>Loop #1</th>
074:         <th>Loop #2</th>
075:         <th>Loop #3</th>
076:         <th>Average</th>
077:       </tr>
078: 
079: <?php
080: 
081: function  bench_perform ($name, $callback, $params = array ())
082: {
083:   echo '
084:       <tr>
085:         <td>' . htmlentities ($name, ENT_COMPAT, 'utf-8') . '</td>';
086: 
087:   $failed = false;
088:   $sum = 0;
089: 
090:   for ($i = 0; $i < 3; ++$i)
091:   {
092:     $time = microtime (true);
093: 
094:     if (call_user_func_array ($callback, $params))
095:     {
096:       $diff = microtime (true) - $time;
097:       $sum += $diff;
098: 
099:       echo '
100:         <td>' . round ($diff * 1000) . ' ms</td>';
101:     }
102:     else
103:     {
104:       $failed = true;
105: 
106:       echo '
107:         <td>failed</td>';
108:     }
109:   }
110: 
111:   if ($failed)
112:     echo '
113:         <td>failed</td>
114:       </tr>';
115:   else
116:     echo '
117:         <td>' . round ($sum * 1000 / 3) . ' ms</td>
118:       </tr>';
119: }
120: 
121: function  bench_skip ($name)
122: {
123:   echo '
124:       <tr>
125:         <td>' . htmlentities ($name, ENT_COMPAT, 'utf-8') . '</td>
126:         <td>skipped</td>
127:         <td>skipped</td>
128:         <td>skipped</td>
129:         <td>skipped</td>
130:       </tr>';
131: }
132: 
133: function  test_proc_loop ($loops)
134: {
135:   for ($i = 0; $i < $loops; )
136:     ++$i;
137: 
138:   return true;
139: }
140: 
141: function  test_disk_o ($loops, $size)
142: {
143:   $buffer = str_repeat ('$', $size);
144: 
145:   for ($i = 0; $i < $loops; ++$i)
146:   {
147:     $f = fopen ('dummy', 'wb');
148: 
149:         fwrite ($f, $buffer);
150:         fclose ($f);
151:   }
152: 
153:   unlink ('dummy');
154: 
155:   return true;
156: }
157: 
158: function  test_disk_r ($loops, $size)
159: {
160:     $f = fopen ('dummy', 'wb');
161: 
162:     fwrite ($f, str_repeat ('$', $size));
163:     fclose ($f);
164: 
165:   for ($i = 0; $i < $loops; ++$i)
166:   {
167:     $f = fopen ('dummy', 'rb');
168: 
169:         fread ($f, $size);
170:         fclose ($f);
171:   }
172: 
173:   unlink ('dummy');
174: 
175:   return true;
176: }
177: 
178: function  test_disk_w ($loops, $size)
179: {
180:   $buffer = str_repeat ('$', $size);
181: 
182:   for ($i = 0; $i < $loops; ++$i)
183:   {
184:     $f = fopen ('dummy', 'wb');
185: 
186:         fwrite ($f, $buffer);
187:         fclose ($f);
188: 
189:     unlink ('dummy');
190:   }
191: 
192:   return true;
193: }
194: 
195: function  test_mem_alloc ($loops, $size)
196: {
197:   for ($i = 0; $i < $loops; ++$i)
198:   {
199:     $buffer = str_repeat ('$', $size);
200: 
201:     unset ($buffer);
202:   }
203: 
204:   return true;
205: }
206: 
207: function  test_net_dl ($loops, $size)
208: {
209:   for ($i = 0; $i < $loops; ++$i)
210:   {
211:     $ch = curl_init ('http://test-debit.free.fr/image.iso');
212: 
213:     if ($ch === false)
214:       return false;
215: 
216:     curl_setopt ($ch, CURLOPT_RANGE, '0-' . ($size - 1));
217:     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
218: 
219:     if (curl_exec ($ch) === false)
220:       return false;
221: 
222:     curl_close ($ch);
223:   }
224: 
225:   return true;
226: }
227: 
228: function  test_net_ul ($loops, $size)
229: {
230:   $buffer = str_repeat ('$', $size);
231: 
232:   for ($i = 0; $i < $loops; ++$i)
233:   {
234:     $ch = curl_init ('http://test-debit.free.fr');
235: 
236:     if ($ch === false)
237:       return false;
238: 
239:     curl_setopt ($ch, CURLOPT_POST, 1);
240:     curl_setopt ($ch, CURLOPT_POSTFIELDS, array ('buffer' => $buffer));
241:     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
242: 
243:     if (curl_exec ($ch) === false)
244:       return false;
245: 
246:     curl_close ($ch);
247:   }
248: 
249:   return true;
250: }
251: 
252: bench_perform ('Memory : allocate and release 1 MB, 100 times', 'test_mem_alloc', array (100, 1024 * 1024));
253: bench_perform ('Memory : allocate and release 8 MB, 10 times', 'test_mem_alloc', array (10, 8 * 1024 * 1024));
254: 
255: if (function_exists ('curl_init'))
256: {
257:   bench_perform ('Network : download 100 B, 10 times', 'test_net_dl', array (10, 100));
258:   bench_perform ('Network : download 10 KB, 5 times', 'test_net_dl', array (5, 10 * 1024));
259:   bench_perform ('Network : upload 100 B, 10 times', 'test_net_ul', array (10, 100));
260:   bench_perform ('Network : upload 10 KB, 5 times', 'test_net_ul', array (5, 10 * 1024));
261: }
262: else
263:   bench_skip ('Network : cannot perform, cURL not available');
264: 
265: bench_perform ('Processor : empty loop, 10^5 iterations', 'test_proc_loop', array (100000));
266: bench_perform ('Processor : empty loop, 10^6 iterations', 'test_proc_loop', array (1000000));
267: 
268: bench_perform ('Storage : read 100 B from file, 20 times', 'test_disk_r', array (20, 100));
269: bench_perform ('Storage : read 10 KB from file, 10 times', 'test_disk_r', array (10, 10 * 1024));
270: bench_perform ('Storage : read 1 MB from file, 5 times', 'test_disk_r', array (5, 1024 * 1024));
271: bench_perform ('Storage : write 100 B without flush, 20 times', 'test_disk_w', array (20, 100));
272: bench_perform ('Storage : write 10 KB without flush, 10 times', 'test_disk_w', array (10, 10 * 1024));
273: bench_perform ('Storage : write 1 MB without flush, 5 times', 'test_disk_w', array (5, 1024 * 1024));
274: bench_perform ('Storage : write 100 B with flush, 20 times', 'test_disk_o', array (20, 100));
275: bench_perform ('Storage : write 10 KB with flush, 10 times', 'test_disk_o', array (10, 10 * 1024));
276: bench_perform ('Storage : write 1 MB with flush, 5 times', 'test_disk_o', array (5, 1024 * 1024));
277: 
278: ?>
279: 
280:     </table>
281:   </body>
282: </html>