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>