• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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