-
Notifications
You must be signed in to change notification settings - Fork 145
Description
If we want other projects, like @koute's nperf, to start using inferno to draw their flame graphs (and perhaps even to do the collapsing), we need to provide an external interface that isn't just a purely line-based textual one like the ones used internally between perf script, stackcollapse-perf, and flamegraph.pl. Specifically, we'll want an interface that is typed, and where all (most?) of the parsing is done by the caller. I'm imagining something like:
mod flamegraph {
struct StackCount<S> {
stack: S,
count: usize,
}
fn from_samples<I, S, W>(o: Opts, samples: I, writer: W) ->
where
I: IntoIterator,
I::Item: Into<StackCount<S>>,
S: Iterator<Item = &str>,
W: Write
{
}
}from_samples would require that the input is given in sorted order (see #28), and then write a flame graph output to writer. The existing code that does parsing would call from_samples with an iterator created from the lines iterator, mapped something like this:
lines.map(|line| {
let (stack, nsamples) = ...;
StackCount {
count: nsamples,
stack: stack.split(';'),
}
})@koute: what do you think of an interface roughly like the above? You think that's an iterator that nperf could easily produce? What would be a good interface for collapse (if that's even something you might consider using)?