From 5a6b0985275c878dfb39d25a41faaef77303bc64 Mon Sep 17 00:00:00 2001
From: "sandholm@chromium.org"
Date: Mon, 20 Sep 2010 10:36:21 +0000
Subject: [PATCH] Changed the RegExp benchmark to exercise the regexp engine on
different inputs by scrambling the input strings. Review URL:
http://codereview.chromium.org/3435012
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5493 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
---
benchmarks/README.txt | 4 +-
benchmarks/regexp.js | 588 +++++++++++++++++++++++++++++-----------------
benchmarks/revisions.html | 4 +-
benchmarks/run.html | 2 +-
4 files changed, 376 insertions(+), 222 deletions(-)
diff --git a/benchmarks/README.txt b/benchmarks/README.txt
index 800b4f5..6676f37 100644
--- a/benchmarks/README.txt
+++ b/benchmarks/README.txt
@@ -70,7 +70,9 @@ Removed dead code from the RayTrace benchmark and fixed a couple of
typos in the DeltaBlue implementation. Changed the Splay benchmark to
avoid converting the same numeric key to a string over and over again
and to avoid inserting and removing the same element repeatedly thus
-increasing pressure on the memory subsystem.
+increasing pressure on the memory subsystem. Changed the RegExp
+benchmark to exercise the regular expression engine on different
+input strings.
Furthermore, the benchmark runner was changed to run the benchmarks
for at least a few times to stabilize the reported numbers on slower
diff --git a/benchmarks/regexp.js b/benchmarks/regexp.js
index f760866..71b9e63 100644
--- a/benchmarks/regexp.js
+++ b/benchmarks/regexp.js
@@ -1,4 +1,4 @@
-// Copyright 2009 the V8 project authors. All rights reserved.
+// Copyright 2010 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -25,21 +25,51 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Automatically generated on 2009-01-30.
+// Automatically generated on 2009-01-30. Manually updated on 2010-09-17.
// This benchmark is generated by loading 50 of the most popular pages
// on the web and logging all regexp operations performed. Each
// operation is given a weight that is calculated from an estimate of
// the popularity of the pages where it occurs and the number of times
-// it is executed while loading each page. Finally the literal
+// it is executed while loading each page. Furthermore the literal
// letters in the data are encoded using ROT13 in a way that does not
-// affect how the regexps match their input.
+// affect how the regexps match their input. Finally the strings are
+// scrambled to exercise the regexp engine on different input strings.
-var RegRxp = new BenchmarkSuite('RegExp', 910985, [
- new Benchmark("RegExp", runRegExpBenchmark)
+
+var RegExp = new BenchmarkSuite('RegExp', 910985, [
+ new Benchmark("RegExp", RegExpRun, RegExpSetup, RegExpTearDown)
]);
-function runRegExpBenchmark() {
+var regExpBenchmark = null;
+
+function RegExpSetup() {
+ regExpBenchmark = new RegExpBenchmark();
+ RegExpRun(); // run once to get system initialized
+}
+
+function RegExpRun() {
+ regExpBenchmark.run();
+}
+
+function RegExpTearDown() {
+ regExpBenchmark = null;
+}
+
+// Returns an array of n different variants of the input string str.
+// The variants are computed by randomly rotating one random
+// character.
+function computeInputVariants(str, n) {
+ var variants = [ str ];
+ for (var i = 1; i < n; i++) {
+ var pos = Math.floor(Math.random() * str.length);
+ var chr = String.fromCharCode((str.charCodeAt(pos) + Math.floor(Math.random() * 128)) % 128);
+ variants[i] = str.substring(0, pos) + chr + str.substring(pos + 1, str.length);
+ }
+ return variants;
+}
+
+function RegExpBenchmark() {
var re0 = /^ba/;
var re1 = /(((\w+):\/\/)([^\/:]*)(:(\d+))?)?([^#?]*)(\?([^#]*))?(#(.*))?/;
var re2 = /^\s*|\s*$/g;
@@ -59,77 +89,105 @@ function runRegExpBenchmark() {
var re14 = /\s+/g;
var re15 = /^\s*(\S*(\s+\S+)*)\s*$/;
var re16 = /(-[a-z])/i;
+
+ var s0 = computeInputVariants('pyvpx', 6511);
+ var s1 = computeInputVariants('uggc://jjj.snprobbx.pbz/ybtva.cuc', 1844);
+ var s2 = computeInputVariants('QBZPbageby_cynprubyqre', 739);
+ var s3 = computeInputVariants('uggc://jjj.snprobbx.pbz/', 598);
+ var s4 = computeInputVariants('uggc://jjj.snprobbx.pbz/fepu.cuc', 454);
+ var s5 = computeInputVariants('qqqq, ZZZ q, llll', 352);
+ var s6 = computeInputVariants('vachggrkg QBZPbageby_cynprubyqre', 312);
+ var s7 = computeInputVariants('/ZlFcnprUbzrcntr/Vaqrk-FvgrUbzr,10000000', 282);
+ var s8 = computeInputVariants('vachggrkg', 177);
+ var s9 = computeInputVariants('528.9', 170);
+ var s10 = computeInputVariants('528', 170);
+ var s11 = computeInputVariants('VCPhygher=ra-HF', 156);
+ var s12 = computeInputVariants('CersreerqPhygher=ra-HF', 156);
+ var s13 = computeInputVariants('xrlcerff', 144);
+ var s14 = computeInputVariants('521', 139);
+ var s15 = computeInputVariants(str0, 139);
+ var s16 = computeInputVariants('qvi .so_zrah', 137);
+ var s17 = computeInputVariants('qvi.so_zrah', 137);
+ var s18 = computeInputVariants('uvqqra_ryrz', 117);
+ var s19 = computeInputVariants('sevraqfgre_naba=nvq%3Qn6ss9p85n868ro9s059pn854735956o3%26ers%3Q%26df%3Q%26vpgl%3QHF', 95);
+ var s20 = computeInputVariants('uggc://ubzr.zlfcnpr.pbz/vaqrk.psz', 93);
+ var s21 = computeInputVariants(str1, 92);
+ var s22 = computeInputVariants('svefg', 85);
+ var s23 = computeInputVariants('uggc://cebsvyr.zlfcnpr.pbz/vaqrk.psz', 85);
+ var s24 = computeInputVariants('ynfg', 85);
+ var s25 = computeInputVariants('qvfcynl', 85);
+
function runBlock0() {
for (var i = 0; i < 6511; i++) {
- re0.exec('pyvpx');
+ re0.exec(s0[i]);
}
for (var i = 0; i < 1844; i++) {
- re1.exec('uggc://jjj.snprobbx.pbz/ybtva.cuc');
+ re1.exec(s1[i]);
}
for (var i = 0; i < 739; i++) {
- 'QBZPbageby_cynprubyqre'.replace(re2, '');
+ s2[i].replace(re2, '');
}
for (var i = 0; i < 598; i++) {
- re1.exec('uggc://jjj.snprobbx.pbz/');
+ re1.exec(s3[i]);
}
for (var i = 0; i < 454; i++) {
- re1.exec('uggc://jjj.snprobbx.pbz/fepu.cuc');
+ re1.exec(s4[i]);
}
for (var i = 0; i < 352; i++) {
- /qqqq|qqq|qq|q|ZZZZ|ZZZ|ZZ|Z|llll|ll|l|uu|u|UU|U|zz|z|ff|f|gg|g|sss|ss|s|mmm|mm|m/g.exec('qqqq, ZZZ q, llll');
+ /qqqq|qqq|qq|q|ZZZZ|ZZZ|ZZ|Z|llll|ll|l|uu|u|UU|U|zz|z|ff|f|gg|g|sss|ss|s|mmm|mm|m/g.exec(s5[i]);
}
for (var i = 0; i < 312; i++) {
- re3.exec('vachggrkg QBZPbageby_cynprubyqre');
+ re3.exec(s6[i]);
}
for (var i = 0; i < 282; i++) {
- re4.exec('/ZlFcnprUbzrcntr/Vaqrk-FvgrUbzr,10000000');
+ re4.exec(s7[i]);
}
for (var i = 0; i < 177; i++) {
- 'vachggrkg'.replace(re5, '');
+ s8[i].replace(re5, '');
}
for (var i = 0; i < 170; i++) {
- '528.9'.replace(re6, '');
- re7.exec('528');
+ s9[i].replace(re6, '');
+ re7.exec(s10[i]);
}
for (var i = 0; i < 156; i++) {
- re8.exec('VCPhygher=ra-HF');
- re8.exec('CersreerqPhygher=ra-HF');
+ re8.exec(s11[i]);
+ re8.exec(s12[i]);
}
for (var i = 0; i < 144; i++) {
- re0.exec('xrlcerff');
+ re0.exec(s13[i]);
}
for (var i = 0; i < 139; i++) {
- '521'.replace(re6, '');
- re7.exec('521');
+ s14[i].replace(re6, '');
+ re7.exec(s14[i]);
re9.exec('');
- /JroXvg\/(\S+)/.exec(str0);
+ /JroXvg\/(\S+)/.exec(s15[i]);
}
for (var i = 0; i < 137; i++) {
- 'qvi .so_zrah'.replace(re10, '');
- 'qvi .so_zrah'.replace(/\[/g, '');
- 'qvi.so_zrah'.replace(re11, '');
+ s16[i].replace(re10, '');
+ s16[i].replace(/\[/g, '');
+ s17[i].replace(re11, '');
}
for (var i = 0; i < 117; i++) {
- 'uvqqra_ryrz'.replace(re2, '');
+ s18[i].replace(re2, '');
}
for (var i = 0; i < 95; i++) {
- /(?:^|;)\s*sevraqfgre_ynat=([^;]*)/.exec('sevraqfgre_naba=nvq%3Qn6ss9p85n868ro9s059pn854735956o3%26ers%3Q%26df%3Q%26vpgl%3QHF');
+ /(?:^|;)\s*sevraqfgre_ynat=([^;]*)/.exec(s19[i]);
}
for (var i = 0; i < 93; i++) {
- 'uggc://ubzr.zlfcnpr.pbz/vaqrk.psz'.replace(re12, '');
- re13.exec('uggc://ubzr.zlfcnpr.pbz/vaqrk.psz');
+ s20[i].replace(re12, '');
+ re13.exec(s20[i]);
}
for (var i = 0; i < 92; i++) {
- str1.replace(/([a-zA-Z]|\s)+/, '');
+ s21[i].replace(/([a-zA-Z]|\s)+/, '');
}
for (var i = 0; i < 85; i++) {
- 'svefg'.replace(re14, '');
- 'svefg'.replace(re15, '');
- 'uggc://cebsvyr.zlfcnpr.pbz/vaqrk.psz'.replace(re12, '');
- 'ynfg'.replace(re14, '');
- 'ynfg'.replace(re15, '');
- re16.exec('qvfcynl');
- re13.exec('uggc://cebsvyr.zlfcnpr.pbz/vaqrk.psz');
+ s22[i].replace(re14, '');
+ s22[i].replace(re15, '');
+ s23[i].replace(re12, '');
+ s24[i].replace(re14, '');
+ s24[i].replace(re15, '');
+ re16.exec(s25[i]);
+ re13.exec(s23[i]);
}
}
var re17 = /(^|[^\\])\"\\\/Qngr\((-?[0-9]+)\)\\\/\"/g;
@@ -145,64 +203,98 @@ function runRegExpBenchmark() {
var str7 = ';;jvaqbj.IjPurpxZbhfrCbfvgvbaNQ_VQ=shapgvba(r){vs(!r)ine r=jvaqbj.rirag;ine c=-1;vs(d1)c=d1.EbyybssCnary;ine bo=IjTrgBow("IjCnayNQ_VQ_"+c);vs(bo&&bo.fglyr.ivfvovyvgl=="ivfvoyr"){ine fns=IjFns?8:0;ine pheK=r.pyvragK+IjBOFpe("U")+fns,pheL=r.pyvragL+IjBOFpe("I")+fns;ine y=IjBOEC(NQ_VQ,bo,"Y"),g=IjBOEC(NQ_VQ,bo,"G");ine e=y+d1.Cnaryf[c].Jvqgu,o=g+d1.Cnaryf[c].Urvtug;vs((pheKe)||(pheLo)){vs(jvaqbj.IjBaEbyybssNQ_VQ)IjBaEbyybssNQ_VQ(c);ryfr IjPybfrNq(NQ_VQ,c,gehr,"");}ryfr erghea;}IjPnapryZbhfrYvfgrareNQ_VQ();};;jvaqbj.IjFrgEbyybssCnaryNQ_VQ=shapgvba(c){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;c=IjTc(NQ_VQ,c);vs(d1&&d1.EbyybssCnary>-1)IjPnapryZbhfrYvfgrareNQ_VQ();vs(d1)d1.EbyybssCnary=c;gel{vs(q.nqqRiragYvfgrare)q.nqqRiragYvfgrare(z,s,snyfr);ryfr vs(q.nggnpuRirag)q.nggnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjPnapryZbhfrYvfgrareNQ_VQ=shapgvba(){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;vs(d1)d1.EbyybssCnary=-1;gel{vs(q.erzbirRiragYvfgrare)q.erzbirRiragYvfgrare(z,s,snyfr);ryfr vs(q.qrgnpuRirag)q.qrgnpuRirag("ba"+z,s);}pngpu(r){}};;d1.IjTc=d2(n,c){ine nq=d1;vs(vfAnA(c)){sbe(ine v=0;v0){vs(nq.FzV.yratgu>0)nq.FzV+="/";nq.FzV+=vh[v];nq.FtZ[nq.FtZ.yratgu]=snyfr;}}};;d1.IjYvzvg0=d2(n,f){ine nq=d1,vh=f.fcyvg("/");sbe(ine v=0;v0){vs(nq.OvC.yratgu>0)nq.OvC+="/";nq.OvC+=vh[v];}}};;d1.IjRVST=d2(n,c){jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]=IjTrgBow("IjCnayNQ_VQ_"+c+"_Bow");vs(jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]==ahyy)frgGvzrbhg("IjRVST(NQ_VQ,"+c+")",d1.rvsg);};;d1.IjNavzSHC=d2(n,c){ine nq=d1;vs(c>nq.Cnaryf.yratgu)erghea;ine cna=nq.Cnaryf[c],nn=gehr,on=gehr,yn=gehr,en=gehr,cn=nq.Cnaryf[0],sf=nq.ShF,j=cn.Jvqgu,u=cn.Urvtug;vs(j=="100%"){j=sf;en=snyfr;yn=snyfr;}vs(u=="100%"){u=sf;nn=snyfr;on=snyfr;}vs(cn.YnY=="Y")yn=snyfr;vs(cn.YnY=="E")en=snyfr;vs(cn.GnY=="G")nn=snyfr;vs(cn.GnY=="O")on=snyfr;ine k=0,l=0;fjvgpu(nq.NshP%8){pnfr 0:oernx;pnfr 1:vs(nn)l=-sf;oernx;pnfr 2:k=j-sf;oernx;pnfr 3:vs(en)k=j;oernx;pnfr 4:k=j-sf;l=u-sf;oernx;pnfr 5:k=j-sf;vs(on)l=u;oernx;pnfr 6:l=u-sf;oernx;pnfr 7:vs(yn)k=-sf;l=u-sf;oernx;}vs(nq.NshP++ 0)||(nethzragf.yratgu==3&&bG>0))){pyrneGvzrbhg(cay.UgU);cay.UgU=frgGvzrbhg(cay.UvqrNpgvba,(nethzragf.yratgu==3?bG:cay.UvqrGvzrbhgInyhr));}};;d1.IjErfrgGvzrbhg=d2(n,c,bG){c=IjTc(n,c);IjPnapryGvzrbhg(n,c);riny("IjFgnegGvzrbhg(NQ_VQ,c"+(nethzragf.yratgu==3?",bG":"")+")");};;d1.IjErfrgNyyGvzrbhgf=d2(n){sbe(ine c=0;c'.replace(re55, '');
''.replace(re55, '');
- str1.replace(/^.*\s+(\S+\s+\S+$)/, '');
+ s21[i].replace(/^.*\s+(\S+\s+\S+$)/, '');
'tzk%2Subzrcntr%2Sfgneg%2Sqr%2S'.replace(re30, '');
'tzk'.replace(re30, '');
'uggc://${ubfg}${cngu}/${dz}'.replace(/(\$\{ubfg\})|(\$ubfg\b)/g, '');
@@ -549,61 +671,70 @@ function runRegExpBenchmark() {
var re62 = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
var str34 = '${1}://${2}${3}${4}${5}';
var str35 = ' O=6gnyg0g4znrrn&o=3&f=gc; Q=_lyu=K3bQZGSxnT4lZzD3OS9GNmV3ZGLkAQxRpTyxNmRlZmRmAmNkAQLRqTImqNZjOUEgpTjQnJ5xMKtgoN--; SCF=qy';
+ var s83 = computeInputVariants(str27, 11);
+ var s84 = computeInputVariants(str28, 11);
+ var s85 = computeInputVariants(str29, 11);
+ var s86 = computeInputVariants(str30, 11);
+ var s87 = computeInputVariants(str31, 11);
+ var s88 = computeInputVariants(str32, 11);
+ var s89 = computeInputVariants(str33, 11);
+ var s90 = computeInputVariants(str34, 11);
+
function runBlock6() {
for (var i = 0; i < 11; i++) {
- str27.replace(/##yv0##/gi, '');
- str27.replace(re57, '');
- str28.replace(re58, '');
- str29.replace(re59, '');
- str30.replace(/##\/o##/gi, '');
- str30.replace(/##\/v##/gi, '');
- str30.replace(/##\/h##/gi, '');
- str30.replace(/##o##/gi, '');
- str30.replace(/##oe##/gi, '');
- str30.replace(/##v##/gi, '');
- str30.replace(/##h##/gi, '');
- str31.replace(/##n##/gi, '');
- str32.replace(/##\/n##/gi, '');
- str33.replace(/#~#argjbexybtb#~#/g, '');
- / Zbovyr\//.exec(str0);
- /##yv1##/gi.exec(str27);
- /##yv10##/gi.exec(str28);
- /##yv11##/gi.exec(str28);
- /##yv12##/gi.exec(str28);
- /##yv13##/gi.exec(str28);
- /##yv14##/gi.exec(str28);
- /##yv15##/gi.exec(str28);
- re58.exec(str28);
- /##yv17##/gi.exec(str29);
- /##yv18##/gi.exec(str29);
- re59.exec(str29);
- /##yv2##/gi.exec(str27);
- /##yv20##/gi.exec(str30);
- /##yv21##/gi.exec(str30);
- /##yv22##/gi.exec(str30);
- /##yv23##/gi.exec(str30);
- /##yv3##/gi.exec(str27);
- re57.exec(str27);
- /##yv5##/gi.exec(str28);
- /##yv6##/gi.exec(str28);
- /##yv7##/gi.exec(str28);
- /##yv8##/gi.exec(str28);
- /##yv9##/gi.exec(str28);
+ s83[i].replace(/##yv0##/gi, '');
+ s83[i].replace(re57, '');
+ s84[i].replace(re58, '');
+ s85[i].replace(re59, '');
+ s86[i].replace(/##\/o##/gi, '');
+ s86[i].replace(/##\/v##/gi, '');
+ s86[i].replace(/##\/h##/gi, '');
+ s86[i].replace(/##o##/gi, '');
+ s86[i].replace(/##oe##/gi, '');
+ s86[i].replace(/##v##/gi, '');
+ s86[i].replace(/##h##/gi, '');
+ s87[i].replace(/##n##/gi, '');
+ s88[i].replace(/##\/n##/gi, '');
+ s89[i].replace(/#~#argjbexybtb#~#/g, '');
+ / Zbovyr\//.exec(s15[i]);
+ /##yv1##/gi.exec(s83[i]);
+ /##yv10##/gi.exec(s84[i]);
+ /##yv11##/gi.exec(s84[i]);
+ /##yv12##/gi.exec(s84[i]);
+ /##yv13##/gi.exec(s84[i]);
+ /##yv14##/gi.exec(s84[i]);
+ /##yv15##/gi.exec(s84[i]);
+ re58.exec(s84[i]);
+ /##yv17##/gi.exec(s85[i]);
+ /##yv18##/gi.exec(s85[i]);
+ re59.exec(s85[i]);
+ /##yv2##/gi.exec(s83[i]);
+ /##yv20##/gi.exec(s86[i]);
+ /##yv21##/gi.exec(s86[i]);
+ /##yv22##/gi.exec(s86[i]);
+ /##yv23##/gi.exec(s86[i]);
+ /##yv3##/gi.exec(s83[i]);
+ re57.exec(s83[i]);
+ /##yv5##/gi.exec(s84[i]);
+ /##yv6##/gi.exec(s84[i]);
+ /##yv7##/gi.exec(s84[i]);
+ /##yv8##/gi.exec(s84[i]);
+ /##yv9##/gi.exec(s84[i]);
re8.exec('473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29');
re8.exec('SbeprqRkcvengvba=633669325184628362');
re8.exec('FrffvbaQQS2=473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29');
- /AbxvnA[^\/]*/.exec(str0);
+ /AbxvnA[^\/]*/.exec(s15[i]);
}
for (var i = 0; i < 10; i++) {
' bss'.replace(/(?:^|\s+)bss(?:\s+|$)/g, '');
- str34.replace(/(\$\{0\})|(\$0\b)/g, '');
- str34.replace(/(\$\{1\})|(\$1\b)/g, '');
- str34.replace(/(\$\{pbzcyrgr\})|(\$pbzcyrgr\b)/g, '');
- str34.replace(/(\$\{sentzrag\})|(\$sentzrag\b)/g, '');
- str34.replace(/(\$\{ubfgcbeg\})|(\$ubfgcbeg\b)/g, '');
- str34.replace(re56, '');
- str34.replace(/(\$\{cebgbpby\})|(\$cebgbpby\b)/g, '');
- str34.replace(/(\$\{dhrel\})|(\$dhrel\b)/g, '');
+ s90[i].replace(/(\$\{0\})|(\$0\b)/g, '');
+ s90[i].replace(/(\$\{1\})|(\$1\b)/g, '');
+ s90[i].replace(/(\$\{pbzcyrgr\})|(\$pbzcyrgr\b)/g, '');
+ s90[i].replace(/(\$\{sentzrag\})|(\$sentzrag\b)/g, '');
+ s90[i].replace(/(\$\{ubfgcbeg\})|(\$ubfgcbeg\b)/g, '');
+ s90[i].replace(re56, '');
+ s90[i].replace(/(\$\{cebgbpby\})|(\$cebgbpby\b)/g, '');
+ s90[i].replace(/(\$\{dhrel\})|(\$dhrel\b)/g, '');
'nqfvmr'.replace(re29, '');
'nqfvmr'.replace(re30, '');
'uggc://${2}${3}${4}${5}'.replace(/(\$\{2\})|(\$2\b)/g, '');
@@ -629,7 +760,7 @@ function runRegExpBenchmark() {
re9.exec('zrqvgobk');
re9.exec('hsgy');
re9.exec('lhv-h');
- /Fnsnev|Xbadhrebe|XUGZY/gi.exec(str0);
+ /Fnsnev|Xbadhrebe|XUGZY/gi.exec(s15[i]);
re61.exec('uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/onfr.wf');
re62.exec('#Ybtva_rznvy');
}
@@ -640,6 +771,9 @@ function runRegExpBenchmark() {
var str38 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231364057761&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231364057761&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Ssevraqf.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1667363813.1231364061&tn_fvq=1231364061&tn_uvq=1917563877&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
var str39 = 'ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669321699093060&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
var str40 = 'ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669321699093060&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var s91 = computeInputVariants(str36, 9);
+ var s92 = computeInputVariants(str37, 9);
+ var s93 = computeInputVariants(str38, 9);
function runBlock7() {
for (var i = 0; i < 9; i++) {
'0'.replace(re40, '');
@@ -660,15 +794,15 @@ function runRegExpBenchmark() {
for (var i = 0; i < 8; i++) {
'Pybfr {0}'.replace(re63, '');
'Bcra {0}'.replace(re63, '');
- str36.split(re32);
- str37.split(re32);
+ s91[i].split(re32);
+ s92[i].split(re32);
'puvyq p1 svefg gnournqref'.replace(re14, '');
'puvyq p1 svefg gnournqref'.replace(re15, '');
'uqy_fcb'.replace(re14, '');
'uqy_fcb'.replace(re15, '');
'uvag'.replace(re14, '');
'uvag'.replace(re15, '');
- str38.replace(re33, '');
+ s93[i].replace(re33, '');
'yvfg'.replace(re14, '');
'yvfg'.replace(re15, '');
'at_bhgre'.replace(re30, '');
@@ -697,8 +831,8 @@ function runRegExpBenchmark() {
re8.exec('__hgzo=144631658.0.10.1231364074');
re8.exec('__hgzm=144631658.1231364074.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
re8.exec('p98s8o9q42nr21or1r61pqorn1n002nsss569635984s6qp7');
- re34.exec(str36);
- re34.exec(str37);
+ re34.exec(s91[i]);
+ re34.exec(s92[i]);
}
}
var re64 = /\b[a-z]/g;
@@ -707,7 +841,7 @@ function runRegExpBenchmark() {
var str41 = 'uggc://cebsvyr.zlfcnpr.pbz/Zbqhyrf/Nccyvpngvbaf/Cntrf/Pnainf.nfck';
function runBlock8() {
for (var i = 0; i < 7; i++) {
- str1.match(/\d+/g);
+ s21[i].match(/\d+/g);
'nsgre'.replace(re64, '');
'orsber'.replace(re64, '');
'obggbz'.replace(re64, '');
@@ -741,9 +875,9 @@ function runRegExpBenchmark() {
re19.exec('gno6');
re19.exec('gno7');
re19.exec('gno8');
- /NqborNVE\/([^\s]*)/.exec(str0);
- /NccyrJroXvg\/([^ ]*)/.exec(str0);
- /XUGZY/gi.exec(str0);
+ /NqborNVE\/([^\s]*)/.exec(s15[i]);
+ /NccyrJroXvg\/([^ ]*)/.exec(s15[i]);
+ /XUGZY/gi.exec(s15[i]);
/^(?:obql|ugzy)$/i.exec('YV');
re38.exec('ohggba');
re38.exec('vachg');
@@ -774,14 +908,14 @@ function runRegExpBenchmark() {
'freivpr'.replace(re46, '');
'freivpr'.replace(re47, '');
'freivpr'.replace(re48, '');
- /((ZFVR\s+([6-9]|\d\d)\.))/.exec(str0);
+ /((ZFVR\s+([6-9]|\d\d)\.))/.exec(s15[i]);
re66.exec('');
re50.exec('fryrpgrq');
re8.exec('8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn');
re8.exec('SbeprqRkcvengvba=633669340386893867');
re8.exec('VC=74.125.75.17');
re8.exec('FrffvbaQQS2=8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn');
- /Xbadhrebe|Fnsnev|XUGZY/.exec(str0);
+ /Xbadhrebe|Fnsnev|XUGZY/.exec(s15[i]);
re13.exec(str41);
re49.exec('unfsbphf');
}
@@ -826,12 +960,23 @@ function runRegExpBenchmark() {
var str61 = 'uggc://gx2.fgp.f-zfa.pbz/oe/uc/11/ra-hf/pff/v/g.tvs#uggc://gx2.fgo.f-zfa.pbz/v/29/4RQP4969777N048NPS4RRR3PO2S7S.wct';
var str62 = 'uggc://gx2.fgp.f-zfa.pbz/oe/uc/11/ra-hf/pff/v/g.tvs#uggc://gx2.fgo.f-zfa.pbz/v/OQ/63NP9O94NS5OQP1249Q9S1ROP7NS3.wct';
var str63 = 'zbmvyyn/5.0 (jvaqbjf; h; jvaqbjf ag 5.1; ra-hf) nccyrjroxvg/528.9 (xugzy, yvxr trpxb) puebzr/2.0.157.0 fnsnev/528.9';
+ var s94 = computeInputVariants(str42, 5);
+ var s95 = computeInputVariants(str43, 5);
+ var s96 = computeInputVariants(str44, 5);
+ var s97 = computeInputVariants(str47, 5);
+ var s98 = computeInputVariants(str48, 5);
+ var s99 = computeInputVariants(str49, 5);
+ var s100 = computeInputVariants(str50, 5);
+ var s101 = computeInputVariants(str51, 5);
+ var s102 = computeInputVariants(str52, 5);
+ var s103 = computeInputVariants(str53, 5);
+
function runBlock9() {
for (var i = 0; i < 5; i++) {
- str42.split(re32);
- str43.split(re32);
+ s94[i].split(re32);
+ s95[i].split(re32);
'svz_zlfcnpr_hfre-ivrj-pbzzragf,svz_zlfcnpr_havgrq-fgngrf'.split(re20);
- str44.replace(re33, '');
+ s96[i].replace(re33, '');
'zrah_arj zrah_arj_gbttyr zrah_gbttyr'.replace(re67, '');
'zrah_byq zrah_byq_gbttyr zrah_gbttyr'.replace(re67, '');
re8.exec('102n9o0o9pq60132qn0337rr867p75953502q2s27s2s5r98');
@@ -855,12 +1000,12 @@ function runRegExpBenchmark() {
' yvfg2'.replace(re15, '');
' frneputebhc1'.replace(re14, '');
' frneputebhc1'.replace(re15, '');
- str47.replace(re68, '');
- str47.replace(re18, '');
+ s97[i].replace(re68, '');
+ s97[i].replace(re18, '');
''.replace(/&/g, '');
''.replace(re35, '');
'(..-{0})(\|(\d+)|)'.replace(re63, '');
- str48.replace(re18, '');
+ s98[i].replace(re18, '');
'//vzt.jro.qr/vij/FC/${cngu}/${anzr}/${inyhr}?gf=${abj}'.replace(re56, '');
'//vzt.jro.qr/vij/FC/tzk_uc/${anzr}/${inyhr}?gf=${abj}'.replace(/(\$\{anzr\})|(\$anzr\b)/g, '');
'Jvaqbjf Yvir Ubgznvy{1}'.replace(re69, '');
@@ -872,8 +1017,8 @@ function runRegExpBenchmark() {
'Zncf'.replace(re15, '');
'Zbq-Vasb-Vasb-WninFpevcgUvag'.replace(re39, '');
'Arjf'.replace(re15, '');
- str49.split(re32);
- str50.split(re32);
+ s99[i].split(re32);
+ s100[i].split(re32);
'Ivqrb'.replace(re15, '');
'Jro'.replace(re15, '');
'n'.replace(re39, '');
@@ -907,17 +1052,17 @@ function runRegExpBenchmark() {
'uc_fubccvatobk'.replace(re30, '');
'ugzy%2Rvq'.replace(re29, '');
'ugzy%2Rvq'.replace(re30, '');
- str51.replace(re33, '');
+ s101[i].replace(re33, '');
'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/cebgbglcr.wf${4}${5}'.replace(re71, '');
'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/cebgbglcr.wf${5}'.replace(re72, '');
- str52.replace(re73, '');
+ s102[i].replace(re73, '');
'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/f55332979829981?[NDO]&{1}&{2}&[NDR]'.replace(re69, '');
'vztZFSG'.replace(re14, '');
'vztZFSG'.replace(re15, '');
'zfasbbg1 ps'.replace(re14, '');
'zfasbbg1 ps'.replace(re15, '');
- str53.replace(re14, '');
- str53.replace(re15, '');
+ s103[i].replace(re14, '');
+ s103[i].replace(re15, '');
'cnerag puebzr6 fvatyr1 gno fryrpgrq ovaq'.replace(re14, '');
'cnerag puebzr6 fvatyr1 gno fryrpgrq ovaq'.replace(re15, '');
'cevznel'.replace(re14, '');
@@ -945,11 +1090,11 @@ function runRegExpBenchmark() {
re8.exec('__hgzn=144631658.2770915348920628700.1231367708.1231367708.1231367708.1');
re8.exec('__hgzo=144631658.0.10.1231367708');
re8.exec('__hgzm=144631658.1231367708.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
- re34.exec(str49);
- re34.exec(str50);
- /ZFVR\s+5[.]01/.exec(str0);
+ re34.exec(s99[i]);
+ re34.exec(s100[i]);
+ /ZFVR\s+5[.]01/.exec(s15[i]);
/HF(?=;)/i.exec(str56);
- re74.exec(str47);
+ re74.exec(s97[i]);
re28.exec('svefg npgvir svefgNpgvir');
re28.exec('ynfg');
/\bp:(..)/i.exec('m:94043|yn:37.4154|yb:-122.0585|p:HF');
@@ -967,15 +1112,15 @@ function runRegExpBenchmark() {
re79.exec(str60);
re79.exec(str59);
/\|p:([a-z]{2})/i.exec('m:94043|yn:37.4154|yb:-122.0585|p:HF|ue:1');
- re80.exec(str47);
+ re80.exec(s97[i]);
re61.exec('cebgbglcr.wf');
- re68.exec(str47);
- re81.exec(str47);
- re82.exec(str47);
- /^Fubpxjnir Synfu (\d)/.exec(str1);
- /^Fubpxjnir Synfu (\d+)/.exec(str1);
+ re68.exec(s97[i]);
+ re81.exec(s97[i]);
+ re82.exec(s97[i]);
+ /^Fubpxjnir Synfu (\d)/.exec(s21[i]);
+ /^Fubpxjnir Synfu (\d+)/.exec(s21[i]);
re83.exec('[bowrpg tybony]');
- re62.exec(str47);
+ re62.exec(s97[i]);
re84.exec(str61);
re84.exec(str62);
/jroxvg/.exec(str63);
@@ -1597,18 +1742,23 @@ function runRegExpBenchmark() {
/jvaqbjf/.exec(str63);
}
}
- for (var i = 0; i < 5; i++) {
- runBlock0();
- runBlock1();
- runBlock2();
- runBlock3();
- runBlock4();
- runBlock5();
- runBlock6();
- runBlock7();
- runBlock8();
- runBlock9();
- runBlock10();
- runBlock11();
+
+ function run() {
+ for (var i = 0; i < 5; i++) {
+ runBlock0();
+ runBlock1();
+ runBlock2();
+ runBlock3();
+ runBlock4();
+ runBlock5();
+ runBlock6();
+ runBlock7();
+ runBlock8();
+ runBlock9();
+ runBlock10();
+ runBlock11();
+ }
}
+
+ this.run = run;
}
diff --git a/benchmarks/revisions.html b/benchmarks/revisions.html
index 1c54f63..6ff75be 100644
--- a/benchmarks/revisions.html
+++ b/benchmarks/revisions.html
@@ -26,7 +26,9 @@ the benchmark suite.
typos in the DeltaBlue implementation. Changed the Splay benchmark to
avoid converting the same numeric key to a string over and over again
and to avoid inserting and removing the same element repeatedly thus
-increasing pressure on the memory subsystem.
+increasing pressure on the memory subsystem. Changed the RegExp
+benchmark to exercise the regular expression engine on different input
+strings.
Furthermore, the benchmark runner was changed to run the benchmarks
for at least a few times to stabilize the reported numbers on slower
diff --git a/benchmarks/run.html b/benchmarks/run.html
index 05bfffe..36d2ad5 100644
--- a/benchmarks/run.html
+++ b/benchmarks/run.html
@@ -114,7 +114,7 @@ higher scores means better performance: Bigger is better!
RayTrace
Ray tracer benchmark based on code by Adam Burmister (904 lines).
EarleyBoyer
Classic Scheme benchmarks, translated to JavaScript by Florian Loitsch's Scheme2Js compiler (4684 lines).
RegExp
Regular expression benchmark generated by extracting regular expression operations from 50 of the most popular web pages
-(1614 lines).
+(1761 lines).
Splay
Data manipulation benchmark that deals with splay trees and exercises the automatic memory management subsystem (394 lines).
--
2.7.4