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