• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #include "trace_stdtype.h"
17 #include <ctime>
18 namespace SysTuning {
19 namespace TraceStdtype {
AppendThreadState(uint64_t ts,uint64_t dur,uint64_t cpu,uint64_t internalTid,uint64_t state)20 size_t ThreadState::AppendThreadState(uint64_t ts, uint64_t dur, uint64_t cpu, uint64_t internalTid, uint64_t state)
21 {
22     internalTids_.emplace_back(internalTid);
23     states_.emplace_back(state);
24     timeStamps_.emplace_back(ts);
25     durs_.emplace_back(dur);
26     cpus_.emplace_back(cpu);
27     return Size() - 1;
28 }
29 
SetDuration(size_t index,uint64_t duration)30 void ThreadState::SetDuration(size_t index, uint64_t duration)
31 {
32     durs_[index] = duration;
33 }
34 
UpdateDuration(size_t index,uint64_t timestamp)35 uint64_t ThreadState::UpdateDuration(size_t index, uint64_t timestamp)
36 {
37     if (durs_[index] == INVALID_UINT64) {
38         durs_[index] = timestamp - timeStamps_[index];
39     }
40     return internalTids_[index];
41 }
42 
UpdateState(size_t index,uint64_t state)43 void ThreadState::UpdateState(size_t index, uint64_t state)
44 {
45     states_[index] = state;
46 }
UpdateDuration(size_t index,uint64_t timestamp,uint64_t state)47 void ThreadState::UpdateDuration(size_t index, uint64_t timestamp, uint64_t state)
48 {
49     durs_[index] = timestamp - timeStamps_[index];
50     states_[index] = state;
51 }
52 
UpdateDuration(size_t index,uint64_t timestamp,uint64_t cpu,uint64_t state)53 uint64_t ThreadState::UpdateDuration(size_t index, uint64_t timestamp, uint64_t cpu, uint64_t state)
54 {
55     cpus_[index] = cpu;
56     durs_[index] = timestamp - timeStamps_[index];
57     states_[index] = state;
58     return internalTids_[index];
59 }
60 
AppendSchedSlice(uint64_t ts,uint64_t dur,uint64_t cpu,uint64_t internalTid,uint64_t endState,uint64_t priority)61 size_t SchedSlice::AppendSchedSlice(uint64_t ts,
62                                     uint64_t dur,
63                                     uint64_t cpu,
64                                     uint64_t internalTid,
65                                     uint64_t endState,
66                                     uint64_t priority)
67 {
68     timeStamps_.emplace_back(ts);
69     durs_.emplace_back(dur);
70     cpus_.emplace_back(cpu);
71     internalTids_.emplace_back(internalTid);
72     endStates_.emplace_back(endState);
73     priority_.emplace_back(priority);
74     return Size() - 1;
75 }
76 
SetDuration(size_t index,uint64_t duration)77 void SchedSlice::SetDuration(size_t index, uint64_t duration)
78 {
79     durs_[index] = duration;
80 }
81 
Update(uint64_t index,uint64_t ts,uint64_t state,uint64_t pior)82 void SchedSlice::Update(uint64_t index, uint64_t ts, uint64_t state, uint64_t pior)
83 {
84     durs_[index] = ts - timeStamps_[index];
85     endStates_[index] = state;
86     priority_[index] = pior;
87 }
88 
AppendInternalAsyncSlice(uint64_t startT,uint64_t durationNs,InternalTid internalTid,DataIndex cat,DataIndex name,uint8_t depth,uint64_t cookid,const std::optional<uint64_t> & parentId)89 size_t CallStack::AppendInternalAsyncSlice(uint64_t startT,
90                                            uint64_t durationNs,
91                                            InternalTid internalTid,
92                                            DataIndex cat,
93                                            DataIndex name,
94                                            uint8_t depth,
95                                            uint64_t cookid,
96                                            const std::optional<uint64_t>& parentId)
97 {
98     AppendCommonInfo(startT, durationNs, internalTid);
99     AppendCallStack(cat, name, depth, parentId);
100     AppendDistributeInfo();
101     cookies_.emplace_back(cookid);
102     ids_.emplace_back(ids_.size());
103     return Size() - 1;
104 }
AppendInternalSlice(uint64_t startT,uint64_t durationNs,InternalTid internalTid,DataIndex cat,DataIndex name,uint8_t depth,const std::optional<uint64_t> & parentId)105 size_t CallStack::AppendInternalSlice(uint64_t startT,
106                                       uint64_t durationNs,
107                                       InternalTid internalTid,
108                                       DataIndex cat,
109                                       DataIndex name,
110                                       uint8_t depth,
111                                       const std::optional<uint64_t>& parentId)
112 {
113     AppendCommonInfo(startT, durationNs, internalTid);
114     AppendCallStack(cat, name, depth, parentId);
115     ids_.emplace_back(ids_.size());
116     cookies_.emplace_back(INVALID_UINT64);
117     return Size() - 1;
118 }
119 
AppendCommonInfo(uint64_t startT,uint64_t durationNs,InternalTid internalTid)120 void CallStack::AppendCommonInfo(uint64_t startT, uint64_t durationNs, InternalTid internalTid)
121 {
122     timeStamps_.emplace_back(startT);
123     durs_.emplace_back(durationNs);
124     callIds_.emplace_back(internalTid);
125 }
AppendCallStack(DataIndex cat,DataIndex name,uint8_t depth,std::optional<uint64_t> parentId)126 void CallStack::AppendCallStack(DataIndex cat, DataIndex name, uint8_t depth, std::optional<uint64_t> parentId)
127 {
128     parentIds_.emplace_back(parentId);
129     cats_.emplace_back(cat);
130     names_.emplace_back(name);
131     depths_.emplace_back(depth);
132 }
AppendDistributeInfo(const std::string & chainId,const std::string & spanId,const std::string & parentSpanId,const std::string & flag,const std::string & args)133 void CallStack::AppendDistributeInfo(const std::string& chainId,
134                                      const std::string& spanId,
135                                      const std::string& parentSpanId,
136                                      const std::string& flag,
137                                      const std::string& args)
138 {
139     chainIds_.emplace_back(chainId);
140     spanIds_.emplace_back(spanId);
141     parentSpanIds_.emplace_back(parentSpanId);
142     flags_.emplace_back(flag);
143     args_.emplace_back(args);
144     argSet_.emplace_back(INVALID_UINT32);
145 }
AppendDistributeInfo()146 void CallStack::AppendDistributeInfo()
147 {
148     chainIds_.emplace_back("");
149     spanIds_.emplace_back("");
150     parentSpanIds_.emplace_back("");
151     flags_.emplace_back("");
152     args_.emplace_back("");
153     argSet_.emplace_back(INVALID_UINT32);
154 }
AppendArgSet(uint32_t argSetId)155 void CallStack::AppendArgSet(uint32_t argSetId)
156 {
157     chainIds_.emplace_back("");
158     spanIds_.emplace_back("");
159     parentSpanIds_.emplace_back("");
160     flags_.emplace_back("");
161     args_.emplace_back("");
162     argSet_.emplace_back(argSetId);
163 }
SetDuration(size_t index,uint64_t timestamp)164 void CallStack::SetDuration(size_t index, uint64_t timestamp)
165 {
166     durs_[index] = timestamp - timeStamps_[index];
167 }
168 
SetDurationAndArg(size_t index,uint64_t timestamp,uint32_t argSetId)169 void CallStack::SetDurationAndArg(size_t index, uint64_t timestamp, uint32_t argSetId)
170 {
171     SetTimeStamp(index, timestamp);
172     argSet_[index] = argSetId;
173 }
SetTimeStamp(size_t index,uint64_t timestamp)174 void CallStack::SetTimeStamp(size_t index, uint64_t timestamp)
175 {
176     timeStamps_[index] = timestamp;
177 }
178 
ParentIdData() const179 const std::deque<std::optional<uint64_t>>& CallStack::ParentIdData() const
180 {
181     return parentIds_;
182 }
CatsData() const183 const std::deque<DataIndex>& CallStack::CatsData() const
184 {
185     return cats_;
186 }
NamesData() const187 const std::deque<DataIndex>& CallStack::NamesData() const
188 {
189     return names_;
190 }
Depths() const191 const std::deque<uint8_t>& CallStack::Depths() const
192 {
193     return depths_;
194 }
Cookies() const195 const std::deque<uint64_t>& CallStack::Cookies() const
196 {
197     return cookies_;
198 }
CallIds() const199 const std::deque<uint64_t>& CallStack::CallIds() const
200 {
201     return callIds_;
202 }
ChainIds() const203 const std::deque<std::string>& CallStack::ChainIds() const
204 {
205     return chainIds_;
206 }
SpanIds() const207 const std::deque<std::string>& CallStack::SpanIds() const
208 {
209     return spanIds_;
210 }
ParentSpanIds() const211 const std::deque<std::string>& CallStack::ParentSpanIds() const
212 {
213     return parentSpanIds_;
214 }
Flags() const215 const std::deque<std::string>& CallStack::Flags() const
216 {
217     return flags_;
218 }
ArgsData() const219 const std::deque<std::string>& CallStack::ArgsData() const
220 {
221     return args_;
222 }
ArgSetIdsData() const223 const std::deque<uint32_t>& CallStack::ArgSetIdsData() const
224 {
225     return argSet_;
226 }
227 
AppendNewArg(DataIndex nameId,BaseDataType dataType,int64_t value,size_t argSet)228 size_t ArgSet::AppendNewArg(DataIndex nameId, BaseDataType dataType, int64_t value, size_t argSet)
229 {
230     dataTypes_.emplace_back(dataType);
231     argset_.emplace_back(argSet);
232     ids_.emplace_back(Size());
233     values_.emplace_back(value);
234     names_.emplace_back(nameId);
235     return Size() - 1;
236 }
DataTypes() const237 const std::deque<BaseDataType>& ArgSet::DataTypes() const
238 {
239     return dataTypes_;
240 }
ValuesData() const241 const std::deque<int64_t>& ArgSet::ValuesData() const
242 {
243     return values_;
244 }
ArgsData() const245 const std::deque<uint64_t>& ArgSet::ArgsData() const
246 {
247     return argset_;
248 }
NamesData() const249 const std::deque<DataIndex>& ArgSet::NamesData() const
250 {
251     return names_;
252 }
253 
AppendNewFilter(uint64_t filterId,DataIndex type,DataIndex nameId)254 size_t SysMeasureFilter::AppendNewFilter(uint64_t filterId, DataIndex type, DataIndex nameId)
255 {
256     ids_.emplace_back(filterId);
257     names_.emplace_back(nameId);
258     types_.emplace_back(type);
259     return ids_.size() - 1;
260 }
NamesData() const261 const std::deque<DataIndex>& SysMeasureFilter::NamesData() const
262 {
263     return names_;
264 }
265 
TypesData() const266 const std::deque<DataIndex>& SysMeasureFilter::TypesData() const
267 {
268     return types_;
269 }
AppendNewDataType(BaseDataType dataType,DataIndex dataDescIndex)270 size_t DataType::AppendNewDataType(BaseDataType dataType, DataIndex dataDescIndex)
271 {
272     ids_.emplace_back(Size());
273     dataTypes_.emplace_back(dataType);
274     descs_.emplace_back(dataDescIndex);
275     return Size() - 1;
276 }
277 
DataTypes() const278 const std::deque<BaseDataType>& DataType::DataTypes() const
279 {
280     return dataTypes_;
281 }
DataDesc() const282 const std::deque<DataIndex>& DataType::DataDesc() const
283 {
284     return descs_;
285 }
AppendNewFilterData(std::string type,std::string name,uint64_t sourceArgSetId)286 size_t Filter::AppendNewFilterData(std::string type, std::string name, uint64_t sourceArgSetId)
287 {
288     nameDeque_.emplace_back(name);
289     sourceArgSetId_.emplace_back(sourceArgSetId);
290     ids_.emplace_back(Size());
291     typeDeque_.emplace_back(type);
292     return Size() - 1;
293 }
294 
AppendMeasureData(uint32_t type,uint64_t timestamp,int64_t value,uint32_t filterId)295 size_t Measure::AppendMeasureData(uint32_t type, uint64_t timestamp, int64_t value, uint32_t filterId)
296 {
297     valuesDeque_.emplace_back(value);
298     filterIdDeque_.emplace_back(filterId);
299     typeDeque_.emplace_back(type);
300     timeStamps_.emplace_back(timestamp);
301     return Size() - 1;
302 }
303 
AppendRawData(uint32_t id,uint64_t timestamp,uint32_t name,uint32_t cpu,uint32_t internalTid)304 size_t Raw::AppendRawData(uint32_t id, uint64_t timestamp, uint32_t name, uint32_t cpu, uint32_t internalTid)
305 {
306     ids_.emplace_back(id);
307     timeStamps_.emplace_back(timestamp);
308     nameDeque_.emplace_back(name);
309     cpuDeque_.emplace_back(cpu);
310     itidDeque_.emplace_back(internalTid);
311     return Size() - 1;
312 }
313 
AppendNewFilter(uint64_t filterId,uint32_t nameIndex,uint64_t internalTid)314 size_t ThreadMeasureFilter::AppendNewFilter(uint64_t filterId, uint32_t nameIndex, uint64_t internalTid)
315 {
316     filterId_.emplace_back(filterId);
317     nameIndex_.emplace_back(nameIndex);
318     internalTids_.emplace_back(internalTid);
319     return Size() - 1;
320 }
321 
AppendInstantEventData(uint64_t timestamp,DataIndex nameIndex,int64_t internalTid)322 size_t Instants::AppendInstantEventData(uint64_t timestamp, DataIndex nameIndex, int64_t internalTid)
323 {
324     internalTids_.emplace_back(internalTid);
325     timeStamps_.emplace_back(timestamp);
326     NameIndexs_.emplace_back(nameIndex);
327     return Size() - 1;
328 }
AppendNewLogInfo(uint64_t seq,uint64_t timestamp,uint32_t pid,uint32_t tid,DataIndex level,DataIndex tag,DataIndex context,uint64_t originTs)329 size_t LogInfo::AppendNewLogInfo(uint64_t seq,
330                                  uint64_t timestamp,
331                                  uint32_t pid,
332                                  uint32_t tid,
333                                  DataIndex level,
334                                  DataIndex tag,
335                                  DataIndex context,
336                                  uint64_t originTs)
337 {
338     hilogLineSeqs_.emplace_back(seq);
339     timeStamps_.emplace_back(timestamp);
340     pids_.emplace_back(pid);
341     tids_.emplace_back(tid);
342     levels_.emplace_back(level);
343     tags_.emplace_back(tag);
344     contexts_.emplace_back(context);
345     originTs_.emplace_back(originTs);
346     return Size() - 1;
347 }
HilogLineSeqs() const348 const std::deque<uint64_t>& LogInfo::HilogLineSeqs() const
349 {
350     return hilogLineSeqs_;
351 }
Pids() const352 const std::deque<uint32_t>& LogInfo::Pids() const
353 {
354     return pids_;
355 }
Tids() const356 const std::deque<uint32_t>& LogInfo::Tids() const
357 {
358     return tids_;
359 }
Levels() const360 const std::deque<DataIndex>& LogInfo::Levels() const
361 {
362     return levels_;
363 }
Tags() const364 const std::deque<DataIndex>& LogInfo::Tags() const
365 {
366     return tags_;
367 }
Contexts() const368 const std::deque<DataIndex>& LogInfo::Contexts() const
369 {
370     return contexts_;
371 }
OriginTimeStamData() const372 const std::deque<uint64_t>& LogInfo::OriginTimeStamData() const
373 {
374     return originTs_;
375 }
376 
AppendNewHeapInfo(uint64_t eventId,uint32_t ipid,uint32_t itid,DataIndex eventType,uint64_t timestamp,uint64_t endTimestamp,uint64_t duration,uint64_t addr,int64_t heapSize,int64_t allHeapSize,uint64_t currentSizeDur)377 size_t HeapInfo::AppendNewHeapInfo(uint64_t eventId,
378                                    uint32_t ipid,
379                                    uint32_t itid,
380                                    DataIndex eventType,
381                                    uint64_t timestamp,
382                                    uint64_t endTimestamp,
383                                    uint64_t duration,
384                                    uint64_t addr,
385                                    int64_t heapSize,
386                                    int64_t allHeapSize,
387                                    uint64_t currentSizeDur)
388 {
389     eventIds_.emplace_back(eventId);
390     ipids_.emplace_back(ipid);
391     itids_.emplace_back(itid);
392     eventTypes_.emplace_back(eventType);
393     timeStamps_.emplace_back(timestamp);
394     endTimestamps_.emplace_back(endTimestamp);
395     durations_.emplace_back(duration);
396     addrs_.emplace_back(addr);
397     heapSizes_.emplace_back(heapSize);
398     countHeapSizes_ += allHeapSize;
399     allHeapSizes_.emplace_back(countHeapSizes_);
400     currentSizeDurs_.emplace_back(currentSizeDur);
401     return Size() - 1;
402 }
UpdateHeapDuration(size_t row,uint64_t endTimestamp)403 void HeapInfo::UpdateHeapDuration(size_t row, uint64_t endTimestamp)
404 {
405     endTimestamps_[row] = endTimestamp;
406     durations_[row] = endTimestamp - timeStamps_[row];
407 }
UpdateCurrentSizeDur(size_t row,uint64_t nextStartTime)408 void HeapInfo::UpdateCurrentSizeDur(size_t row, uint64_t nextStartTime)
409 {
410     if (row == 0) {
411         return;
412     }
413     if (nextStartTime > timeStamps_[--row]) {
414         currentSizeDurs_[row] = nextStartTime - timeStamps_[row];
415     }
416 }
EventIds() const417 const std::deque<uint64_t>& HeapInfo::EventIds() const
418 {
419     return eventIds_;
420 }
Ipids() const421 const std::deque<uint32_t>& HeapInfo::Ipids() const
422 {
423     return ipids_;
424 }
Itids() const425 const std::deque<uint32_t>& HeapInfo::Itids() const
426 {
427     return itids_;
428 }
EventTypes() const429 const std::deque<DataIndex>& HeapInfo::EventTypes() const
430 {
431     return eventTypes_;
432 }
EndTimeStamps() const433 const std::deque<uint64_t>& HeapInfo::EndTimeStamps() const
434 {
435     return endTimestamps_;
436 }
Durations() const437 const std::deque<uint64_t>& HeapInfo::Durations() const
438 {
439     return durations_;
440 }
Addrs() const441 const std::deque<uint64_t>& HeapInfo::Addrs() const
442 {
443     return addrs_;
444 }
HeapSizes() const445 const std::deque<int64_t>& HeapInfo::HeapSizes() const
446 {
447     return heapSizes_;
448 }
AllHeapSizes() const449 const std::deque<int64_t>& HeapInfo::AllHeapSizes() const
450 {
451     return allHeapSizes_;
452 }
CurrentSizeDurs() const453 const std::deque<uint64_t>& HeapInfo::CurrentSizeDurs() const
454 {
455     return currentSizeDurs_;
456 }
457 
AppendNewHeapFrameInfo(uint64_t eventId,uint64_t depth,DataIndex ip,DataIndex sp,DataIndex symbolName,DataIndex filePath,DataIndex offset,uint64_t symbolOffset)458 size_t HeapFrameInfo::AppendNewHeapFrameInfo(uint64_t eventId,
459                                              uint64_t depth,
460                                              DataIndex ip,
461                                              DataIndex sp,
462                                              DataIndex symbolName,
463                                              DataIndex filePath,
464                                              DataIndex offset,
465                                              uint64_t symbolOffset)
466 {
467     eventIds_.emplace_back(eventId);
468     depths_.emplace_back(depth);
469     ips_.emplace_back(ip);
470     sps_.emplace_back(sp);
471     symbolNames_.emplace_back(symbolName);
472     filePaths_.emplace_back(filePath);
473     offsets_.emplace_back(offset);
474     symbolOffsets_.emplace_back(symbolOffset);
475     return Size() - 1;
476 }
EventIds() const477 const std::deque<uint64_t>& HeapFrameInfo::EventIds() const
478 {
479     return eventIds_;
480 }
Depths() const481 const std::deque<uint64_t>& HeapFrameInfo::Depths() const
482 {
483     return depths_;
484 }
Ips() const485 const std::deque<uint64_t>& HeapFrameInfo::Ips() const
486 {
487     return ips_;
488 }
Sps() const489 const std::deque<uint64_t>& HeapFrameInfo::Sps() const
490 {
491     return sps_;
492 }
SymbolNames() const493 const std::deque<DataIndex>& HeapFrameInfo::SymbolNames() const
494 {
495     return symbolNames_;
496 }
FilePaths() const497 const std::deque<DataIndex>& HeapFrameInfo::FilePaths() const
498 {
499     return filePaths_;
500 }
Offsets() const501 const std::deque<uint64_t>& HeapFrameInfo::Offsets() const
502 {
503     return offsets_;
504 }
SymbolOffsets() const505 const std::deque<uint64_t>& HeapFrameInfo::SymbolOffsets() const
506 {
507     return symbolOffsets_;
508 }
509 
AppendNewHidumpInfo(uint64_t timestamp,uint32_t fps)510 size_t Hidump::AppendNewHidumpInfo(uint64_t timestamp, uint32_t fps)
511 {
512     timeStamps_.emplace_back(timestamp);
513     fpss_.emplace_back(fps);
514     return Size() - 1;
515 }
Fpss() const516 const std::deque<uint32_t>& Hidump::Fpss() const
517 {
518     return fpss_;
519 }
AppendNewFilter(uint64_t id,DataIndex name,uint32_t internalPid)520 size_t ProcessMeasureFilter::AppendNewFilter(uint64_t id, DataIndex name, uint32_t internalPid)
521 {
522     internalPids_.emplace_back(internalPid);
523     ids_.emplace_back(id);
524     names_.emplace_back(name);
525     return Size() - 1;
526 }
AppendNewFilter(uint64_t id,DataIndex type,DataIndex name,uint64_t cpu)527 size_t ClockEventData::AppendNewFilter(uint64_t id, DataIndex type, DataIndex name, uint64_t cpu)
528 {
529     cpus_.emplace_back(cpu);
530     ids_.emplace_back(id);
531     types_.emplace_back(type);
532     names_.emplace_back(name);
533     return Size() - 1;
534 }
AppendNewFilter(uint64_t id,uint64_t rate,DataIndex name,uint64_t cpu)535 size_t ClkEventData::AppendNewFilter(uint64_t id, uint64_t rate, DataIndex name, uint64_t cpu)
536 {
537     ids_.emplace_back(id);
538     rates_.emplace_back(rate);
539     names_.emplace_back(name);
540     cpus_.emplace_back(cpu);
541     return Size() - 1;
542 }
AppendSysCallData(int64_t sysCallNum,DataIndex type,uint64_t ipid,uint64_t timestamp,int64_t ret)543 size_t SysCall::AppendSysCallData(int64_t sysCallNum, DataIndex type, uint64_t ipid, uint64_t timestamp, int64_t ret)
544 {
545     sysCallNums_.emplace_back(sysCallNum);
546     types_.emplace_back(type);
547     ipids_.emplace_back(ipid);
548     timeStamps_.emplace_back(timestamp);
549     rets_.emplace_back(ret);
550     return Size() - 1;
551 }
StatAndInfo()552 StatAndInfo::StatAndInfo()
553 {
554     // sched_switch_received | sched_switch_not_match | sched_switch_not_not_supported etc.
555     for (int i = TRACE_EVENT_START; i < TRACE_EVENT_MAX; i++) {
556         event_[i] = config_.eventNameMap_.at(static_cast<SupportedTraceEventType>(i));
557     }
558     for (int j = STAT_EVENT_START; j < STAT_EVENT_MAX; j++) {
559         stat_[j] = config_.eventErrorDescMap_.at(static_cast<StatType>(j));
560     }
561 
562     for (int i = TRACE_EVENT_START; i < TRACE_EVENT_MAX; i++) {
563         for (int j = STAT_EVENT_START; j < STAT_EVENT_MAX; j++) {
564             statSeverity_[i][j] = config_.eventParserStatSeverityDescMap_.at(static_cast<SupportedTraceEventType>(i))
565                                       .at(static_cast<StatType>(j));
566         }
567     }
568 
569     for (int i = TRACE_EVENT_START; i < TRACE_EVENT_MAX; i++) {
570         for (int j = STAT_EVENT_START; j < STAT_EVENT_MAX; j++) {
571             statSeverityDesc_[i][j] = config_.serverityLevelDescMap_.at(statSeverity_[i][j]);
572         }
573     }
574 
575     for (int i = TRACE_EVENT_START; i < TRACE_EVENT_MAX; i++) {
576         for (int j = STAT_EVENT_START; j < STAT_EVENT_MAX; j++) {
577             statCount_[i][j] = 0;
578         }
579     }
580 }
IncreaseStat(SupportedTraceEventType eventType,StatType type)581 void StatAndInfo::IncreaseStat(SupportedTraceEventType eventType, StatType type)
582 {
583     statCount_[eventType][type]++;
584 }
GetValue(SupportedTraceEventType eventType,StatType type) const585 const uint32_t& StatAndInfo::GetValue(SupportedTraceEventType eventType, StatType type) const
586 {
587     return statCount_[eventType][type];
588 }
GetEvent(SupportedTraceEventType eventType) const589 const std::string& StatAndInfo::GetEvent(SupportedTraceEventType eventType) const
590 {
591     return event_[eventType];
592 }
GetStat(StatType type) const593 const std::string& StatAndInfo::GetStat(StatType type) const
594 {
595     return stat_[type];
596 }
GetSeverityDesc(SupportedTraceEventType eventType,StatType type) const597 const std::string& StatAndInfo::GetSeverityDesc(SupportedTraceEventType eventType, StatType type) const
598 {
599     return statSeverityDesc_[eventType][type];
600 }
GetSeverity(SupportedTraceEventType eventType,StatType type) const601 const StatSeverityLevel& StatAndInfo::GetSeverity(SupportedTraceEventType eventType, StatType type) const
602 {
603     return statSeverity_[eventType][type];
604 }
Size() const605 uint64_t SymbolsData::Size() const
606 {
607     return addrs_.size();
608 }
InsertSymbol(const DataIndex & name,const uint64_t & addr)609 void SymbolsData::InsertSymbol(const DataIndex& name, const uint64_t& addr)
610 {
611     addrs_.emplace_back(addr);
612     funcName_.emplace_back(name);
613 }
GetConstFuncNames() const614 const std::deque<DataIndex>& SymbolsData::GetConstFuncNames() const
615 {
616     return funcName_;
617 }
GetConstAddrs() const618 const std::deque<uint64_t>& SymbolsData::GetConstAddrs() const
619 {
620     return addrs_;
621 }
MetaData()622 MetaData::MetaData()
623 {
624     columnNames_.resize(METADATA_ITEM_MAX);
625     values_.resize(METADATA_ITEM_MAX);
626     columnNames_[METADATA_ITEM_DATASIZE] = METADATA_ITEM_DATASIZE_COLNAME;
627     columnNames_[METADATA_ITEM_PARSETOOL_NAME] = METADATA_ITEM_PARSETOOL_NAME_COLNAME;
628     columnNames_[METADATA_ITEM_PARSERTOOL_VERSION] = METADATA_ITEM_PARSERTOOL_VERSION_COLNAME;
629     columnNames_[METADATA_ITEM_PARSERTOOL_PUBLISH_DATETIME] = METADATA_ITEM_PARSERTOOL_PUBLISH_DATETIME_COLNAME;
630     columnNames_[METADATA_ITEM_SOURCE_FILENAME] = METADATA_ITEM_SOURCE_FILENAME_COLNAME;
631     columnNames_[METADATA_ITEM_OUTPUT_FILENAME] = METADATA_ITEM_OUTPUT_FILENAME_COLNAME;
632     columnNames_[METADATA_ITEM_PARSERTIME] = METADATA_ITEM_PARSERTIME_COLNAME;
633     columnNames_[METADATA_ITEM_TRACE_DURATION] = METADATA_ITEM_TRACE_DURATION_COLNAME;
634     columnNames_[METADATA_ITEM_SOURCE_DATETYPE] = METADATA_ITEM_SOURCE_DATETYPE_COLNAME;
635     values_[METADATA_ITEM_PARSETOOL_NAME] = "trace_streamer";
636 }
SetTraceType(const std::string & traceType)637 void MetaData::SetTraceType(const std::string& traceType)
638 {
639     values_[METADATA_ITEM_SOURCE_DATETYPE] = traceType;
640 }
SetSourceFileName(const std::string & fileName)641 void MetaData::SetSourceFileName(const std::string& fileName)
642 {
643     MetaData::values_[METADATA_ITEM_SOURCE_FILENAME] = fileName;
644 }
SetOutputFileName(const std::string & fileName)645 void MetaData::SetOutputFileName(const std::string& fileName)
646 {
647     MetaData::values_[METADATA_ITEM_OUTPUT_FILENAME] = fileName;
648 }
SetParserToolVersion(const std::string & version)649 void MetaData::SetParserToolVersion(const std::string& version)
650 {
651     values_[METADATA_ITEM_PARSERTOOL_VERSION] = version;
652 }
SetParserToolPublishDateTime(const std::string & datetime)653 void MetaData::SetParserToolPublishDateTime(const std::string& datetime)
654 {
655     values_[METADATA_ITEM_PARSERTOOL_PUBLISH_DATETIME] = datetime;
656 }
SetTraceDataSize(uint64_t dataSize)657 void MetaData::SetTraceDataSize(uint64_t dataSize)
658 {
659     std::stringstream ss;
660     ss << dataSize;
661     values_[METADATA_ITEM_DATASIZE] = ss.str();
662     // 	Function 'time' may return error. It is not allowed to do anything that might fail inside the constructor.
663     time_t rawtime;
664     struct tm* timeinfo = nullptr;
665     void(time(&rawtime));
666     timeinfo = localtime(&rawtime);
667     values_[METADATA_ITEM_PARSERTIME] = asctime(timeinfo);
668 }
SetTraceDuration(uint64_t dur)669 void MetaData::SetTraceDuration(uint64_t dur)
670 {
671     values_[METADATA_ITEM_TRACE_DURATION] = std::to_string(dur) + " s";
672 }
Value(uint64_t row) const673 const std::string& MetaData::Value(uint64_t row) const
674 {
675     return values_[row];
676 }
Name(uint64_t row) const677 const std::string& MetaData::Name(uint64_t row) const
678 {
679     return columnNames_[row];
680 }
GetStringIndex(std::string_view str)681 DataIndex DataDict::GetStringIndex(std::string_view str)
682 {
683     auto hashValue = hashFun(str);
684     auto itor = dataDictInnerMap_.find(hashValue);
685     if (itor != dataDictInnerMap_.end()) {
686         TS_ASSERT(std::string_view(dataDict_[itor->second]) == str);
687         return itor->second;
688     }
689     dataDict_.emplace_back(std::string(str));
690     DataIndex stringIdentity = dataDict_.size() - 1;
691     dataDictInnerMap_.emplace(hashValue, stringIdentity);
692     return stringIdentity;
693 }
694 } // namespace TraceStdtype
695 } // namespace SysTuning
696