1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 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 <atomic> 21 #include <deque> 22 #include <map> 23 #include <stdexcept> 24 #include <string> 25 #include <vector> 26 #include "activity_monitor_stdtype.h" 27 #include "animation_stdtype.h" 28 #include "app_startup_stdtype.h" 29 #include "arkts_stdtype.h" 30 #include "base_stdtype.h" 31 #include "callstack_stdtype.h" 32 #include "common_stdtype.h" 33 #include "ebpf_stdtype.h" 34 #include "hilog_stdtype.h" 35 #include "hiperf_stdtype.h" 36 #include "hisysevent_stdtype.h" 37 #include "measure_stdtype.h" 38 #include "native_memory_stdtype.h" 39 #include "render_service_stdtype.h" 40 #include "sched_stdtype.h" 41 #include "syscall_stdtype.h" 42 #include "task_pool_stdtype.h" 43 namespace SysTuning { 44 namespace TraceStreamer { 45 using namespace TraceStdtype; 46 class TraceDataCacheBase { 47 public: 48 TraceDataCacheBase(); 49 TraceDataCacheBase(const TraceDataCacheBase &) = delete; 50 TraceDataCacheBase &operator=(const TraceDataCacheBase &) = delete; 51 virtual ~TraceDataCacheBase() = default; 52 53 public: ThreadSize()54 size_t ThreadSize() const 55 { 56 return internalThreadsData_.size(); 57 } ProcessSize()58 size_t ProcessSize() const 59 { 60 return internalProcessesData_.size(); 61 } 62 63 void UpdataZeroThreadInfo(); DataDictSize()64 size_t DataDictSize() const 65 { 66 return dataDict_.Size(); 67 } UpdateTraceRange()68 void UpdateTraceRange() 69 { 70 metaData_.SetTraceDuration((traceEndTime_ - traceStartTime_) / SEC_TO_NS); 71 } GetThreadStateValue(const std::string & status)72 uint64_t GetThreadStateValue(const std::string &status) const 73 { 74 if (threadStatus2Value_.count(status)) { 75 return threadStatus2Value_.at(status); 76 } 77 return INVALID_UINT64; 78 } 79 DataIndex GetDataIndex(std::string_view str); 80 DataIndex GetConstDataIndex(std::string_view str) const; 81 std::map<uint64_t, std::string> statusString_ = {{TASK_RUNNABLE, "R"}, 82 {TASK_INTERRUPTIBLE, "S"}, 83 {TASK_UNINTERRUPTIBLE, "D"}, 84 {TASK_UNINTERRUPTIBLE_IO, "D-IO"}, 85 {TASK_UNINTERRUPTIBLE_NIO, "D-NIO"}, 86 {TASK_RUNNING, "Running"}, 87 {TASK_STOPPED, "T"}, 88 {TASK_TRACED, "t"}, 89 {TASK_EXIT_DEAD, "X"}, 90 {TASK_ZOMBIE, "Z"}, 91 {TASK_PARKED, "P"}, 92 {TASK_DEAD, "I"}, 93 {TASK_DK, "DK"}, 94 {TASK_DK_IO, "DK-IO"}, 95 {TASK_DK_NIO, "DK-NIO"}, 96 {TASK_TRACED_KILL, "TK"}, 97 {TASK_WAKEKILL, "R+"}, 98 {TASK_NEW, "R+"}, 99 {TASK_RUNNABLE_BINDER, "R-B"}, 100 {TASK_MAX, "S"}, 101 {TASK_INVALID, "U"}}; 102 std::map<std::string, uint64_t> threadStatus2Value_ = {}; 103 uint64_t traceStartTime_ = std::numeric_limits<uint64_t>::max(); 104 uint64_t traceEndTime_ = 0; 105 #ifdef IS_WASM 106 bool supportThread_ = false; 107 #else 108 bool supportThread_ = true; 109 #endif 110 uint8_t parserThreadNum_ = 4; 111 std::atomic<bool> isSplitFile_{false}; 112 113 Raw rawData_; 114 ThreadStateData threadStateData_; 115 Instants instantsData_; 116 117 Filter filterData_; 118 ProcessMeasureFilter processMeasureFilterData_; 119 ClockEventData clockEventFilterData_; 120 ClkEventData clkEventFilterData_; 121 DataDict dataDict_; 122 123 SchedSlice schedSliceData_; 124 CallStack callstackData_; 125 CallStack irqData_; 126 LogInfo hilogData_; 127 NativeHook nativeHookData_; 128 NativeHookFrame nativeHookFrameData_; 129 NativeHookStatistic nativeHookStatisticData_; 130 Hidump hidumpData_; 131 PerfSample perfSample_; 132 PerfCallChain perfCallChain_; 133 PerfThread perfThread_; 134 PerfFiles perfFiles_; 135 PerfReport perfReport_; 136 PerfNapiAsync perfNapiAsync_; 137 138 std::deque<Process> internalProcessesData_ = {}; 139 std::deque<Thread> internalThreadsData_ = {}; 140 141 Measure measureData_; 142 Measure sysMemMeasureData_; 143 Measure processMeasureData_; 144 CpuMeasureFilter cpuMeasureData_; 145 146 StatAndInfo stat_; 147 MetaData metaData_; 148 SymbolsData symbolsData_; 149 SysCall sysCallData_; 150 ArgSet argSet_; 151 DataType dataType_; 152 SysMeasureFilter sysEvent_; 153 NetDetailData networkData_; 154 NetDetailData networkDetailData_; 155 CpuUsageDetailData cpuUsageData_; 156 DiskIOData diskIOData_; 157 LiveProcessDetailData liveProcessDetailData_; 158 FileSystemSample fileSamplingTableData_; 159 EbpfCallStackData ebpfCallStackData_; 160 PagedMemorySampleData pagedMemorySampleData_; 161 HiSysEventSubkeys sysEventNameIds_; 162 HiSysEventMeasureData sysEventMeasureData_; 163 HiSysEventDeviceStateData deviceStateData_; 164 TraceConfig traceConfigData_; 165 HiSysEventAllEventData hiSysEventAllEventData_; 166 SmapsData smapsData_; 167 BioLatencySampleData bioLatencySampleData_; 168 ClockSnapshotData clockSnapshotData_; 169 DataSourceClockIdData dataSourceClockIdData_; 170 FrameSlice frameSliceData_; 171 FrameMaps frameMapsData_; 172 GPUSlice gpuSliceData_; 173 DmaFence dmaFenceData_; 174 TaskPoolInfo taskPoolInfo_; 175 JsHeapFiles jsHeapFilesData_; 176 JsHeapEdges jsHeapEdgesData_; 177 JsHeapInfo jsHeapInfoData_; 178 JsHeapLocation jsHeapLocationData_; 179 JsHeapNodes jsHeapNodesData_; 180 JsHeapSample jsHeapSampleData_; 181 JsHeapString jsHeapStringData_; 182 JsHeapTraceFuncInfo jsHeapTraceFuncInfoData_; 183 JsHeapTraceNode jsHeapTraceNodeData_; 184 JsCpuProfilerNode jsCpuProfilerNodeData_; 185 JsCpuProfilerSample jsCpuProfilerSampleData_; 186 JsConfig jsConfigData_; 187 AppStartup appStartupData_; 188 SoStaticInitalization soStaticInitalizationData_; 189 Animation animation_; 190 DeviceInfo deviceInfo_; 191 DynamicFrame dynamicFrame_; 192 AshMemData ashMemData_; 193 DmaMemData dmaMemData_; 194 GpuProcessMemData gpuProcessMemData_; 195 GpuWindowMemData gpuWindowMemData_; 196 CpuDumpInfo cpuDumpInfo_; 197 ProfileMemInfo profileMemInfo_; 198 RSImageDumpInfo rsImageDumpInfo_; 199 }; 200 } // namespace TraceStreamer 201 } // namespace SysTuning 202 203 #endif // TRACE_DATA_CACHE_BASE_H 204