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>