• 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