Loading...
Searching...
No Matches
counterAccumulator.h
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_COUNTER_ACCUMULATOR_H
9#define PXR_BASE_TRACE_COUNTER_ACCUMULATOR_H
10
11#include "pxr/pxr.h"
12
13#include "pxr/base/trace/api.h"
14#include "pxr/base/trace/collection.h"
15
16#include "pxr/base/tf/token.h"
17
18#include <map>
19#include <unordered_map>
20#include <vector>
21
22PXR_NAMESPACE_OPEN_SCOPE
23
34public:
35 using CounterValues = std::vector<std::pair<TraceEvent::TimeStamp, double>>;
36 using CounterValuesMap =
37 std::unordered_map<TfToken, CounterValues, TfToken::HashFunctor>;
38 using CounterMap =
39 std::unordered_map<TfToken, double, TfToken::HashFunctor>;
40
43
45 const CounterValuesMap& GetCounters() const {
46 return _counterValuesOverTime;
47 }
48
50 TRACE_API void SetCurrentValues(const CounterMap&);
51
53 const CounterMap& GetCurrentValues() const {
54 return _currentValues;
55 }
56
59 TRACE_API void Update(const TraceCollection& collection);
60
61protected:
63 virtual bool _AcceptsCategory(TraceCategoryId id) = 0;
64
65private:
66 // TraceCollection::Visitor Interface
67 virtual void OnBeginCollection() override;
68 virtual void OnEndCollection() override;
69 virtual void OnBeginThread(const TraceThreadId&) override;
70 virtual void OnEndThread(const TraceThreadId&) override;
71 virtual bool AcceptsCategory(TraceCategoryId) override;
72 virtual void OnEvent(
73 const TraceThreadId&, const TfToken&, const TraceEvent&) override;
74
75 struct _CounterValue {
76 double value;
77 bool isDelta;
78 };
79
80 using _CounterDeltaValues =
81 std::multimap<TraceEvent::TimeStamp, _CounterValue>;
82 using _CounterDeltaMap = std::map<TfToken, _CounterDeltaValues>;
83
84 _CounterDeltaMap _counterDeltas;
85 CounterValuesMap _counterValuesOverTime;
86 CounterMap _currentValues;
87};
88
89PXR_NAMESPACE_CLOSE_SCOPE
90
91#endif //PXR_BASE_TRACE_COUNTER_ACCUMULATOR_H
uint32_t TraceCategoryId
Categories that a TraceReporter can use to filter events.
Definition: category.h:27
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
This interface provides a way to access data a TraceCollection.
Definition: collection.h:66
This class owns lists of TraceEvent instances per thread, and allows read access to them.
Definition: collection.h:32
This class accumulates counter values from TraceCollection instances.
TraceCounterAccumulator()=default
Constructor.
const CounterMap & GetCurrentValues() const
Returns the current value of the counters.
virtual bool _AcceptsCategory(TraceCategoryId id)=0
Determines whether or not counter events with id should be processed.
const CounterValuesMap & GetCounters() const
Returns a map of the counter values over time.
TRACE_API void SetCurrentValues(const CounterMap &)
Sets the current value of the counters.
TRACE_API void Update(const TraceCollection &collection)
Reads events /p collection and updates the current values of the counters.
This represents an event recorded by a TraceCollector.
Definition: event.h:30
This class represents an identifier for a thread.
Definition: threads.h:23
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...