summaryrefslogtreecommitdiff
path: root/runtime/onert/core/src/dumper/dot/DotBuilder.cc
blob: 2a3a4af2241d6e227a5ad2ec3da364e9e6a9ae0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
 * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "DotBuilder.h"

namespace onert
{
namespace dumper
{
namespace dot
{

// DotDumper
DotBuilder::DotBuilder() {}

void DotBuilder::update(const Node &node_info)
{
  add(node_info);
  for (auto edge : node_info.edges())
  {
    addEdge(node_info, *edge);
  }
}

void DotBuilder::addOpSequence(const DotOpSequenceInfo &op_sequence_info)
{
  _dot << "op_sequence cluster_" << op_sequence_info.index().value() << " {\n";
  _dot << "  label=\"" << op_sequence_info.label() << "\";\n";
  _dot << "  style=filled;\n";
  _dot << "  color=lightgrey;\n";
  _dot << "  ";
  for (auto op : op_sequence_info.operations())
  {
    _dot << "operation" << op.value() << "; ";
  }
  for (auto op : op_sequence_info.operands())
  {
    _dot << "operand" << op.value() << "; ";
  }
  _dot << "\n";
  _dot << "}\n";
}

void DotBuilder::writeDot(std::ostream &os)
{
  os << "digraph D {\n"
     << _dot.str() << "\n"
     << "}\n";
}

void DotBuilder::add(const Node &node)
{
  _dot << node.id();
  std::stringstream ss;
  _dot << "[";
  for (auto attr : node.attributes())
  {
    _dot << attr.first << "=\"" << attr.second << "\" ";
  }
  _dot << "];\n";
}

void DotBuilder::addEdge(const Node &node1, const Node &node2)
{
  _dot << node1.id() << " -> " << node2.id() << ";\n";
}

} // namespace dot
} // namespace dumper
} // namespace onert