• 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 
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