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 #include <array> 20 #include <deque> 21 #include <map> 22 #include <stdexcept> 23 #include <string> 24 #include <vector> 25 #include "trace_stdtype.h" 26 namespace SysTuning { 27 namespace TraceStreamer { 28 using namespace TraceStdtype; 29 class TraceDataCacheBase { 30 public: 31 TraceDataCacheBase(); 32 TraceDataCacheBase(const TraceDataCacheBase&) = delete; 33 TraceDataCacheBase& operator=(const TraceDataCacheBase&) = delete; 34 virtual ~TraceDataCacheBase() = default; 35 36 public: ThreadSize()37 size_t ThreadSize() const 38 { 39 return internalThreadsData_.size(); 40 } ProcessSize()41 size_t ProcessSize() const 42 { 43 return internalProcessesData_.size(); 44 } 45 46 void UpdataZeroThreadInfo(); DataDictSize()47 size_t DataDictSize() const 48 { 49 return dataDict_.Size(); 50 } UpdateTraceRange()51 void UpdateTraceRange() 52 { 53 metaData_.SetTraceDuration((traceEndTime_ - traceStartTime_) / SEC_TO_NS); 54 } GetThreadStateValue(const std::string & status)55 uint64_t GetThreadStateValue(const std::string& status) const 56 { 57 if (threadStatus2Value_.count(status)) { 58 return threadStatus2Value_.at(status); 59 } 60 return INVALID_UINT64; 61 } 62 DataIndex GetDataIndex(std::string_view str); 63 DataIndex GetConstDataIndex(std::string_view str) const; 64 std::map<uint64_t, std::string> statusString_ = {{TASK_RUNNABLE, "R"}, 65 {TASK_INTERRUPTIBLE, "S"}, 66 {TASK_UNINTERRUPTIBLE, "D"}, 67 {TASK_UNINTERRUPTIBLE_IO, "D-IO"}, 68 {TASK_UNINTERRUPTIBLE_NIO, "D-NIO"}, 69 {TASK_RUNNING, "Running"}, 70 {TASK_INTERRUPTED, "I"}, 71 {TASK_TRACED, "T"}, 72 {TASK_EXIT_DEAD, "X"}, 73 {TASK_ZOMBIE, "Z"}, 74 {TASK_CLONE, "I"}, 75 {TASK_KILLED, "I"}, 76 {TASK_DK, "DK"}, 77 {TASK_DK_IO, "DK-IO"}, 78 {TASK_DK_NIO, "DK-NIO"}, 79 {TASK_TRACED_KILL, "TK"}, 80 {TASK_WAKEKILL, "R"}, 81 {TASK_PARKED, "P"}, 82 {TASK_FOREGROUND, "R+"}, 83 {TASK_MAX, "S"}, 84 {TASK_INVALID, "U"}}; 85 std::map<std::string, uint64_t> threadStatus2Value_ = {}; 86 uint64_t traceStartTime_ = std::numeric_limits<uint64_t>::max(); 87 uint64_t traceEndTime_ = 0; 88 89 Raw rawData_; 90 ThreadStateData threadStateData_; 91 Instants instantsData_; 92 93 Filter filterData_; 94 ProcessMeasureFilter processMeasureFilterData_; 95 ClockEventData clockEventFilterData_; 96 ClkEventData clkEventFilterData_; 97 ProcessMeasureFilter processFilterData_; 98 ThreadMeasureFilter threadMeasureFilterData_; 99 ThreadMeasureFilter threadFilterData_; 100 DataDict dataDict_; 101 102 SchedSlice schedSliceData_; 103 CallStack callstackData_; 104 CallStack irqData_; 105 LogInfo hilogData_; 106 NativeHook nativeHookData_; 107 NativeHookFrame nativeHookFrameData_; 108 NativeHookStatistic nativeHookStatisticData_; 109 Hidump hidumpData_; 110 PerfSample perfSample_; 111 PerfCallChain perfCallChain_; 112 PerfThread perfThread_; 113 PerfFiles perfFiles_; 114 PerfReport perfReport_; 115 116 std::deque<Process> internalProcessesData_ = {}; 117 std::deque<Thread> internalThreadsData_ = {}; 118 119 Measure measureData_; 120 Measure sysMemMeasureData_; 121 Measure processMeasureData_; 122 CpuMeasureFilter cpuMeasureData_; 123 124 StatAndInfo stat_; 125 MetaData metaData_; 126 SymbolsData symbolsData_; 127 SysCall sysCallData_; 128 ArgSet argSet_; 129 DataType dataType_; 130 SysMeasureFilter sysEvent_; 131 NetDetailData networkData_; 132 NetDetailData networkDetailData_; 133 CpuUsageDetailData cpuUsageData_; 134 DiskIOData diskIOData_; 135 LiveProcessDetailData liveProcessDetailData_; 136 FileSystemSample fileSamplingTableData_; 137 EbpfCallStackData ebpfCallStackData_; 138 PagedMemorySampleData PagedMemorySampleData_; 139 #if WITH_EBPF_HELP 140 EbpfProcessMaps ebpfProcessMaps_; 141 EbpfElf ebpfElf_; 142 EbpfElfSymbol ebpfElfSymbol_; 143 #endif 144 AppNames appNames_; 145 SysEventMeasureData sysEventMeasureData_; 146 DeviceStateData deviceStateData_; 147 TraceConfigData traceConfigData_; 148 SmapsData smapsData_; 149 BioLatencySampleData bioLatencySampleData_; 150 ClockSnapshotData clockSnapshotData_; 151 DataSourceClockIdData dataSourceClockIdData_; 152 FrameSlice frameSliceData_; 153 FrameMaps frameMapsData_; 154 GPUSlice gpuSliceData_; 155 TaskPoolInfo taskPoolInfo_; 156 JsHeapFiles jsHeapFilesData_; 157 JsHeapEdges jsHeapEdgesData_; 158 JsHeapInfo jsHeapInfoData_; 159 JsHeapLocation jsHeapLocationData_; 160 JsHeapNodes jsHeapNodesData_; 161 JsHeapSample jsHeapSampleData_; 162 JsHeapString jsHeapStringData_; 163 JsHeapTraceFuncInfo jsHeapTraceFuncInfoData_; 164 JsHeapTraceNode jsHeapTraceNodeData_; 165 JsCpuProfilerNode jsCpuProfilerNodeData_; 166 JsCpuProfilerSample jsCpuProfilerSampleData_; 167 JsConfig jsConfigData_; 168 AppStartup appStartupData_; 169 SoStaticInitalization staticInitalizationData_; 170 Animation animation_; 171 DeviceInfo deviceInfo_; 172 DynamicFrame dynamicFrame_; 173 AshMemData ashMemData_; 174 DmaMemData dmaMemData_; 175 GpuProcessMemData gpuProcessMemData_; 176 GpuWindowMemData gpuWindowMemData_; 177 }; 178 } // namespace TraceStreamer 179 } // namespace SysTuning 180 181 #endif // TRACE_DATA_CACHE_BASE_H 182