212 edm::LogError(
"DependencyGraph") <<
"You have requested an instance of the DependencyGraph Service in the \""
213 << context.processName()
214 <<
"\" SubProcess, which is not supported.\nPlease move it to the main process.";
218 if (not context.isSubProcess()) {
220 boost::get_property(
m_graph, boost::graph_name) = context.processName();
221 boost::get_property(
m_graph, boost::graph_graph_attribute)[
"label"] =
"process " + context.processName();
222 boost::get_property(
m_graph, boost::graph_graph_attribute)[
"labelloc"] =
"top";
225 auto size = pathsAndConsumes.largestModuleID() - boost::num_vertices(
m_graph) + 1;
226 for (
size_t i = 0;
i <
size; ++
i)
232 auto &graph =
m_graph.create_subgraph();
235 boost::get_property(graph, boost::graph_name) =
"cluster" + context.processName();
236 boost::get_property(graph, boost::graph_graph_attribute)[
"label"] =
"subprocess " + context.processName();
237 boost::get_property(graph, boost::graph_graph_attribute)[
"labelloc"] =
"top";
240 auto size = pathsAndConsumes.largestModuleID() - boost::num_vertices(
m_graph) + 1;
241 for (
size_t i = 0;
i <
size; ++
i)
242 boost::add_vertex(graph);
247 m_graph.m_graph[module->id()] = {
248 module->moduleLabel(), module->moduleName(), module->id(),
edmModuleTypeEnum(*module),
false};
251 attributes[
"label"] = module->moduleLabel();
252 attributes[
"tooltip"] = module->moduleName();
254 attributes[
"style"] =
"filled";
255 attributes[
"color"] =
"black";
256 attributes[
"fillcolor"] =
highlighted(module->moduleLabel()) ?
"green" :
"lightgrey";
260 auto const &
paths = pathsAndConsumes.paths();
261 auto const &endps = pathsAndConsumes.endPaths();
266 edm::LogInfo(
"DependencyGraph") <<
"module " <<
consumer->moduleLabel() <<
" depends on module "
267 << module->moduleLabel();
268 auto edge_status = boost::add_edge(
consumer->id(), module->id(),
m_graph);
271 auto const &edge = edge_status.first;
273 attributes[
"color"] =
"darkgreen";
280 for (
unsigned int i = 0;
i <
paths.size(); ++
i) {
283 m_graph.m_graph[module->id()].scheduled =
true;
285 attributes[
"fillcolor"] =
highlighted(module->moduleLabel()) ?
"lightgreen" :
"white";
287 edm::LogInfo(
"DependencyGraph") <<
"module " << module->moduleLabel() <<
" follows module "
288 <<
previous->moduleLabel() <<
" in Path " <<
i;
289 auto edge_status = boost::lookup_edge(module->id(),
previous->id(),
m_graph);
290 bool found = edge_status.second;
293 auto const &edge = edge_status.first;
295 edgeAttributes[
"style"] =
"dashed";
298 edgeAttributes[
"color"] =
"darkgreen";
304 for (
unsigned int i = 0;
i < endps.size(); ++
i) {
307 m_graph.m_graph[module->id()].scheduled =
true;
309 attributes[
"fillcolor"] =
highlighted(module->moduleLabel()) ?
"lightgreen" :
"white";
311 edm::LogInfo(
"DependencyGraph") <<
"module " << module->moduleLabel() <<
" follows module "
312 <<
previous->moduleLabel() <<
" in EndPath " <<
i;
313 auto edge_status = boost::lookup_edge(module->id(),
previous->id(),
m_graph);
314 bool found = edge_status.second;
317 auto const &edge = edge_status.first;
319 edgeAttributes[
"style"] =
"dashed";
322 edgeAttributes[
"color"] =
"darkgreen";