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