dag_node.h 1.25 KB
Newer Older
1 2 3
#ifndef PLS_INTERNAL_PROFILING_DAG_NODE_H_
#define PLS_INTERNAL_PROFILING_DAG_NODE_H_

4 5
#include "pls/internal/base/system_details.h"

6 7
#include <memory>
#include <list>
8
#include <iostream>
FritzFlorian committed
9
#include <chrono>
10 11 12 13

namespace pls::internal::profiling {

struct dag_node {
FritzFlorian committed
14 15 16 17 18 19 20 21
  using clock = std::chrono::steady_clock;
  using measurement_resolution = std::chrono::nanoseconds;
  using display_resolution = std::chrono::microseconds;
  static unsigned long m_to_d(unsigned long duration) {
    measurement_resolution measurement_duration{duration};
    return std::chrono::duration_cast<display_resolution>(measurement_duration).count();
  }

22 23 24 25 26 27 28 29 30
  dag_node(unsigned spawning_thread_id) : spawning_thread_id_{spawning_thread_id} {};

  unsigned spawning_thread_id_;
  unsigned long max_memory_{0};
  unsigned long total_runtime_{0};

  std::unique_ptr<dag_node> next_node_;
  std::list<dag_node> child_nodes_;

31 32 33 34
  base::system_details::pointer_t node_print_id() {
    return reinterpret_cast<base::system_details::pointer_t >(this);
  }

35 36 37 38 39
  void dag_compact();
  void dag_print(std::ostream &stream, unsigned rank);
  unsigned dag_max_memory();
  unsigned long dag_total_user_time();
  unsigned long dag_critical_path();
FritzFlorian committed
40
  unsigned long dag_depth();
41 42 43 44 45
};

}

#endif //PLS_INTERNAL_PROFILING_DAG_NODE_H_