| <!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> |