From 5d42fb6549adf3aa660f65a8cbabb5c3efda69fe Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sat, 27 Jan 2018 09:46:12 -0800 Subject: [PATCH] benchmarks: Add benchmarkSanitizer.php Covering the following common methods: * validateEmail (input=valid, input=invalid) * encodeAttribute (input=simple, input=special) * safeEncodeAttribute (input=simple, input=special) * removeHTMLtags (input=small, input=large) * stripAllTags (input=small, input=large) Change-Id: I3c645e960607ab247bd30324a2e70eb5fbcc5d6e --- autoload.php | 1 + maintenance/benchmarks/benchmarkSanitizer.php | 99 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 maintenance/benchmarks/benchmarkSanitizer.php diff --git a/autoload.php b/autoload.php index 6fb2cc425b..168998e152 100644 --- a/autoload.php +++ b/autoload.php @@ -197,6 +197,7 @@ $wgAutoloadLocalClasses = [ 'BenchmarkLruHash' => __DIR__ . '/maintenance/benchmarks/benchmarkLruHash.php', 'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php', 'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php', + 'BenchmarkSanitizer' => __DIR__ . '/maintenance/benchmarks/benchmarkSanitizer.php', 'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php', 'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php', 'BitmapHandler' => __DIR__ . '/includes/media/Bitmap.php', diff --git a/maintenance/benchmarks/benchmarkSanitizer.php b/maintenance/benchmarks/benchmarkSanitizer.php new file mode 100644 index 0000000000..c264750b6d --- /dev/null +++ b/maintenance/benchmarks/benchmarkSanitizer.php @@ -0,0 +1,99 @@ +addDescription( 'Benchmark for Sanitizer methods.' ); + $this->addOption( 'method', 'One of "validateEmail", "encodeAttribute", ' + . '"safeEncodeAttribute", "removeHTMLtags", or "stripAllTags". ' + . 'Default: (All)', false, true ); + } + + public function execute() { + $textWithHtmlSm = 'Before and another word.'; + $textWithHtmlLg = str_repeat( + // 28K (28 chars * 1000) + wfRandomString( 3 ) . ' ' . wfRandomString( 5 ) . ' ' . wfRandomString( 7 ), + 1000 + ); + + $method = $this->getOption( 'method' ); + $benches = []; + + if ( !$method || $method === 'validateEmail' ) { + $benches['Sanitizer::validateEmail (valid)'] = function () { + Sanitizer::validateEmail( 'user@example.org' ); + }; + $benches['Sanitizer::validateEmail (invalid)'] = function () { + Sanitizer::validateEmail( 'username@example! org' ); + }; + } + if ( !$method || $method === 'encodeAttribute' ) { + $benches['Sanitizer::encodeAttribute (simple)'] = function () { + Sanitizer::encodeAttribute( 'simple' ); + }; + $benches['Sanitizer::encodeAttribute (special)'] = function () { + Sanitizer::encodeAttribute( ":'\"\n https://example" ); + }; + } + if ( !$method || $method === 'safeEncodeAttribute' ) { + $benches['Sanitizer::safeEncodeAttribute (simple)'] = function () { + Sanitizer::safeEncodeAttribute( 'simple' ); + }; + $benches['Sanitizer::safeEncodeAttribute (special)'] = function () { + Sanitizer::safeEncodeAttribute( ":'\"\n https://example" ); + }; + } + if ( !$method || $method === 'removeHTMLtags' ) { + $sm = strlen( $textWithHtmlSm ); + $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K'; + $benches["Sanitizer::removeHTMLtags (input: $sm)"] = function () use ( $textWithHtmlSm ) { + Sanitizer::removeHTMLtags( $textWithHtmlSm ); + }; + $benches["Sanitizer::removeHTMLtags (input: $lg)"] = function () use ( $textWithHtmlLg ) { + Sanitizer::removeHTMLtags( $textWithHtmlLg ); + }; + } + if ( !$method || $method === 'stripAllTags' ) { + $sm = strlen( $textWithHtmlSm ); + $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K'; + $benches["Sanitizer::stripAllTags (input: $sm)"] = function () use ( $textWithHtmlSm ) { + Sanitizer::stripAllTags( $textWithHtmlSm ); + }; + $benches["Sanitizer::stripAllTags (input: $lg)"] = function () use ( $textWithHtmlLg ) { + Sanitizer::stripAllTags( $textWithHtmlLg ); + }; + } + + $this->bench( $benches ); + } +} + +$maintClass = BenchmarkSanitizer::class; +require_once RUN_MAINTENANCE_IF_MAIN; -- 2.20.1