dfg_graphviz_draw_pass.h 2.1 KB
Newer Older
Y
Yan Chunwei 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/* Copyright (c) 2018 PaddlePaddle Authors. 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. */

/*
 * This file create an DFG_GraphvizDrawPass which helps to draw a data flow
 * graph's structure using graphviz.
 */

#pragma once

#include <fstream>
#include <string>
Y
Yan Chunwei 已提交
24
#include "paddle/fluid/inference/analysis/dot.h"
Y
Yan Chunwei 已提交
25 26 27 28 29 30 31 32 33 34 35
#include "paddle/fluid/inference/analysis/pass.h"

namespace paddle {
namespace inference {
namespace analysis {

/*
 * Output a dot file and write to some place.
 */
class DFG_GraphvizDrawPass : public DataFlowGraphPass {
 public:
Y
Yan Chunwei 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49
  struct Config {
    Config(const std::string &dir, const std::string &id,
           bool display_deleted_node = false)
        : dir(dir), id(id), display_deleted_node(display_deleted_node) {}

    // The directory to store the .dot or .png files.
    const std::string dir;
    // The identifier for this dot file.
    const std::string id;
    // Whether to display deleted nodes, default false.
    const bool display_deleted_node;
  };

  DFG_GraphvizDrawPass(const Config &config) : config_(config) {}
Y
Yan Chunwei 已提交
50

Y
Yan Chunwei 已提交
51 52
  bool Initialize(Argument *argument) override { return true; }
  void Run(DataFlowGraph *graph) override;
Y
Yan Chunwei 已提交
53 54
  bool Finalize() override { return Pass::Finalize(); }

Y
Yan Chunwei 已提交
55 56 57
  std::string repr() const override { return "DFG graphviz drawer"; }
  std::string description() const override {
    return "Debug a DFG by draw with graphviz";
Y
Yan Chunwei 已提交
58 59 60 61 62
  }

 private:
  // Path of the dot file to output.
  std::string GenDotPath() const {
Y
Yan Chunwei 已提交
63
    return config_.dir + "/" + "graph_" + config_.id + ".dot";
Y
Yan Chunwei 已提交
64 65
  }

Y
Yan Chunwei 已提交
66
  std::string Draw(DataFlowGraph *graph);
Y
Yan Chunwei 已提交
67

Y
Yan Chunwei 已提交
68
  Config config_;
Y
Yan Chunwei 已提交
69 70 71 72 73
};

}  // namespace analysis
}  // namespace inference
}  // namespace paddle