From d66b28de2a55a74e350a947cdd38c9c2725991f0 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Thu, 22 Jun 2017 10:28:39 +0100 Subject: [PATCH] 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. --- render/container.go | 2 +- render/host.go | 2 +- render/process.go | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/render/container.go b/render/container.go index 247a99f81..dbec44a0d 100644 --- a/render/container.go +++ b/render/container.go @@ -34,7 +34,7 @@ var ContainerRenderer = MakeFilter( MakeReduce( MakeMap( MapProcess2Container, - ProcessRenderer, + ColorConnectedProcessRenderer, ), // This mapper brings in connections by joining with container diff --git a/render/host.go b/render/host.go index f56c28035..c7e7281bb 100644 --- a/render/host.go +++ b/render/host.go @@ -13,7 +13,7 @@ var HostRenderer = MakeReduce( ), MakeMap( MapX2Host, - ProcessRenderer, + ColorConnectedProcessRenderer, ), MakeMap( MapX2Host, diff --git a/render/process.go b/render/process.go index 6f2340415..1f19c8c60 100644 --- a/render/process.go +++ b/render/process.go @@ -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 {