summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance/test/unit/test_tree-model-10.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/performance/test/unit/test_tree-model-10.js')
-rw-r--r--devtools/client/performance/test/unit/test_tree-model-10.js153
1 files changed, 153 insertions, 0 deletions
diff --git a/devtools/client/performance/test/unit/test_tree-model-10.js b/devtools/client/performance/test/unit/test_tree-model-10.js
new file mode 100644
index 000000000..9553c7052
--- /dev/null
+++ b/devtools/client/performance/test/unit/test_tree-model-10.js
@@ -0,0 +1,153 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+/**
+ * Tests that the tree model calculates correct costs/percentages for
+ * frame nodes. The model-only version of browser_profiler-tree-view-10.js
+ */
+
+function run_test() {
+ run_next_test();
+}
+
+add_task(function () {
+ let { ThreadNode } = require("devtools/client/performance/modules/logic/tree-model");
+ let thread = new ThreadNode(gThread, { invertTree: true, startTime: 0, endTime: 50 });
+
+ /**
+ * Samples
+ *
+ * A->C
+ * A->B
+ * A->B->C x4
+ * A->B->D x4
+ *
+ * Expected Tree
+ * +--total--+--self--+--tree-------------+
+ * | 50% | 50% | C
+ * | 40% | 0 | -> B
+ * | 30% | 0 | -> A
+ * | 10% | 0 | -> A
+ *
+ * | 40% | 40% | D
+ * | 40% | 0 | -> B
+ * | 40% | 0 | -> A
+ *
+ * | 10% | 10% | B
+ * | 10% | 0 | -> A
+ */
+
+ [
+ // total, self, name
+ [ 50, 50, "C", [
+ [ 40, 0, "B", [
+ [ 30, 0, "A"]
+ ]],
+ [ 10, 0, "A"]
+ ]],
+ [ 40, 40, "D", [
+ [ 40, 0, "B", [
+ [ 40, 0, "A"],
+ ]]
+ ]],
+ [ 10, 10, "B", [
+ [ 10, 0, "A"],
+ ]]
+ ].forEach(compareFrameInfo(thread));
+});
+
+function compareFrameInfo(root, parent) {
+ parent = parent || root;
+ return function (def) {
+ let [total, self, name, children] = def;
+ let node = getFrameNodePath(parent, name);
+ let data = node.getInfo({ root });
+ equal(total, data.totalPercentage,
+ `${name} has correct total percentage: ${data.totalPercentage}`);
+ equal(self, data.selfPercentage,
+ `${name} has correct self percentage: ${data.selfPercentage}`);
+ if (children) {
+ children.forEach(compareFrameInfo(root, node));
+ }
+ };
+}
+
+var gThread = synthesizeProfileForTest([{
+ time: 5,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "C" }
+ ]
+}, {
+ time: 10,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "D" }
+ ]
+}, {
+ time: 15,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "C" },
+ ]
+}, {
+ time: 20,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ ]
+}, {
+ time: 25,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "C" }
+ ]
+}, {
+ time: 30,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "C" }
+ ]
+}, {
+ time: 35,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "D" }
+ ]
+}, {
+ time: 40,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "D" }
+ ]
+}, {
+ time: 45,
+ frames: [
+ { location: "(root)" },
+ { location: "B" },
+ { location: "C" }
+ ]
+}, {
+ time: 50,
+ frames: [
+ { location: "(root)" },
+ { location: "A" },
+ { location: "B" },
+ { location: "D" }
+ ]
+}]);