performance: only color connected once

ProcessRenderer was coloring connected nodes because we need that info
for rendering details panels. However, the main process topology view
renderers depending on ProcessRenderer were also doing coloring
themselves. For the 'processes' topology that was literally
duplicating work. For the 'processes-by-name' topology that was
throwing away the process coloring, and then coloring at the name
level.

Solution: remove the coloring from the ProcessRenderer, thus
eliminating the duplicate/thrown-away work, and introduce a
ColorConnectedProcessRenderer which is only used in places that
populate details panels.
This commit is contained in:
Matthias Radestock
2017-06-22 10:28:39 +01:00
parent a7cfd043fc
commit d66b28de2a
3 changed files with 10 additions and 4 deletions

View File

@@ -34,7 +34,7 @@ var ContainerRenderer = MakeFilter(
MakeReduce(
MakeMap(
MapProcess2Container,
ProcessRenderer,
ColorConnectedProcessRenderer,
),
// This mapper brings in connections by joining with container

View File

@@ -13,7 +13,7 @@ var HostRenderer = MakeReduce(
),
MakeMap(
MapX2Host,
ProcessRenderer,
ColorConnectedProcessRenderer,
),
MakeMap(
MapX2Host,

View File

@@ -27,15 +27,21 @@ var EndpointRenderer = FilterProcspiedOrEBPF(SelectEndpoint)
// ProcessRenderer is a Renderer which produces a renderable process
// graph by merging the endpoint graph and the process topology.
var ProcessRenderer = ConditionalRenderer(renderProcesses,
ColorConnected(MakeReduce(
MakeReduce(
MakeMap(
MapEndpoint2Process,
EndpointRenderer,
),
SelectProcess,
)),
),
)
// ColorConnectedProcessRenderer colors connected nodes from
// ProcessRenderer. Since the process topology views only show
// connected processes, we need this info to determine whether
// processes appearing in a details panel are linkable.
var ColorConnectedProcessRenderer = ColorConnected(ProcessRenderer)
// processWithContainerNameRenderer is a Renderer which produces a process
// graph enriched with container names where appropriate
type processWithContainerNameRenderer struct {