dfg_graphviz_draw_pass.h 2.3 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;
53
  bool Finalize() override { return true; }
Y
Yan Chunwei 已提交
54

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 63 64
 protected:
  // A counter to add a number prefix to the debugger image output so that they
  // will sort in the triggered order.
  static int counter_;

Y
Yan Chunwei 已提交
65 66
  // Path of the dot file to output.
  std::string GenDotPath() const {
67 68
    return config_.dir + "/" + std::to_string(counter_++) + "-graph_" +
           config_.id + ".dot";
Y
Yan Chunwei 已提交
69 70
  }

71
  virtual std::string Draw(DataFlowGraph *graph);
Y
Yan Chunwei 已提交
72

Y
Yan Chunwei 已提交
73
  Config config_;
Y
Yan Chunwei 已提交
74 75 76 77 78
};

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