We need access to this from the process info but can share the instance.
It sucks to walk the hashtable here, but the alternative is to make these
recursive so that we can check a parent mount namespace.
Until then, take the hit and iterate all the pids to populate them with
the additional device.
Related GNOME/gnome-builder#2090
If a new process is spawned after the recording has started (processes
spawned *by* sysprof are done before recording starts) then try to extract
information about that process and append it to the recording.
The goal here is to get enough process information to actually decode the
process without creating fork()/exec() amplification.
Related GNOME/gnome-builder#2090
This is more of what we want to be doing anyway, we don't care about all
the forks in existence.
Additionally, include the comm[] with the pid so that instruments can take
action based on it.
This is by no means perfect, but it gets the kernel tasks running on my
machine out of the profiles. We will no doubt need to add more in the
future, or find a way to record a flag for that in the capture format.
Unfortunately we don't have a good way to do this in GtkScrolledWindow
where you have an initial gravity pulling you to the bottom of a viewport.
We might be able to fake it with a focusable widget, but that sounds like
more work than just animating to the bottom of the viewport.
Related #93
If we get a request for a process that we have not captured any information
about then give it the "Unknown Process" symbol. That way we do not crash
and we also maintain our invariant of not mutating the hash table.
If we get an empty string, just normalize that to NULL so that we can be
more likely to match equality checks via hash comparison.
Additionally, break hashes out into two so that we can improve the
situation where some symbols do not have paths but still match. This
can happen with bundled symbols.
We only mutate this during loading of the document so that we can be
confident in multi-threaded workers after loading. This just asserts
that invariant holds true.
This is useful for when we are viewing things like flamegraphs which can
take advantage of options in the callgraph.
Also add some labels for the header bar buttons.
This makes the graphs interactive finally where you can select a node and
see the children of it directly. Click down the stack to return to a
larger view.
This helps with the situation where we are going to render the parents
of the selected root first, and want them to take the whole width. Next
step is to support invalidation of the rendering.
You can click on flamegraph items (and soon) we will update the graph to
show you that node. Set the hand cursor when doing that so the user knows
that is an option.