Add a microbenchmark for simple block layout

R=eseidel@chromium.org, ojan@chromium.org

Review URL: https://codereview.chromium.org/701813004
This commit is contained in:
Adam Barth 2014-11-04 13:35:03 -08:00
parent fb8f678d27
commit cbd29450ff
2 changed files with 51 additions and 0 deletions

View File

@ -0,0 +1,44 @@
<sky>
<import src="../resources/runner.sky" as="PerfRunner" />
<style>
div {
height: 10px;
}
span {
display: inline;
}
</style>
<div id='content'></div>
<script>
var content = document.getElementById('content');
var out = [];
for (var i = 0; i < 1000; i++) {
var div = document.createElement('div');
div.appendChild(document.createElement('span')).appendChild(document.createTextNode('foo'));
div.appendChild(document.createTextNode(' '));
div.appendChild(document.createElement('span')).appendChild(document.createTextNode('bar'));
content.appendChild(div);
}
var b = document.querySelector('sky');
var runner = new PerfRunner({
setup: function() {
b.style.width = '210px';
getComputedStyle(b).color;
b.offsetHeight;
b.style.width = '200px';
getComputedStyle(b).color;
},
iterations: 10,
unit: 'ms',
});
runner.runAsync(function(done) {
b.offsetHeight;
done();
});
</script>
</sky>

View File

@ -3,6 +3,7 @@ function PerfRunner(options) {
this.unit_ = options.unit || "ms";
this.iterationsRemaining_ = options.iterations || 10;
this.results_ = [];
this.setup_ = options.setup;
}
PerfRunner.prototype.log = function(line) {
@ -17,9 +18,15 @@ PerfRunner.prototype.recordResult = function(result) {
PerfRunner.prototype.runAsync = function(test) {
var self = this;
window.setTimeout(function() {
if (self.setup_) {
var setup = self.setup_;
setup();
}
var startTime = Date.now();
test(function() {
var endTime = Date.now();
self.recordResult(endTime - startTime);
if (--self.iterationsRemaining_ > 0)
self.runAsync(test);