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_DATA_CACHE_BASE_H 17 #define TRACE_DATA_CACHE_BASE_H 18 19 20 #include <array> 21 #include <deque> 22 #include <map> 23 #include <stdexcept> 24 #include <string> 25 #include <vector> 26 #include "trace_stdtype.h" 27 namespace SysTuning { 28 namespace TraceStreamer { 29 using namespace TraceStdtype; 30 class TraceDataCacheBase { 31 public: 32 TraceDataCacheBase(); 33 TraceDataCacheBase(const TraceDataCacheBase&) = delete; 34 TraceDataCacheBase& operator=(const TraceDataCacheBase&) = delete; 35 virtual ~TraceDataCacheBase() = default; 36 37 public: ThreadSize()38 size_t ThreadSize() const 39 { 40 return internalThreadsData_.size(); 41 } ProcessSize()42 size_t ProcessSize() const 43 { 44 return internalProcessesData_.size(); 45 } 46 47 void UpdataZeroThreadInfo(); DataDictSize()48 size_t DataDictSize() const 49 { 50 return dataDict_.Size(); 51 } UpdateTraceRange()52 void UpdateTraceRange() 53 { 54 metaData_.SetTraceDuration((traceEndTime_ - traceStartTime_) / SEC_TO_NS); 55 } 56 DataIndex GetDataIndex(std::string_view str); 57 DataIndex GetConstDataIndex(std::string_view str) const; 58 std::map<uint64_t, std::string> statusString_ = { 59 {TASK_RUNNABLE, "R"}, {TASK_INTERRUPTIBLE, "S"}, {TASK_UNINTERRUPTIBLE, "D"}, {TASK_RUNNING, "Running"}, 60 {TASK_INTERRUPTED, "I"}, {TASK_TRACED, "T"}, {TASK_EXIT_DEAD, "X"}, {TASK_ZOMBIE, "Z"}, 61 {TASK_KILLED, "I"}, {TASK_WAKEKILL, "R"}, {TASK_INVALID, "U"}, {TASK_CLONE, "I"}, 62 {TASK_DK, "DK"}, {TASK_TRACED_KILL, "TK"}, {TASK_FOREGROUND, "R+"}, {TASK_MAX, "S"}}; 63 uint64_t traceStartTime_ = std::numeric_limits<uint64_t>::max(); 64 uint64_t traceEndTime_ = 0; 65 66 Raw rawData_; 67 ThreadState threadStateData_; 68 Instants instantsData_; 69 70 Filter filterData_; 71 ProcessMeasureFilter processMeasureFilterData_; 72 ClockEventData clockEventFilterData_; 73 ClkEventData clkEventFilterData_; 74 ProcessMeasureFilter processFilterData_; 75 ThreadMeasureFilter threadMeasureFilterData_; 76 ThreadMeasureFilter threadFilterData_; 77 DataDict dataDict_; 78 79 SchedSlice schedSliceData_; 80 CallStack callstackData_; 81 CallStack irqData_; 82 LogInfo hilogData_; 83 NativeHook nativeHookData_; 84 NativeHookFrame nativeHookFrameData_; 85 Hidump hidumpData_; 86 PerfSample perfSample_; 87 PerfCallChain perfCallChain_; 88 PerfThread perfThread_; 89 PerfFiles perfFiles_; 90 PerfReport perfReport_; 91 92 std::deque<Process> internalProcessesData_ = {}; 93 std::deque<Thread> internalThreadsData_ = {}; 94 95 Measure measureData_; 96 Measure sysMemMeasureData_; 97 Measure processMeasureData_; 98 CpuMeasureFilter cpuMeasureData_; 99 100 StatAndInfo stat_; 101 MetaData metaData_; 102 SymbolsData symbolsData_; 103 SysCall sysCallData_; 104 ArgSet argSet_; 105 DataType dataType_; 106 SysMeasureFilter sysEvent_; 107 NetDetailData networkData_; 108 NetDetailData networkDetailData_; 109 CpuUsageDetailData cpuUsageData_; 110 DiskIOData diskIOData_; 111 LiveProcessDetailData liveProcessDetailData_; 112 FileSystemSample fileSamplingTableData_; 113 EbpfCallStackData ebpfCallStackData_; 114 PagedMemorySampleData PagedMemorySampleData_; 115 #if WITH_EBPF_HELP 116 EbpfProcessMaps ebpfProcessMaps_; 117 EbpfElf ebpfElf_; 118 EbpfElfSymbol ebpfElfSymbol_; 119 #endif 120 AppNames appNames_; 121 SysEventMeasureData sysEventMeasureData_; 122 DeviceStateData deviceStateData_; 123 SmapsData smapsData_; 124 BioLatencySampleData bioLatencySampleData_; 125 ClockSnapshotData clockSnapshotData_; 126 DataSourceClockIdData dataSourceClockIdData_; 127 }; 128 } // namespace TraceStreamer 129 } // namespace SysTuning 130 131 #endif // TRACE_DATA_CACHE_BASE_H 132