Merge branch 'bench-fixup'

This commit is contained in:
kpdecker
2013-08-24 22:51:28 -05:00
3 changed files with 53 additions and 47 deletions
+20 -27
View File
@@ -12,25 +12,7 @@ var print = require("sys").print;
BenchWarmer.prototype = {
winners: function(benches) {
var result = Benchmark.filter(benches, function(bench) { return bench.cycles; });
if (result.length > 1) {
result.sort(function(a, b) { return b.compare(a); });
first = result[0];
last = result[result.length - 1];
var winners = [];
Benchmark.each(result, function(bench) {
if (bench.compare(first) === 0) {
winners.push(bench);
}
});
return winners;
} else {
return result;
}
return Benchmark.filter(benches, 'fastest');
},
suite: function(suite, fn) {
this.suiteName = suite;
@@ -50,9 +32,7 @@ BenchWarmer.prototype = {
var first = this.first, suiteName = this.suiteName, self = this;
this.first = false;
var bench = new Benchmark(function() {
fn();
}, {
var bench = new Benchmark(fn, {
name: this.suiteName + ": " + name,
onComplete: function() {
if(first) { self.startLine(suiteName); }
@@ -79,7 +59,7 @@ BenchWarmer.prototype = {
var horSize = 0;
this.startLine("ops/msec");
horSize = horSize + "ops/msec ".length;
horSize = horSize + this.benchSize;
for(i=0, l=names.length; i<l; i++) {
print(names[i] + new Array(this.benchSize - names[i].length + 1).join(" "));
horSize = horSize + this.benchSize;
@@ -93,13 +73,22 @@ BenchWarmer.prototype = {
Benchmark.invoke(this.benchmarks, {
name: "run",
onComplete: function() {
self.startLine('');
var errors = false, prop, bench;
for(prop in self.errors) { if(self.errors.hasOwnProperty(prop)) { errors = true; break; } }
for(prop in self.errors) {
if (self.errors.hasOwnProperty(prop)
&& self.errors[prop].error.message !== 'EWOT') {
errors = true;
break;
}
}
if(errors) {
print("\n\nErrors:\n");
for(prop in self.errors) {
if(self.errors.hasOwnProperty(prop)) {
if (self.errors.hasOwnProperty(prop)
&& self.errors[prop].error.message !== 'EWOT') {
bench = self.errors[prop];
print("\n" + bench.name + ":\n");
print(bench.error.message);
@@ -124,7 +113,7 @@ BenchWarmer.prototype = {
print(winners.join(", "));
print("\n");
var padding = this.nameSize - name.length + 1;
var padding = Math.max(this.benchSize - name.length + 1, 0);
name = name + new Array(padding).join(" ");
print(name);
},
@@ -137,7 +126,11 @@ BenchWarmer.prototype = {
out = Math.round(count / 1000) + " ±" + Math.round(moe / 1000) + " (" + bench.cycles + ")";
} else {
out = "E";
if (bench.error.message === 'EWOT') {
out = 'NA';
} else {
out = 'E';
}
}
var padding = this.benchSize - out.length + 1;
+31 -19
View File
@@ -4,7 +4,7 @@ Handlebars = require("../lib/handlebars");
var dust, Mustache, eco;
try {
dust = require("dust");
dust = require("dustjs-linkedin");
} catch (err) { /* NOP */ }
try {
@@ -15,7 +15,7 @@ try {
var ecoExports = require("eco");
eco = function(str) {
return ecoExports(str);
}
};
} catch (err) { /* NOP */ }
var benchDetails = {
@@ -100,31 +100,36 @@ var benchDetails = {
};
handlebarsTemplates = {};
ecoTemplates = {};
var handlebarsTemplates = {},
ecoTemplates = {};
var warmer = new BenchWarmer();
var makeSuite = function(name) {
function makeSuite(name) {
warmer.suite(name, function(bench) {
var templateName = name;
var details = benchDetails[templateName];
var mustachePartials = details.partials && details.partials.mustache;
var mustacheSource = details.mustache;
var context = details.context;
var options = {helpers: details.helpers};
var error = function() { throw new Error("EWOT"); };
if (dust) {
bench("dust", function() {
dust.render(templateName, context, function(err, out) { });
});
}
bench("handlebars", function() {
handlebarsTemplates[templateName](context);
handlebarsTemplates[templateName](context, options);
});
if (dust) {
if (details.dust) {
bench("dust", function() {
dust.render(templateName, context, function(err, out) { });
});
} else {
bench('dust', error);
}
}
if (eco) {
if(ecoTemplates[templateName]) {
bench("eco", function() {
@@ -135,21 +140,28 @@ var makeSuite = function(name) {
}
}
if (Mustache && mustacheSource) {
bench("mustache", function() {
Mustache.to_html(mustacheSource, context, mustachePartials);
});
} else {
bench("mustache", error);
if (Mustache) {
if (mustacheSource) {
bench("mustache", function() {
Mustache.to_html(mustacheSource, context, mustachePartials);
});
} else {
bench("mustache", error);
}
}
});
}
for(var name in benchDetails) {
if(benchDetails.hasOwnProperty(name)) {
if (dust) {
if (!benchDetails[name].handlebars) {
continue;
}
if (dust && benchDetails[name].dust) {
dust.loadSource(dust.compile(benchDetails[name].dust, name));
}
handlebarsTemplates[name] = Handlebars.compile(benchDetails[name].handlebars);
if (eco && benchDetails[name].eco) {
+2 -1
View File
@@ -22,7 +22,8 @@
},
"devDependencies": {
"benchmark": "~1.0",
"dust": "~0.3",
"dustjs-linkedin": "~2.0.2",
"eco": "~1.1.0-rc-3",
"jison": "~0.3",
"mocha": "*",
"mustache": "~0.7.2",