PATH:
home
/
letacommog
/
letaweb
/
admin
/
classes
/
htmlpurifier
/
benchmarks
<?php require_once '../library/HTMLPurifier.auto.php'; @include_once '../test-settings.php'; // PEAR require_once 'Benchmark/Timer.php'; // to do the timing require_once 'Text/Password.php'; // for generating random input $LEXERS = array(); $RUNS = isset($GLOBALS['HTMLPurifierTest']['Runs']) ? $GLOBALS['HTMLPurifierTest']['Runs'] : 2; require_once 'HTMLPurifier/Lexer/DirectLex.php'; $LEXERS['DirectLex'] = new HTMLPurifier_Lexer_DirectLex(); if (version_compare(PHP_VERSION, '5', '>=')) { require_once 'HTMLPurifier/Lexer/DOMLex.php'; $LEXERS['DOMLex'] = new HTMLPurifier_Lexer_DOMLex(); } // custom class to aid unit testing class RowTimer extends Benchmark_Timer { public $name; public function RowTimer($name, $auto = false) { $this->name = htmlentities($name); $this->Benchmark_Timer($auto); } public function getOutput() { $total = $this->TimeElapsed(); $result = $this->getProfiling(); $dashes = ''; $out = '<tr>'; $out .= "<td>{$this->name}</td>"; $standard = false; foreach ($result as $k => $v) { if ($v['name'] == 'Start' || $v['name'] == 'Stop') { continue; } //$perc = (($v['diff'] * 100) / $total); //$tperc = (($v['total'] * 100) / $total); //$out .= '<td align="right">' . $v['diff'] . '</td>'; if ($standard == false) { $standard = $v['diff']; } $perc = $v['diff'] * 100 / $standard; $bad_run = ($v['diff'] < 0); $out .= '<td align="right"'. ($bad_run ? ' style="color:#AAA;"' : ''). '>'.number_format($perc, 2, '.', ''). '%</td><td>'.number_format($v['diff'], 4, '.', '').'</td>'; } $out .= '</tr>'; return $out; } } function print_lexers() { global $LEXERS; $first = true; foreach ($LEXERS as $key => $value) { if (!$first) { echo ' / '; } echo htmlspecialchars($key); $first = false; } } function do_benchmark($name, $document) { global $LEXERS, $RUNS; $config = HTMLPurifier_Config::createDefault(); $context = new HTMLPurifier_Context(); $timer = new RowTimer($name); $timer->start(); foreach ($LEXERS as $key => $lexer) { for ($i = 0; $i < $RUNS; ++$i) { $tokens = $lexer->tokenizeHTML($document, $config, $context); } $timer->setMarker($key); } $timer->stop(); $timer->display(); } ?> <html> <head> <title>Benchmark: <?php print_lexers(); ?></title> </head> <body> <h1>Benchmark: <?php print_lexers(); ?></h1> <table border="1"> <tr><th>Case</th><?php foreach ($LEXERS as $key => $value) { echo '<th colspan="2">'.htmlspecialchars($key).'</th>'; } ?></tr> <?php // ************************************************************************** // // sample of html pages $dir = 'samples/Lexer'; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if (strpos($filename, '.html') !== strlen($filename) - 5) { continue; } $document = file_get_contents($dir.'/'.$filename); do_benchmark("File: $filename", $document); } // crashers, caused infinite loops before $snippets = array(); $snippets[] = '<a href="foo>'; $snippets[] = '<a "=>'; foreach ($snippets as $snippet) { do_benchmark($snippet, $snippet); } // random input $random = Text_Password::create(80, 'unpronounceable', 'qwerty <>="\''); do_benchmark('Random input', $random); ?></table> <?php echo '<div>Random input was: '. '<span colspan="4" style="font-family:monospace;">'. htmlspecialchars($random).'</span></div>'; ?> </body></html> <?php // vim: et sw=4 sts=4
[+]
..
[-] Trace.php
[edit]
[-] Lexer.php
[edit]
[-] ConfigSchema.php
[edit]
[-] .htaccess
[edit]
[+]
samples