Skip to content

Commit 8c01911

Browse files
author
Jaroslaw Odzga
committed
Display hierarchy in waterfall diagram.
1 parent a95c8de commit 8c01911

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

tools/tracevis/css/waterfall.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
.waterfallview .trace rect.success { fill: #60D060; }
55
.waterfallview .trace rect.error { fill: #FF6F6F; }
66
.waterfallview .trace rect.early_finish { fill: #FFFD76; }
7+
.waterfallview .trace circle { fill: #FFFFFF; }
78

89
.waterfallview .trace text,
910
.waterfallview .trace text tspan {

tools/tracevis/js/trace.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,26 @@ TRACE = (function() {
321321
}
322322

323323
return flat;
324-
}
324+
};
325+
326+
function identifyLowestChild(flat) {
327+
for (var i = 0; i < flat.length; i++) {
328+
flat[i].level = i;
329+
if (flat[i].lowestChild) {
330+
delete flat[i].lowestChild;
331+
}
332+
}
325333

334+
for (var i = 0; i < flat.length; i++) {
335+
if (flat[i].parent) {
336+
var parent = flat[i].parent;
337+
if (!parent.lowestChild || parent.lowestChild < i) {
338+
parent.lowestChild = i;
339+
}
340+
}
341+
}
342+
return flat;
343+
}
326344

327345
function appendPath(root) {
328346
//build graph
@@ -407,6 +425,7 @@ TRACE = (function() {
407425

408426
parseJson : parseJson,
409427
flatten: flatten,
428+
identifyLowestChild: identifyLowestChild,
410429
appendPath : appendPath,
411430
alignMillis: alignMillis
412431
};

tools/tracevis/js/waterfall.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ var WATERFALL = (function() {
7676
update(root, 0);
7777

7878
function update(source, duration) {
79-
var traces = TRACE.flatten(root);
79+
var traces = TRACE.identifyLowestChild(TRACE.flatten(root));
8080

8181
var x = d3.scale.linear()
8282
.___domain([0, d3.max(traces, function(d) { return d.startMillis + d.totalMillis; })])
@@ -131,6 +131,51 @@ var WATERFALL = (function() {
131131
.on("click", toggleCollapse);
132132

133133
trace.classed("collapsed", function(d) { return d._children; });
134+
135+
var verticalEnter = traceEnter.filter( function(d) { return d.children || d._children;; } )
136+
verticalEnter.append("line")
137+
.classed("vertical", true)
138+
.attr("x1", -3)
139+
.attr("y1", 4)
140+
.attr("x2", -3)
141+
.attr("y2", function (d) {
142+
if (d.lowestChild)
143+
return (d.lowestChild - d.level) * (barHeight + barSpacing);
144+
else
145+
4;
146+
} )
147+
.style("stroke", "black")
148+
.style("stroke-width", 1)
149+
.style("stroke-linecap", "round")
150+
.style("stroke-dasharray", 3);
151+
152+
var vertical = trace.select("line.vertical");
153+
154+
vertical.attr("y2", function (d) {
155+
if (d.lowestChild)
156+
return (d.lowestChild - d.level) * (barHeight + barSpacing)
157+
else
158+
this.y2;
159+
} );
160+
161+
var noRootEnter = traceEnter.filter( function (d, i) { return i != 0 })
162+
noRootEnter.append("line")
163+
.attr("x1", -4)
164+
.attr("y1", 0)
165+
.attr("x2", function (d) {
166+
return -4 - d.x + d.parent.x;
167+
} )
168+
.attr("y2", 0)
169+
.style("stroke", "black")
170+
.style("stroke-width", 1)
171+
.style("stroke-linecap", "round")
172+
.style("stroke-dasharray", 3);
173+
174+
traceEnter.append("circle")
175+
.attr("r", 4)
176+
.attr("cx", -3)
177+
.style("stroke", "black")
178+
.style("stroke-width", 1);
134179

135180
// Enter any new traces at the parent's previous position.
136181
traceEnter.append("rect")

0 commit comments

Comments
 (0)