• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H
17 #define BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H
18 
19 #include <cstdarg>
20 #include <cstddef>
21 #include <cstdint>
22 #include <sstream>
23 #include <string>
24 
25 namespace OHOS {
26 namespace HiviewDFX {
27 namespace EventRaw {
28 constexpr unsigned int MAX_DOMAIN_LENGTH = 16;
29 constexpr unsigned int MAX_EVENT_NAME_LENGTH = 32;
30 constexpr unsigned int MAX_ARRAY_SIZE = 100;
31 
32 constexpr char BASE_INFO_KEY_DOMAIN[] = "domain_";
33 constexpr char BASE_INFO_KEY_NAME[] = "name_";
34 constexpr char BASE_INFO_KEY_TYPE[] = "type_";
35 constexpr char BASE_INFO_KEY_TIME_STAMP[] = "time_";
36 constexpr char BASE_INFO_KEY_TIME_ZONE[] = "tz_";
37 constexpr char BASE_INFO_KEY_ID[] = "id_";
38 constexpr char BASE_INFO_KEY_PID[] = "pid_";
39 constexpr char BASE_INFO_KEY_TID[] = "tid_";
40 constexpr char BASE_INFO_KEY_UID[] = "uid_";
41 constexpr char BASE_INFO_KEY_TRACE_ID[] = "traceid_";
42 constexpr char BASE_INFO_KEY_SPAN_ID[] = "spanid_";
43 constexpr char BASE_INFO_KEY_PARENT_SPAN_ID[] = "pspanid_";
44 constexpr char BASE_INFO_KEY_TRACE_FLAG[] = "trace_flag_";
45 
46 template<typename T>
47 inline static constexpr bool isUnsignedNum = std::is_same_v<std::decay_t<T>, std::uint8_t> ||
48     std::is_same_v<std::decay_t<T>, std::uint16_t> || std::is_same_v<std::decay_t<T>, std::uint32_t> ||
49     std::is_same_v<std::decay_t<T>, uint64_t>;
50 
51 template<typename T>
52 inline static constexpr bool isSignedNum = std::is_same_v<std::decay_t<T>, std::int8_t> ||
53     std::is_same_v<std::decay_t<T>, std::int16_t> || std::is_same_v<std::decay_t<T>, std::int32_t> ||
54     std::is_same_v<std::decay_t<T>, int64_t>;
55 
56 template<typename T>
57 inline static constexpr bool isFloatingPointNum = std::is_same_v<std::decay_t<T>, float> ||
58     std::is_same_v<std::decay_t<T>, double>;
59 
60 template<typename T>
61 inline static constexpr bool isString = std::is_same_v<std::decay_t<T>, std::string> ||
62     std::is_same_v<std::decay_t<T>, const char*>;
63 
64 template<typename T>
65 inline static constexpr bool isUnsignedNumArray = std::is_same_v<std::decay_t<T>, std::vector<uint8_t>> ||
66     std::is_same_v<std::decay_t<T>, std::vector<uint16_t>> ||
67     std::is_same_v<std::decay_t<T>, std::vector<uint32_t>> || std::is_same_v<std::decay_t<T>, std::vector<uint64_t>>;
68 
69 template<typename T>
70 inline static constexpr bool isSignedNumArray = std::is_same_v<std::decay_t<T>, std::vector<int8_t>> ||
71     std::is_same_v<std::decay_t<T>, std::vector<int16_t>> ||
72     std::is_same_v<std::decay_t<T>, std::vector<int32_t>> || std::is_same_v<std::decay_t<T>, std::vector<int64_t>>;
73 
74 template<typename T>
75 inline static constexpr bool isFloatingPointNumArray = std::is_same_v<std::decay_t<T>, std::vector<float>> ||
76     std::is_same_v<std::decay_t<T>, std::vector<double>>;
77 
78 #pragma pack(1)
79 struct HiSysEventHeader {
80     /* Event domain */
81     char domain[MAX_DOMAIN_LENGTH + 1];
82 
83     /* Event name */
84     char name[MAX_EVENT_NAME_LENGTH + 1];
85 
86     /* Event timestamp */
87     uint64_t timestamp;
88 
89     /* Time zone */
90     uint8_t timeZone;
91 
92     /* User id */
93     uint32_t uid;
94 
95     /* Process id */
96     uint32_t pid;
97 
98     /* Thread id */
99     uint32_t tid;
100 
101     /* Event hash code*/
102     uint64_t id;
103 
104     /* Event type */
105     uint8_t type : 2;
106 
107     /* Trace info flag*/
108     uint8_t isTraceOpened : 1;
109 };
110 
111 struct TraceInfo {
112     /* Hitrace flag */
113     uint8_t traceFlag;
114 
115     /* Hitrace id */
116     uint64_t traceId;
117 
118     /* Hitrace span id */
119     uint32_t spanId;
120 
121     /* Hitrace parent span id */
122     uint32_t pSpanId;
123 };
124 
125 struct ParamValueType {
126     /* Array flag */
127     uint8_t isArray : 1;
128 
129     /* Type of parameter value */
130     uint8_t valueType : 4;
131 
132     /* Byte count of parameter value */
133     uint8_t valueByteCnt : 3;
134 };
135 #pragma pack()
136 
137 enum ValueType: uint8_t {
138     // Unknown value
139     UNKNOWN = 0,
140 
141     // Bool value
142     BOOL,
143 
144     // Int8_t value
145     INT8,
146 
147     // Uint8_t value
148     UINT8,
149 
150     // Int16_t value
151     INT16,
152 
153     // Uint16_t value
154     UINT16,
155 
156     // Int32_t value
157     INT32,
158 
159     // Uint32_t value
160     UINT32,
161 
162     // Int64_t value
163     INT64,
164 
165     // Uint64_t value
166     UINT64,
167 
168     // Float value
169     FLOAT,
170 
171     // Double value
172     DOUBLE,
173 
174     // String value
175     STRING,
176 };
177 
178 enum EncodeType: int8_t {
179     // Varint encoding
180     VARINT = 0,
181 
182     // Length delimited encoding
183     LENGTH_DELIMITED = 1,
184 
185     // Reserved
186     INVALID = 4,
187 };
188 
189 constexpr size_t HISYSEVENT_HEADER_SIZE = sizeof(struct HiSysEventHeader);
190 
191 int ParseTimeZone(const std::string& tzStr);
192 std::string ParseTimeZone(const uint8_t tzVal);
193 size_t GetValidDataMinimumByteCount();
194 
195 template<typename T>
TransNumToHexStr(T num)196 std::string TransNumToHexStr(T num)
197 {
198     std::stringstream ss;
199     ss << std::hex << num;
200     return ss.str();
201 }
202 } // namespace EventRaw
203 } // namespace HiviewDFX
204 } // namespace OHOS
205 
206 #endif // HIVIEW_BASE_EVENT_RAW_INCLUDE_RAW_BASE_DEF_H