177 lines
5.9 KiB
HTML
177 lines
5.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<!--
|
|
Copyright 2008 The Closure Library Authors. All Rights Reserved.
|
|
|
|
Use of this source code is governed by the Apache License, Version 2.0.
|
|
See the COPYING file for details.
|
|
-->
|
|
<!--
|
|
Author: attila@google.com (Attila Bodis)
|
|
-->
|
|
<head>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<title>Closure Performance Tests - goog.ui.Button</title>
|
|
<link rel="stylesheet" type="text/css" href="../testing/performancetable.css" />
|
|
<script src="../base.js"></script>
|
|
<script>
|
|
goog.require('goog.dom');
|
|
goog.require('goog.events');
|
|
goog.require('goog.events.EventHandler');
|
|
goog.require('goog.events.EventType');
|
|
goog.require('goog.testing.PerformanceTable');
|
|
goog.require('goog.testing.jsunit');
|
|
goog.require('goog.ui.Button');
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<h1>goog.ui.Button Performance Tests</h1>
|
|
<p>
|
|
<b>User-agent:</b> <script>document.write(navigator.userAgent);</script>
|
|
</p>
|
|
<div id="perfTable"></div>
|
|
<hr>
|
|
<div id="renderSandbox"></div>
|
|
<div id="decorateSandbox"></div>
|
|
<script>
|
|
// The sandboxen.
|
|
var renderSandbox = goog.dom.getElement('renderSandbox');
|
|
var decorateSandbox = goog.dom.getElement('decorateSandbox');
|
|
|
|
// Arrays of rendered/decorated buttons (so we can dispose of them).
|
|
var renderedButtons;
|
|
var decoratedButtons;
|
|
|
|
// 0-based index of the button currently being rendered/decorated.
|
|
var renderIndex;
|
|
var decorateIndex;
|
|
|
|
// Element currently being decorated.
|
|
var elementToDecorate;
|
|
|
|
// Number of buttons to create/decorate per test run.
|
|
var SAMPLES_PER_RUN = 200;
|
|
|
|
// The performance table.
|
|
var table;
|
|
|
|
function setUpPage() {
|
|
table = new goog.testing.PerformanceTable(
|
|
goog.dom.getElement('perfTable'));
|
|
}
|
|
|
|
// Sets up a render test.
|
|
function setUpRenderTest() {
|
|
renderedButtons = [];
|
|
renderIndex = 0;
|
|
}
|
|
|
|
// Cleans up after a render test.
|
|
function cleanUpAfterRenderTest() {
|
|
for (var i = 0, count = renderedButtons.length; i < count; i++) {
|
|
renderedButtons[i].dispose();
|
|
}
|
|
renderedButtons = null;
|
|
goog.dom.removeChildren(renderSandbox);
|
|
}
|
|
|
|
// Sets up a decorate test.
|
|
function setUpDecorateTest(opt_count) {
|
|
var count = opt_count || 1000;
|
|
for (var i = 0; i < count; i++) {
|
|
decorateSandbox.appendChild(goog.dom.createDom('button', 'goog-button',
|
|
'W00t!'));
|
|
}
|
|
elementToDecorate = decorateSandbox.firstChild;
|
|
decoratedButtons = [];
|
|
decorateIndex = 0;
|
|
}
|
|
|
|
// Cleans up after a decorate test.
|
|
function cleanUpAfterDecorateTest() {
|
|
for (var i = 0, count = decoratedButtons.length; i < count; i++) {
|
|
decoratedButtons[i].dispose();
|
|
}
|
|
decoratedButtons = null;
|
|
goog.dom.removeChildren(decorateSandbox);
|
|
}
|
|
|
|
// Renders the given number of buttons. Since children are appended to
|
|
// the same parent element in each performance test run, we keep track of
|
|
// the current index via the global renderIndex variable.
|
|
function renderButtons(count, autoDetectBiDi) {
|
|
for (var i = 0; i < count; i++) {
|
|
var button = new goog.ui.Button('W00t!');
|
|
if (!autoDetectBiDi) {
|
|
button.setRightToLeft(false);
|
|
}
|
|
button.render(renderSandbox);
|
|
renderedButtons[renderIndex++] = button;
|
|
}
|
|
}
|
|
|
|
// Decorates "count" buttons. The decorate sandbox contains enough child
|
|
// elements for the whole test, but we only decorate up to "count" elements
|
|
// per test run, so we need to keep track of where we are via the global
|
|
// decorateIndex and elementToDecorate variables.
|
|
function decorateButtons(count, autoDetectBiDi) {
|
|
for (var i = 0; i < count; i++) {
|
|
var next = elementToDecorate.nextSibling;
|
|
var button = new goog.ui.Button();
|
|
if (!autoDetectBiDi) {
|
|
button.setRightToLeft(false);
|
|
}
|
|
button.decorate(elementToDecorate);
|
|
decoratedButtons[decorateIndex++] = button;
|
|
elementToDecorate = next;
|
|
}
|
|
}
|
|
|
|
function testRender() {
|
|
setUpRenderTest();
|
|
table.run(
|
|
goog.partial(renderButtons, SAMPLES_PER_RUN, true),
|
|
'Render ' + SAMPLES_PER_RUN + ' buttons (default)');
|
|
cleanUpAfterRenderTest();
|
|
assertEquals('The expected number of buttons must have been rendered',
|
|
SAMPLES_PER_RUN * table.getTimer().getNumSamples(), renderIndex);
|
|
}
|
|
|
|
function testDecorate() {
|
|
setUpDecorateTest(SAMPLES_PER_RUN * table.getTimer().getNumSamples());
|
|
table.run(
|
|
goog.partial(decorateButtons, SAMPLES_PER_RUN, true),
|
|
'Decorate ' + SAMPLES_PER_RUN + ' buttons (default)');
|
|
cleanUpAfterDecorateTest();
|
|
assertEquals('The expected number of buttons must have been decorated',
|
|
SAMPLES_PER_RUN * table.getTimer().getNumSamples(),
|
|
decorateIndex);
|
|
assertNull('All buttons must have been decorated', elementToDecorate);
|
|
}
|
|
|
|
function testRenderNoBiDiAutoDetect() {
|
|
setUpRenderTest();
|
|
table.run(
|
|
goog.partial(renderButtons, SAMPLES_PER_RUN, false),
|
|
'Render ' + SAMPLES_PER_RUN + ' buttons (no BiDi auto-detect)');
|
|
cleanUpAfterRenderTest();
|
|
assertEquals('The expected number of buttons must have been rendered',
|
|
SAMPLES_PER_RUN * table.getTimer().getNumSamples(),
|
|
renderIndex);
|
|
}
|
|
|
|
function testDecorateNoBiDiAutoDetect() {
|
|
setUpDecorateTest(SAMPLES_PER_RUN * table.getTimer().getNumSamples());
|
|
table.run(
|
|
goog.partial(decorateButtons, SAMPLES_PER_RUN, false),
|
|
'Decorate ' + SAMPLES_PER_RUN + ' buttons (no BiDi auto-detect)');
|
|
cleanUpAfterDecorateTest();
|
|
assertEquals('The expected number of buttons must have been decorated',
|
|
SAMPLES_PER_RUN * table.getTimer().getNumSamples(),
|
|
decorateIndex);
|
|
assertNull('All buttons must have been decorated', elementToDecorate);
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|