HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eventTree.h
Go to the documentation of this file.
1 //
2 // Copyright 2018 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 
8 #ifndef PXR_BASE_TRACE_EVENT_TREE_H
9 #define PXR_BASE_TRACE_EVENT_TREE_H
10 
11 #include "pxr/pxr.h"
12 
13 #include "pxr/base/trace/api.h"
14 #include "pxr/base/trace/event.h"
16 #include "pxr/base/trace/threads.h"
17 #include "pxr/base/tf/refBase.h"
18 #include "pxr/base/tf/refPtr.h"
19 #include "pxr/base/tf/token.h"
20 #include "pxr/base/tf/weakBase.h"
21 #include "pxr/base/tf/weakPtr.h"
23 
24 #include <functional>
25 #include <vector>
26 #include <unordered_map>
27 
29 
30 class TraceCollection;
31 class JsWriter;
33 
34 ////////////////////////////////////////////////////////////////////////////////
35 /// \class TraceEventTree
36 ///
37 /// This class contains a timeline call tree and a map of counters to their
38 /// values over time.
39 ///
40 ///
41 class TraceEventTree : public TfRefBase, public TfWeakBase {
42 public:
43  using CounterValues = std::vector<std::pair<TraceEvent::TimeStamp, double>>;
44  using CounterValuesMap =
45  std::unordered_map<TfToken, CounterValues, TfToken::HashFunctor>;
46  using CounterMap =
47  std::unordered_map<TfToken, double, TfToken::HashFunctor>;
48 
49  using MarkerValues = std::vector<std::pair<TraceEvent::TimeStamp, TraceThreadId>>;
50  using MarkerValuesMap =
51  std::unordered_map<TfToken, MarkerValues, TfToken::HashFunctor>;
52 
53  /// Creates a new TraceEventTree instance from the data in \p collection
54  /// and \p initialCounterValues.
55  TRACE_API static TraceEventTreeRefPtr New(
56  const TraceCollection& collection,
57  const CounterMap* initialCounterValues = nullptr);
58 
59  static TraceEventTreeRefPtr New() {
60  return TfCreateRefPtr(
62  }
63 
64  static TraceEventTreeRefPtr New(
65  TraceEventNodeRefPtr root,
66  CounterValuesMap counters,
67  MarkerValuesMap markers) {
68  return TfCreateRefPtr(
69  new TraceEventTree(root, std::move(counters), std::move(markers)));
70  }
71 
72  /// Returns the root node of the tree.
73  const TraceEventNodeRefPtr& GetRoot() const { return _root; }
74 
75  /// Returns the map of counter values.
76  const CounterValuesMap& GetCounters() const { return _counters; }
77 
78  /// Returns the map of markers values.
79  const MarkerValuesMap& GetMarkers() const { return _markers; }
80 
81  /// Return the final value of the counters in the report.
83 
84  /// Writes a JSON object representing the data in the call tree that
85  /// conforms to the Chrome Trace format.
86  using ExtraFieldFn = std::function<void(JsWriter&)>;
88  JsWriter& writer, ExtraFieldFn extraFields = ExtraFieldFn()) const;
89 
90  /// Adds the contexts of \p tree to this tree.
91  TRACE_API void Merge(const TraceEventTreeRefPtr& tree);
92 
93  /// Adds the data from \p collection to this tree.
94  TRACE_API TraceEventTreeRefPtr Add(const TraceCollection& collection);
95 
96 private:
97  TraceEventTree(TraceEventNodeRefPtr root)
98  : _root(root) {}
99 
100  TraceEventTree( TraceEventNodeRefPtr root,
101  CounterValuesMap counters,
102  MarkerValuesMap markers)
103  : _root(root)
104  , _counters(std::move(counters))
105  , _markers(std::move(markers)) {}
106 
107  // Root of the call tree.
108  TraceEventNodeRefPtr _root;
109  // Counter data of the trace.
110  CounterValuesMap _counters;
111  // Marker data of the trace.
112  MarkerValuesMap _markers;
113 };
114 
116 
117 #endif // PXR_BASE_TRACE_EVENT_TREE_H
TfRefPtr< T > TfCreateRefPtr(T *ptr)
Definition: refPtr.h:1190
TRACE_API TraceEventTreeRefPtr Add(const TraceCollection &collection)
Adds the data from collection to this tree.
std::unordered_map< TfToken, CounterValues, TfToken::HashFunctor > CounterValuesMap
Definition: eventTree.h:45
const MarkerValuesMap & GetMarkers() const
Returns the map of markers values.
Definition: eventTree.h:79
std::unordered_map< TfToken, double, TfToken::HashFunctor > CounterMap
Definition: eventTree.h:47
static TraceEventTreeRefPtr New()
Definition: eventTree.h:59
std::function< void(JsWriter &)> ExtraFieldFn
Definition: eventTree.h:86
CounterMap GetFinalCounterValues() const
Return the final value of the counters in the report.
std::unordered_map< TfToken, MarkerValues, TfToken::HashFunctor > MarkerValuesMap
Definition: eventTree.h:51
const TraceEventNodeRefPtr & GetRoot() const
Returns the root node of the tree.
Definition: eventTree.h:73
static TraceEventNodeRefPtr New()
Definition: eventNode.h:45
TRACE_API void Merge(const TraceEventTreeRefPtr &tree)
Adds the contexts of tree to this tree.
TRACE_API void WriteChromeTraceObject(JsWriter &writer, ExtraFieldFn extraFields=ExtraFieldFn()) const
const CounterValuesMap & GetCounters() const
Returns the map of counter values.
Definition: eventTree.h:76
static TraceEventTreeRefPtr New(TraceEventNodeRefPtr root, CounterValuesMap counters, MarkerValuesMap markers)
Definition: eventTree.h:64
std::vector< std::pair< TraceEvent::TimeStamp, TraceThreadId >> MarkerValues
Definition: eventTree.h:49
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
Definition: json.h:59
std::vector< std::pair< TraceEvent::TimeStamp, double >> CounterValues
Definition: eventTree.h:43
TF_DECLARE_WEAK_AND_REF_PTRS(TraceEventTree)
#define TRACE_API
Definition: api.h:23