• 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 #ifndef TRACE_STDTYPE_H
17 #define TRACE_STDTYPE_H
18 
19 #include <array>
20 #include <deque>
21 #include <limits>
22 #include <map>
23 #include <optional>
24 #include <sstream>
25 #include <stdexcept>
26 #include <string>
27 #include <unordered_map>
28 #include <vector>
29 
30 #include "cfg/trace_streamer_config.h"
31 #include "log.h"
32 #include "ts_common.h"
33 
34 namespace SysTuning {
35 namespace TraceStdtype {
36 using namespace SysTuning::TraceCfg;
37 using namespace SysTuning::TraceStreamer;
38 class CacheBase {
39 public:
Size()40     size_t Size() const
41     {
42         return std::max(timeStamps_.size(), ids_.size());
43     }
IdsData()44     const std::deque<uint32_t>& IdsData() const
45     {
46         return ids_;
47     }
TimeStamData()48     const std::deque<uint64_t>& TimeStamData() const
49     {
50         return timeStamps_;
51     }
InternalTidsData()52     const std::deque<InternalTid>& InternalTidsData() const
53     {
54         return internalTids_;
55     }
Clear()56     void Clear()
57     {
58         internalTids_.clear();
59         timeStamps_.clear();
60         ids_.clear();
61     }
62 public:
63     std::deque<InternalTid> internalTids_ = {};
64     std::deque<uint64_t> timeStamps_ = {};
65     std::deque<uint32_t> ids_ = {};
66 };
67 
68 class CpuCacheBase {
69 public:
DursData()70     const std::deque<uint64_t>& DursData() const
71     {
72         return durs_;
73     }
74 
CpusData()75     const std::deque<uint64_t>& CpusData() const
76     {
77         return cpus_;
78     }
Clear()79     void Clear()
80     {
81         durs_.clear();
82         cpus_.clear();
83     }
84 public:
85     std::deque<uint64_t> durs_;
86     std::deque<uint64_t> cpus_;
87 };
88 class Thread {
89 public:
Thread(uint32_t t)90     explicit Thread(uint32_t t) : tid_(t) {}
91     InternalPid internalPid_ = 0;
92     uint32_t tid_ = 0;
93     DataIndex nameIndex_ = 0;
94     InternalTime startT_ = 0;
95     InternalTime endT_ = 0;
96 };
97 
98 class Process {
99 public:
Process(uint32_t p)100     explicit Process(uint32_t p) : pid_(p) {}
101     std::string cmdLine_ = "";
102     InternalTime startT_ = 0;
103     uint32_t pid_ = 0;
104 };
105 
106 class ThreadState : public CacheBase, public CpuCacheBase {
107 public:
108     size_t AppendThreadState(uint64_t ts, uint64_t dur, uint64_t cpu, uint64_t internalTid, uint64_t state);
109     void SetDuration(size_t index, uint64_t duration);
110     uint64_t UpdateDuration(size_t index, uint64_t timestamp);
111     void UpdateState(size_t index, uint64_t state);
112     void UpdateDuration(size_t index, uint64_t timestamp, uint64_t state);
113     uint64_t UpdateDuration(size_t index, uint64_t timestamp, uint64_t cpu, uint64_t state);
StatesData()114     const std::deque<DataIndex>& StatesData() const
115     {
116         return states_;
117     }
Clear()118     void Clear()
119     {
120         CacheBase::Clear();
121         CpuCacheBase::Clear();
122         states_.clear();
123     }
124 
125 private:
126     std::deque<DataIndex> states_ = {};
127 };
128 
129 class SchedSlice : public CacheBase, public CpuCacheBase {
130 public:
131     size_t AppendSchedSlice(uint64_t ts,
132                             uint64_t dur,
133                             uint64_t cpu,
134                             uint64_t internalTid,
135                             uint64_t endState,
136                             uint64_t priority);
137     void SetDuration(size_t index, uint64_t duration);
138     void Update(uint64_t index, uint64_t ts, uint64_t state, uint64_t pior);
139 
EndStatesData()140     const std::deque<uint64_t>& EndStatesData() const
141     {
142         return endStates_;
143     }
144 
PriorityData()145     const std::deque<uint64_t>& PriorityData() const
146     {
147         return priority_;
148     }
Clear()149     void Clear()
150     {
151         CacheBase::Clear();
152         CpuCacheBase::Clear();
153         endStates_.clear();
154         priority_.clear();
155     }
156 
157 private:
158     std::deque<uint64_t> endStates_ = {};
159     std::deque<uint64_t> priority_ = {};
160 };
161 
162 class CallStack : public CacheBase, public CpuCacheBase {
163 public:
164     size_t AppendInternalAsyncSlice(uint64_t startT,
165                                     uint64_t durationNs,
166                                     InternalTid internalTid,
167                                     DataIndex cat,
168                                     DataIndex name,
169                                     uint8_t depth,
170                                     uint64_t cookid,
171                                     const std::optional<uint64_t>& parentId);
172     size_t AppendInternalSlice(uint64_t startT,
173                                uint64_t durationNs,
174                                InternalTid internalTid,
175                                DataIndex cat,
176                                DataIndex name,
177                                uint8_t depth,
178                                const std::optional<uint64_t>& parentId);
179     void AppendDistributeInfo(const std::string& chainId,
180                               const std::string& spanId,
181                               const std::string& parentSpanId,
182                               const std::string& flag,
183                               const std::string& args);
184     void AppendArgSet(uint32_t argSetId);
185     void AppendDistributeInfo();
186     void SetDuration(size_t index, uint64_t timestamp);
187     void SetDurationAndArg(size_t index, uint64_t timestamp, uint32_t argSetId);
188     void SetTimeStamp(size_t index, uint64_t timestamp);
Clear()189     void Clear()
190     {
191         CacheBase::Clear();
192         CpuCacheBase::Clear();
193         cats_.clear();
194         cookies_.clear();
195         callIds_.clear();
196         names_.clear();
197         depths_.clear();
198         chainIds_.clear();
199         spanIds_.clear();
200         parentSpanIds_.clear();
201         flags_.clear();
202         args_.clear();
203         argSet_.clear();
204     }
205 
206     const std::deque<std::optional<uint64_t>>& ParentIdData() const;
207     const std::deque<DataIndex>& CatsData() const;
208     const std::deque<DataIndex>& NamesData() const;
209     const std::deque<uint8_t>& Depths() const;
210     const std::deque<uint64_t>& Cookies() const;
211     const std::deque<uint64_t>& CallIds() const;
212     const std::deque<std::string>& ChainIds() const;
213     const std::deque<std::string>& SpanIds() const;
214     const std::deque<std::string>& ParentSpanIds() const;
215     const std::deque<std::string>& Flags() const;
216     const std::deque<std::string>& ArgsData() const;
217     const std::deque<uint32_t>& ArgSetIdsData() const;
218 
219 private:
220     void AppendCommonInfo(uint64_t startT, uint64_t durationNs, InternalTid internalTid);
221     void AppendCallStack(DataIndex cat, DataIndex name, uint8_t depth, std::optional<uint64_t> parentId);
222 
223 private:
224     std::deque<std::optional<uint64_t>> parentIds_;
225     std::deque<DataIndex> cats_ = {};
226     std::deque<uint64_t> cookies_ = {};
227     std::deque<uint64_t> callIds_ = {};
228     std::deque<DataIndex> names_ = {};
229     std::deque<uint8_t> depths_ = {};
230 
231     std::deque<std::string> chainIds_ = {};
232     std::deque<std::string> spanIds_ = {};
233     std::deque<std::string> parentSpanIds_ = {};
234     std::deque<std::string> flags_ = {};
235     std::deque<std::string> args_ = {};
236     std::deque<uint32_t> argSet_ = {};
237 };
238 
239 class Filter : public CacheBase {
240 public:
241     size_t AppendNewFilterData(std::string type, std::string name, uint64_t sourceArgSetId);
NameData()242     const std::deque<std::string>& NameData() const
243     {
244         return nameDeque_;
245     }
TypeData()246     const std::deque<std::string>& TypeData() const
247     {
248         return typeDeque_;
249     }
SourceArgSetIdData()250     const std::deque<uint64_t>& SourceArgSetIdData() const
251     {
252         return sourceArgSetId_;
253     }
Clear()254     void Clear()
255     {
256         CacheBase::Clear();
257         nameDeque_.clear();
258         typeDeque_.clear();
259         sourceArgSetId_.clear();
260     }
261 
262 private:
263     std::deque<std::string> nameDeque_ = {};
264     std::deque<std::string> typeDeque_ = {};
265     std::deque<uint64_t> sourceArgSetId_ = {};
266 };
267 
268 class Measure : public CacheBase {
269 public:
270     size_t AppendMeasureData(uint32_t type, uint64_t timestamp, int64_t value, uint32_t filterId);
TypeData()271     const std::deque<uint32_t>& TypeData() const
272     {
273         return typeDeque_;
274     }
ValuesData()275     const std::deque<int64_t>& ValuesData() const
276     {
277         return valuesDeque_;
278     }
FilterIdData()279     const std::deque<uint32_t>& FilterIdData() const
280     {
281         return filterIdDeque_;
282     }
Clear()283     void Clear()
284     {
285         CacheBase::Clear();
286         typeDeque_.clear();
287         valuesDeque_.clear();
288         filterIdDeque_.clear();
289     }
290 
291 private:
292     std::deque<uint32_t> typeDeque_ = {};
293     std::deque<int64_t> valuesDeque_ = {};
294     std::deque<uint32_t> filterIdDeque_ = {};
295 };
296 
297 class Raw : public CacheBase {
298 public:
299     size_t AppendRawData(uint32_t id, uint64_t timestamp, uint32_t name, uint32_t cpu, uint32_t internalTid);
NameData()300     const std::deque<uint32_t>& NameData() const
301     {
302         return nameDeque_;
303     }
CpuData()304     const std::deque<uint32_t>& CpuData() const
305     {
306         return cpuDeque_;
307     }
InternalTidData()308     const std::deque<uint32_t>& InternalTidData() const
309     {
310         return itidDeque_;
311     }
Clear()312     void Clear()
313     {
314         CacheBase::Clear();
315         nameDeque_.clear();
316         cpuDeque_.clear();
317         itidDeque_.clear();
318     }
319 
320 private:
321     std::deque<uint32_t> nameDeque_ = {};
322     std::deque<uint32_t> cpuDeque_ = {};
323     std::deque<uint32_t> itidDeque_ = {};
324 };
325 
326 class ThreadMeasureFilter {
327 public:
328     size_t AppendNewFilter(uint64_t filterId, uint32_t nameIndex, uint64_t internalTid);
Size()329     size_t Size() const
330     {
331         return filterId_.size();
332     }
FilterIdData()333     const std::deque<uint64_t>& FilterIdData() const
334     {
335         return filterId_;
336     }
InternalTidData()337     const std::deque<uint64_t>& InternalTidData() const
338     {
339         return internalTids_;
340     }
NameIndexData()341     const std::deque<uint32_t>& NameIndexData() const
342     {
343         return nameIndex_;
344     }
Clear()345     void Clear()
346     {
347         filterId_.clear();
348         internalTids_.clear();
349         nameIndex_.clear();
350     }
351 
352 private:
353     std::deque<uint64_t> filterId_ = {};
354     std::deque<uint64_t> internalTids_ = {};
355     std::deque<uint32_t> nameIndex_ = {};
356 };
357 
358 class CpuMeasureFilter : public CacheBase {
359 public:
AppendNewFilter(uint64_t filterId,DataIndex name,uint64_t cpu)360     inline size_t AppendNewFilter(uint64_t filterId, DataIndex name, uint64_t cpu)
361     {
362         ids_.emplace_back(filterId);
363         cpu_.emplace_back(cpu);
364         name_.emplace_back(name);
365         return Size() - 1;
366     }
367 
CpuData()368     const std::deque<uint64_t>& CpuData() const
369     {
370         return cpu_;
371     }
372 
TypeData()373     const std::deque<DataIndex>& TypeData() const
374     {
375         return type_;
376     }
377 
NameData()378     const std::deque<DataIndex>& NameData() const
379     {
380         return name_;
381     }
Clear()382     void Clear()
383     {
384         CacheBase::Clear();
385         cpu_.clear();
386         type_.clear();
387         name_.clear();
388     }
389 
390 private:
391     std::deque<uint64_t> cpu_ = {};
392     std::deque<DataIndex> type_ = {};
393     std::deque<DataIndex> name_ = {};
394 };
395 
396 class Instants : public CacheBase {
397 public:
398     size_t AppendInstantEventData(uint64_t timestamp, DataIndex nameIndex, int64_t internalTid);
399 
NameIndexsData()400     const std::deque<DataIndex>& NameIndexsData() const
401     {
402         return NameIndexs_;
403     }
Clear()404     void Clear()
405     {
406         CacheBase::Clear();
407         NameIndexs_.clear();
408     }
409 
410 private:
411     std::deque<DataIndex> NameIndexs_;
412 };
413 
414 class ProcessMeasureFilter : public CacheBase {
415 public:
416     size_t AppendNewFilter(uint64_t id, DataIndex name, uint32_t internalPid);
417 
UpidsData()418     const std::deque<uint32_t>& UpidsData() const
419     {
420         return internalPids_;
421     }
422 
NamesData()423     const std::deque<DataIndex>& NamesData() const
424     {
425         return names_;
426     }
Clear()427     void Clear()
428     {
429         CacheBase::Clear();
430         internalPids_.clear();
431         names_.clear();
432     }
433 
434 private:
435     std::deque<uint32_t> internalPids_ = {};
436     std::deque<DataIndex> names_ = {};
437 };
438 class ClockEventData : public CacheBase {
439 public:
440     size_t AppendNewFilter(uint64_t id, DataIndex type, DataIndex name, uint64_t cpu);
441 
CpusData()442     const std::deque<uint64_t>& CpusData() const
443     {
444         return cpus_;
445     }
446 
NamesData()447     const std::deque<DataIndex>& NamesData() const
448     {
449         return names_;
450     }
TypesData()451     const std::deque<DataIndex>& TypesData() const
452     {
453         return types_;
454     }
Clear()455     void Clear()
456     {
457         CacheBase::Clear();
458         cpus_.clear();
459         names_.clear();
460         types_.clear();
461     }
462 
463 private:
464     std::deque<uint64_t> cpus_ = {}; // in clock_set_rate event, it save cpu
465     std::deque<DataIndex> names_ = {};
466     std::deque<DataIndex> types_ = {};
467 };
468 class ClkEventData : public CacheBase {
469 public:
470     size_t AppendNewFilter(uint64_t id, uint64_t rate, DataIndex name, uint64_t cpu);
471 
NamesData()472     const std::deque<DataIndex>& NamesData() const
473     {
474         return names_;
475     }
RatesData()476     const std::deque<uint64_t>& RatesData() const
477     {
478         return rates_;
479     }
CpusData()480     const std::deque<uint64_t>& CpusData() const
481     {
482         return cpus_;
483     }
Clear()484     void Clear()
485     {
486         CacheBase::Clear();
487         names_.clear();
488         rates_.clear();
489         cpus_.clear();
490     }
491 
492 private:
493     std::deque<DataIndex> names_;
494     std::deque<uint64_t> rates_;
495     std::deque<uint64_t> cpus_;
496 };
497 class SysCall : public CacheBase {
498 public:
499     size_t AppendSysCallData(int64_t sysCallNum, DataIndex type, uint64_t ipid, uint64_t timestamp, int64_t ret);
SysCallsData()500     const std::deque<int64_t>& SysCallsData() const
501     {
502         return sysCallNums_;
503     }
TypesData()504     const std::deque<DataIndex>& TypesData() const
505     {
506         return types_;
507     }
IpidsData()508     const std::deque<uint64_t>& IpidsData() const
509     {
510         return ipids_;
511     }
RetsData()512     const std::deque<uint64_t>& RetsData() const
513     {
514         return rets_;
515     }
Clear()516     void Clear()
517     {
518         CacheBase::Clear();
519         sysCallNums_.clear();
520         types_.clear();
521         ipids_.clear();
522         rets_.clear();
523     }
524 
525 private:
526     std::deque<int64_t> sysCallNums_ = {};
527     std::deque<DataIndex> types_ = {};
528     std::deque<uint64_t> ipids_ = {};
529     std::deque<uint64_t> rets_ = {};
530 };
531 class ArgSet : public CacheBase {
532 public:
533     size_t AppendNewArg(DataIndex nameId, BaseDataType dataType, int64_t value, size_t argSet);
534     const std::deque<BaseDataType>& DataTypes() const;
535     const std::deque<int64_t>& ValuesData() const;
536     const std::deque<uint64_t>& ArgsData() const;
537     const std::deque<DataIndex>& NamesData() const;
538 
Clear()539     void Clear()
540     {
541         CacheBase::Clear();
542         names_.clear();
543         dataTypes_.clear();
544         values_.clear();
545         argset_.clear();
546     }
547 private:
548     std::deque<uint64_t> names_ = {};
549     std::deque<BaseDataType> dataTypes_ = {};
550     std::deque<int64_t> values_ = {};
551     std::deque<uint64_t> argset_ = {};
552 };
553 class SysMeasureFilter : public CacheBase {
554 public:
555     size_t AppendNewFilter(uint64_t filterId, DataIndex type, DataIndex nameId);
556     const std::deque<DataIndex>& NamesData() const;
557     const std::deque<DataIndex>& TypesData() const;
Clear()558     void Clear()
559     {
560         CacheBase::Clear();
561         types_.clear();
562         names_.clear();
563     }
564 
565 private:
566     std::deque<DataIndex> types_ = {};
567     std::deque<DataIndex> names_ = {};
568 };
569 class DataType : public CacheBase {
570 public:
571     size_t AppendNewDataType(BaseDataType dataType, DataIndex dataDescIndex);
572     const std::deque<BaseDataType>& DataTypes() const;
573     const std::deque<DataIndex>& DataDesc() const;
Clear()574     void Clear()
575     {
576         CacheBase::Clear();
577         dataTypes_.clear();
578         descs_.clear();
579     }
580 
581 private:
582     std::deque<BaseDataType> dataTypes_ = {};
583     std::deque<DataIndex> descs_ = {};
584 };
585 class LogInfo : public CacheBase {
586 public:
587     size_t AppendNewLogInfo(uint64_t seq,
588                             uint64_t timestamp,
589                             uint32_t pid,
590                             uint32_t tid,
591                             DataIndex level,
592                             DataIndex tag,
593                             DataIndex context,
594                             uint64_t originTs);
595     const std::deque<uint64_t>& HilogLineSeqs() const;
596     const std::deque<uint32_t>& Pids() const;
597     const std::deque<uint32_t>& Tids() const;
598     const std::deque<DataIndex>& Levels() const;
599     const std::deque<DataIndex>& Tags() const;
600     const std::deque<DataIndex>& Contexts() const;
601     const std::deque<uint64_t>& OriginTimeStamData() const;
Clear()602     void Clear()
603     {
604         CacheBase::Clear();
605         hilogLineSeqs_.clear();
606         pids_.clear();
607         levels_.clear();
608         tags_.clear();
609         contexts_.clear();
610         originTs_.clear();
611     }
612 
613 private:
614     std::deque<uint64_t> hilogLineSeqs_ = {};
615     std::deque<uint32_t> pids_ = {};
616     std::deque<uint32_t> tids_ = {};
617     std::deque<DataIndex> levels_ = {};
618     std::deque<DataIndex> tags_ = {};
619     std::deque<DataIndex> contexts_ = {};
620     std::deque<uint64_t> originTs_ = {};
621 };
622 
623 class HeapInfo : public CacheBase {
624 public:
625     size_t AppendNewHeapInfo(uint64_t eventId,
626                             uint32_t ipid,
627                             uint32_t itid,
628                             DataIndex eventType,
629                             uint64_t timestamp,
630                             uint64_t endTimestamp,
631                             uint64_t duration,
632                             uint64_t addr,
633                             int64_t heapSize,
634                             int64_t allHeapSize,
635                             uint64_t currentSizeDur);
636     void UpdateHeapDuration(size_t row, uint64_t endTimestamp);
637     void UpdateCurrentSizeDur(size_t row, uint64_t nextStartTime);
638     const std::deque<uint64_t>& EventIds() const;
639     const std::deque<uint32_t>& Ipids() const;
640     const std::deque<uint32_t>& Itids() const;
641     const std::deque<DataIndex>& EventTypes() const;
642     const std::deque<uint64_t>& EndTimeStamps() const;
643     const std::deque<uint64_t>& Durations() const;
644     const std::deque<uint64_t>& Addrs() const;
645     const std::deque<int64_t>& HeapSizes() const;
646     const std::deque<int64_t>& AllHeapSizes() const;
647     const std::deque<uint64_t>& CurrentSizeDurs() const;
Clear()648     void Clear()
649     {
650         CacheBase::Clear();
651         eventIds_.clear();
652         ipids_.clear();
653         itids_.clear();
654         eventTypes_.clear();
655         endTimestamps_.clear();
656         durations_.clear();
657         addrs_.clear();
658         heapSizes_.clear();
659         allHeapSizes_.clear();
660         currentSizeDurs_.clear();
661     }
662 
663 private:
664     std::deque<uint64_t> eventIds_ = {};
665     std::deque<uint32_t> ipids_ = {};
666     std::deque<uint32_t> itids_ = {};
667     std::deque<DataIndex> eventTypes_ = {};
668     std::deque<uint64_t> endTimestamps_ = {};
669     std::deque<uint64_t> durations_ = {};
670     std::deque<uint64_t> addrs_ = {};
671     std::deque<int64_t> heapSizes_ = {};
672     std::deque<int64_t> allHeapSizes_ = {};
673     std::deque<uint64_t> currentSizeDurs_ = {};
674     int64_t countHeapSizes_ = 0;
675 };
676 
677 class HeapFrameInfo {
678 public:
679     size_t AppendNewHeapFrameInfo(uint64_t eventId,
680                                 uint64_t depth,
681                                 DataIndex ip,
682                                 DataIndex sp,
683                                 DataIndex symbolName,
684                                 DataIndex filePath,
685                                 DataIndex offset,
686                                 uint64_t symbolOffset);
687     const std::deque<uint64_t>& EventIds() const;
688     const std::deque<uint64_t>& Depths() const;
689     const std::deque<uint64_t>& Ips() const;
690     const std::deque<uint64_t>& Sps() const;
691     const std::deque<DataIndex>& SymbolNames() const;
692     const std::deque<DataIndex>& FilePaths() const;
693     const std::deque<uint64_t>& Offsets() const;
694     const std::deque<uint64_t>& SymbolOffsets() const;
Size()695     size_t Size() const
696     {
697         return eventIds_.size();
698     }
Clear()699     void Clear()
700     {
701         eventIds_.clear();
702         depths_.clear();
703         ips_.clear();
704         sps_.clear();
705         symbolNames_.clear();
706         filePaths_.clear();
707         offsets_.clear();
708         symbolOffsets_.clear();
709     }
710 
711 private:
712     std::deque<uint64_t> eventIds_ = {};
713     std::deque<uint64_t> depths_ = {};
714     std::deque<uint64_t> ips_ = {};
715     std::deque<uint64_t> sps_ = {};
716     std::deque<DataIndex> symbolNames_ = {};
717     std::deque<DataIndex> filePaths_ = {};
718     std::deque<uint64_t> offsets_ = {};
719     std::deque<uint64_t> symbolOffsets_ = {};
720 };
721 
722 class Hidump : public CacheBase {
723 public:
724     size_t AppendNewHidumpInfo(uint64_t timestamp, uint32_t fps);
725     const std::deque<uint32_t>& Fpss() const;
726 private:
727     std::deque<uint32_t> fpss_ = {};
728 };
729 
730 class StatAndInfo {
731 public:
732     StatAndInfo();
733     ~StatAndInfo() = default;
734     void IncreaseStat(SupportedTraceEventType eventType, StatType type);
735     const uint32_t& GetValue(SupportedTraceEventType eventType, StatType type) const;
736     const std::string& GetEvent(SupportedTraceEventType eventType) const;
737     const std::string& GetStat(StatType type) const;
738     const std::string& GetSeverityDesc(SupportedTraceEventType eventType, StatType type) const;
739     const StatSeverityLevel& GetSeverity(SupportedTraceEventType eventType, StatType type) const;
740 
741 private:
742     uint32_t statCount_[TRACE_EVENT_MAX][STAT_EVENT_MAX];
743     std::string event_[TRACE_EVENT_MAX];
744     std::string stat_[STAT_EVENT_MAX];
745     std::string statSeverityDesc_[TRACE_EVENT_MAX][STAT_EVENT_MAX];
746     StatSeverityLevel statSeverity_[TRACE_EVENT_MAX][STAT_EVENT_MAX];
747     TraceStreamerConfig config_;
748 };
749 class SymbolsData {
750 public:
751     SymbolsData() = default;
752     ~SymbolsData() = default;
753     uint64_t Size() const;
754     void InsertSymbol(const DataIndex& name, const uint64_t& addr);
755     const std::deque<DataIndex>& GetConstFuncNames() const;
756     const std::deque<uint64_t>& GetConstAddrs() const;
Clear()757     void Clear()
758     {
759         addrs_.clear();
760         funcName_.clear();
761     }
762 private:
763     std::deque<uint64_t> addrs_ = {};
764     std::deque<DataIndex> funcName_ = {};
765 };
766 class MetaData {
767 public:
768     MetaData();
769     ~MetaData() = default;
770     void SetTraceType(const std::string& traceType);
771     void SetSourceFileName(const std::string& fileName);
772     void SetOutputFileName(const std::string& fileName);
773     void SetParserToolVersion(const std::string& version);
774     void SetParserToolPublishDateTime(const std::string& datetime);
775     void SetTraceDataSize(uint64_t dataSize);
776     void SetTraceDuration(uint64_t dur);
777     const std::string& Value(uint64_t row) const;
778     const std::string& Name(uint64_t row) const;
Clear()779     void Clear()
780     {
781         columnNames_.clear();
782         values_.clear();
783     }
784 private:
785     const std::string METADATA_ITEM_DATASIZE_COLNAME = "datasize";
786     const std::string METADATA_ITEM_PARSETOOL_NAME_COLNAME = "parse_tool";
787     const std::string METADATA_ITEM_PARSERTOOL_VERSION_COLNAME = "tool_version";
788     const std::string METADATA_ITEM_PARSERTOOL_PUBLISH_DATETIME_COLNAME = "tool_publish_time";
789     const std::string METADATA_ITEM_SOURCE_FILENAME_COLNAME = "source_name";
790     const std::string METADATA_ITEM_OUTPUT_FILENAME_COLNAME = "output_name";
791     const std::string METADATA_ITEM_PARSERTIME_COLNAME = "runtime";
792     const std::string METADATA_ITEM_TRACE_DURATION_COLNAME = "trace_duration";
793     const std::string METADATA_ITEM_SOURCE_DATETYPE_COLNAME = "source_type";
794 
795     std::deque<std::string> columnNames_ = {};
796     std::deque<std::string> values_ = {};
797 };
798 class DataDict {
799 public:
Size()800     size_t Size() const
801     {
802         return dataDict_.size();
803     }
804     DataIndex GetStringIndex(std::string_view str);
GetDataFromDict(DataIndex id)805     const std::string& GetDataFromDict(DataIndex id) const
806     {
807         TS_ASSERT(id < dataDict_.size());
808         return dataDict_[id];
809     }
Clear()810     void Clear()
811     {
812         dataDict_.clear();
813     }
814 public:
815     std::deque<std::string> dataDict_;
816     std::unordered_map<uint64_t, DataIndex> dataDictInnerMap_;
817 
818 private:
819     std::hash<std::string_view> hashFun;
820 };
821 } // namespace TraceStdtype
822 } // namespace SysTuning
823 
824 #endif // TRACE_STDTYPE_H
825