7af4c7ddbbebc3724dd00d089bfad84956898efc
[platform/core/ml/nnfw.git] / runtime / onert / core / src / util / EventRecorder.h
1 /*
2  * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __ONERT_UTIL_EVENT_RECORDER_H__
18 #define __ONERT_UTIL_EVENT_RECORDER_H__
19
20 #include <map>
21 #include <memory>
22 #include <mutex>
23
24 #include <vector>
25
26 struct Event
27 {
28   std::string name;
29   std::string tid;
30   std::string ph; /* REQUIRED */
31   std::string ts; /* REQUIRED */
32 };
33
34 struct DurationEvent : public Event
35 {
36   // TO BE FILLED
37 };
38
39 struct CounterEvent : public Event
40 {
41   std::map<std::string, std::string> values;
42 };
43
44 //
45 // Record Event as Chrome Trace Event File Format
46 //
47 // Refrence: https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit
48 //
49 class EventRecorder
50 {
51 public:
52   EventRecorder() = default;
53
54 public:
55   void emit(const DurationEvent &evt);
56   void emit(const CounterEvent &evt);
57
58 public:
59   bool empty() { return _duration_events.empty() && _counter_events.empty(); }
60   const std::vector<DurationEvent> &duration_events() const { return _duration_events; }
61   const std::vector<CounterEvent> &counter_events() const { return _counter_events; }
62
63 private:
64   std::mutex _mu;
65   std::vector<DurationEvent> _duration_events;
66   std::vector<CounterEvent> _counter_events;
67 };
68
69 #endif // __ONERT_UTIL_EVENT_RECORDER_H__