| <sky> |
| <import src="../resources/runner.sky" as="PerfRunner" /> |
| <script> |
| var sky = document.querySelector("sky"); |
| |
| var widgets = 0; |
| var basicElements = 0; |
| var texts = 0; |
| |
| var WidgetPrototype = Object.create(HTMLElement.prototype); |
| WidgetPrototype.createdCallback = function() { |
| widgets++; |
| this.wasCreated = true; |
| this.wasAttached = false; |
| this.wasDetached = false; |
| this.attrsChanged = []; |
| this.createShadowRoot(); |
| }; |
| |
| WidgetPrototype.attachedCallback = function() { |
| this.wasAttached = true; |
| }; |
| |
| WidgetPrototype.detachedCallback = function() { |
| this.wasDetached = true; |
| }; |
| |
| WidgetPrototype.attributeChangedCallback = function(name, oldValue, newValue) { |
| this.attrsChanged.push({ |
| name: name, |
| oldValue: oldValue, |
| newValue: newValue, |
| }); |
| }; |
| |
| var Widget = document.registerElement("x-widget", { |
| prototype: WidgetPrototype, |
| }); |
| |
| function createElement(tagName) { |
| basicElements++; |
| return document.createElement(tagName); |
| } |
| |
| function createText(text) { |
| texts++; |
| return document.createTextNode(text); |
| } |
| |
| function createElements(root, depth) { |
| for (var i = 0; i < 4; i++) { |
| var div = createElement("div"); |
| var span1 = div.appendChild(createElement("span")); |
| span1.appendChild(createText("foo")); |
| span1.setAttribute("id", "span" + (i * depth)); |
| div.appendChild(createText(" ")); |
| div.setAttribute("class", "b" + i + " a" + i); |
| var span2 = div.appendChild(createElement("span")); |
| span2.appendChild(createText("bar")); |
| var widget = span2.appendChild(new Widget()); |
| widget.setAttribute("id", "widget-" + (i * depth)); |
| widget.setAttribute("custom", "example attribute"); |
| widget.setAttribute("custom2", "example attribute2"); |
| root.appendChild(div); |
| if (depth) |
| createElements(widget.shadowRoot, depth - 1); |
| } |
| } |
| |
| var runner = new PerfRunner({ |
| setup: function() { |
| widgets = 0; |
| basicElements = 0; |
| texts = 0; |
| }, |
| iterations: 10, |
| unit: "ms", |
| }); |
| |
| runner.runAsync(function(done) { |
| var root = createElement("div"); |
| sky.appendChild(root); |
| createElements(root, 3); |
| root.remove(); |
| // console.log("widgets: " + widgets); |
| // console.log("basic elements: " + basicElements); |
| // console.log("texts: " + texts); |
| // CONSOLE: LOG: widgets: 340 |
| // CONSOLE: LOG: basic elements: 1021 |
| // CONSOLE: LOG: texts: 1020 |
| done(); |
| }); |
| </script> |
| </sky> |