mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Sky doesn't have this method (per spec). R=eseidel@chromium.org Review URL: https://codereview.chromium.org/879733002
95 lines
2.3 KiB
Plaintext
95 lines
2.3 KiB
Plaintext
<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.ensureShadowRoot();
|
|
};
|
|
|
|
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 new Text(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>
|