• 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 #include "trace_data_cache_writer.h"
17 #include "log.h"
18 namespace SysTuning {
19 namespace TraceStreamer {
20 using namespace TraceStdtype;
~TraceDataCacheWriter()21 TraceDataCacheWriter::~TraceDataCacheWriter() {}
GetProcessInternalPid(uint32_t pid)22 InternalPid TraceDataCacheWriter::GetProcessInternalPid(uint32_t pid)
23 {
24     internalProcessesData_.emplace_back(pid);
25     return static_cast<InternalPid>(internalProcessesData_.size() - 1);
26 }
GetProcessData(InternalPid internalPid)27 Process* TraceDataCacheWriter::GetProcessData(InternalPid internalPid)
28 {
29     TS_ASSERT(internalPid < internalProcessesData_.size());
30     return &internalProcessesData_[internalPid];
31 }
32 
AppendNewProcessData(uint32_t pid,const std::string & name,uint64_t startTs)33 uint32_t TraceDataCacheWriter::AppendNewProcessData(uint32_t pid, const std::string& name, uint64_t startTs)
34 {
35     internalProcessesData_.emplace_back(pid);
36     auto& process = internalProcessesData_.back();
37     process.cmdLine_ = name;
38     process.startT_ = startTs;
39     return internalProcessesData_.size() - 1;
40 }
41 
NewInternalThread(uint32_t tid)42 InternalTid TraceDataCacheWriter::NewInternalThread(uint32_t tid)
43 {
44     internalThreadsData_.emplace_back(tid);
45     return static_cast<InternalTid>(internalThreadsData_.size() - 1);
46 }
GetThreadData(InternalTid internalTid)47 Thread* TraceDataCacheWriter::GetThreadData(InternalTid internalTid)
48 {
49     if (internalTid >= internalThreadsData_.size()) {
50         return nullptr;
51     }
52     return &internalThreadsData_[internalTid];
53 }
54 
UpdateTraceTime(uint64_t timeStamp)55 void TraceDataCacheWriter::UpdateTraceTime(uint64_t timeStamp)
56 {
57     if (timeStamp) {
58         traceStartTime_ = std::min(traceStartTime_, timeStamp);
59         traceEndTime_ = std::max(traceEndTime_, timeStamp);
60     }
61 }
62 
MixTraceTime(uint64_t timestampMin,uint64_t timestampMax)63 void TraceDataCacheWriter::MixTraceTime(uint64_t timestampMin, uint64_t timestampMax)
64 {
65     if (timestampMin == std::numeric_limits<uint64_t>::max() || timestampMax == 0 || timestampMin == timestampMax) {
66         return;
67     }
68     if ((timestampMax < traceStartTime_ || timestampMin > traceEndTime_) &&
69         (traceStartTime_ != std::numeric_limits<uint64_t>::max() && traceEndTime_ != 0)) {
70         return;
71     }
72     if ((timestampMin == timestampMax - 1) && traceStartTime_ != std::numeric_limits<uint64_t>::max() &&
73         traceEndTime_) {
74         return;
75     }
76     if (traceStartTime_ != std::numeric_limits<uint64_t>::max()) {
77         traceStartTime_ = std::max(traceStartTime_, timestampMin);
78     } else {
79         traceStartTime_ = timestampMin;
80     }
81     if (traceEndTime_) {
82         traceEndTime_ = std::min(traceEndTime_, timestampMax);
83     } else {
84         traceEndTime_ = timestampMax;
85     }
86 }
GetInternalSlicesData()87 CallStack* TraceDataCacheWriter::GetInternalSlicesData()
88 {
89     return &callstackData_;
90 }
GetIrqData()91 CallStack* TraceDataCacheWriter::GetIrqData()
92 {
93     return &irqData_;
94 }
95 
GetFilterData()96 Filter* TraceDataCacheWriter::GetFilterData()
97 {
98     return &filterData_;
99 }
100 
GetRawData()101 Raw* TraceDataCacheWriter::GetRawData()
102 {
103     return &rawData_;
104 }
105 
GetMeasureData()106 Measure* TraceDataCacheWriter::GetMeasureData()
107 {
108     return &measureData_;
109 }
110 
GetSysMemMeasureData()111 Measure* TraceDataCacheWriter::GetSysMemMeasureData()
112 {
113     return &sysMemMeasureData_;
114 }
GetProcessMeasureData()115 Measure* TraceDataCacheWriter::GetProcessMeasureData()
116 {
117     return &processMeasureData_;
118 }
119 
GetThreadStateData()120 ThreadStateData* TraceDataCacheWriter::GetThreadStateData()
121 {
122     return &threadStateData_;
123 }
124 
GetSchedSliceData()125 SchedSlice* TraceDataCacheWriter::GetSchedSliceData()
126 {
127     return &schedSliceData_;
128 }
129 
GetCpuMeasuresData()130 CpuMeasureFilter* TraceDataCacheWriter::GetCpuMeasuresData()
131 {
132     return &cpuMeasureData_;
133 }
134 
GetThreadMeasureFilterData()135 ThreadMeasureFilter* TraceDataCacheWriter::GetThreadMeasureFilterData()
136 {
137     return &threadMeasureFilterData_;
138 }
139 
GetThreadFilterData()140 ThreadMeasureFilter* TraceDataCacheWriter::GetThreadFilterData()
141 {
142     return &threadFilterData_;
143 }
144 
GetInstantsData()145 Instants* TraceDataCacheWriter::GetInstantsData()
146 {
147     return &instantsData_;
148 }
149 
GetProcessFilterData()150 ProcessMeasureFilter* TraceDataCacheWriter::GetProcessFilterData()
151 {
152     return &processFilterData_;
153 }
154 
GetProcessMeasureFilterData()155 ProcessMeasureFilter* TraceDataCacheWriter::GetProcessMeasureFilterData()
156 {
157     return &processMeasureFilterData_;
158 }
159 
GetClockEventFilterData()160 ClockEventData* TraceDataCacheWriter::GetClockEventFilterData()
161 {
162     return &clockEventFilterData_;
163 }
164 
GetClkEventFilterData()165 ClkEventData* TraceDataCacheWriter::GetClkEventFilterData()
166 {
167     return &clkEventFilterData_;
168 }
GetStatAndInfo()169 StatAndInfo* TraceDataCacheWriter::GetStatAndInfo()
170 {
171     return &stat_;
172 }
173 
GetMetaData()174 MetaData* TraceDataCacheWriter::GetMetaData()
175 {
176     return &metaData_;
177 }
178 
GetSymbolsData()179 SymbolsData* TraceDataCacheWriter::GetSymbolsData()
180 {
181     return &symbolsData_;
182 }
GetSysCallData()183 SysCall* TraceDataCacheWriter::GetSysCallData()
184 {
185     return &sysCallData_;
186 }
GetHilogData()187 LogInfo* TraceDataCacheWriter::GetHilogData()
188 {
189     return &hilogData_;
190 }
191 
GetNativeHookData()192 NativeHook* TraceDataCacheWriter::GetNativeHookData()
193 {
194     return &nativeHookData_;
195 }
196 
GetNativeHookFrameData()197 NativeHookFrame* TraceDataCacheWriter::GetNativeHookFrameData()
198 {
199     return &nativeHookFrameData_;
200 }
201 
GetNativeHookStatisticsData()202 NativeHookStatistic* TraceDataCacheWriter::GetNativeHookStatisticsData()
203 {
204     return &nativeHookStatisticData_;
205 }
GetHidumpData()206 Hidump* TraceDataCacheWriter::GetHidumpData()
207 {
208     return &hidumpData_;
209 }
GetPerfCallChainData()210 PerfCallChain* TraceDataCacheWriter::GetPerfCallChainData()
211 {
212     return &perfCallChain_;
213 }
GetPerfFilesData()214 PerfFiles* TraceDataCacheWriter::GetPerfFilesData()
215 {
216     return &perfFiles_;
217 }
GetPerfSampleData()218 PerfSample* TraceDataCacheWriter::GetPerfSampleData()
219 {
220     return &perfSample_;
221 }
GetPerfThreadData()222 PerfThread* TraceDataCacheWriter::GetPerfThreadData()
223 {
224     return &perfThread_;
225 }
GetPerfReportData()226 PerfReport* TraceDataCacheWriter::GetPerfReportData()
227 {
228     return &perfReport_;
229 }
GetArgSetData()230 ArgSet* TraceDataCacheWriter::GetArgSetData()
231 {
232     return &argSet_;
233 }
234 
GetDataTypeData()235 DataType* TraceDataCacheWriter::GetDataTypeData()
236 {
237     return &dataType_;
238 }
239 
GetSysMeasureFilterData()240 SysMeasureFilter* TraceDataCacheWriter::GetSysMeasureFilterData()
241 {
242     return &sysEvent_;
243 }
GetNetworkData()244 NetDetailData* TraceDataCacheWriter::GetNetworkData()
245 {
246     return &networkData_;
247 }
GetNetworkDetailData()248 NetDetailData* TraceDataCacheWriter::GetNetworkDetailData()
249 {
250     return &networkDetailData_;
251 }
GetDiskIOData()252 DiskIOData* TraceDataCacheWriter::GetDiskIOData()
253 {
254     return &diskIOData_;
255 }
256 
GetCpuUsageInfoData()257 CpuUsageDetailData* TraceDataCacheWriter::GetCpuUsageInfoData()
258 {
259     return &cpuUsageData_;
260 }
GetLiveProcessData()261 LiveProcessDetailData* TraceDataCacheWriter::GetLiveProcessData()
262 {
263     return &liveProcessDetailData_;
264 }
GetFileSystemSample()265 FileSystemSample* TraceDataCacheWriter::GetFileSystemSample()
266 {
267     return &fileSamplingTableData_;
268 }
GetEbpfCallStack()269 EbpfCallStackData* TraceDataCacheWriter::GetEbpfCallStack()
270 {
271     return &ebpfCallStackData_;
272 }
GetPagedMemorySampleData()273 PagedMemorySampleData* TraceDataCacheWriter::GetPagedMemorySampleData()
274 {
275     return &PagedMemorySampleData_;
276 }
277 #if WITH_EBPF_HELP
GetEbpfProcessMaps()278 EbpfProcessMaps* TraceDataCacheWriter::GetEbpfProcessMaps()
279 {
280     return &ebpfProcessMaps_;
281 }
GetEbpfElf()282 EbpfElf* TraceDataCacheWriter::GetEbpfElf()
283 {
284     return &ebpfElf_;
285 }
GetEbpfElfSymbol()286 EbpfElfSymbol* TraceDataCacheWriter::GetEbpfElfSymbol()
287 {
288     return &ebpfElfSymbol_;
289 }
290 #endif
GetAppNamesData()291 AppNames* TraceDataCacheWriter::GetAppNamesData()
292 {
293     return &appNames_;
294 }
GetSyseventMeasureData()295 SysEventMeasureData* TraceDataCacheWriter::GetSyseventMeasureData()
296 {
297     return &sysEventMeasureData_;
298 }
GetDeviceStateData()299 DeviceStateData* TraceDataCacheWriter::GetDeviceStateData()
300 {
301     return &deviceStateData_;
302 }
GetTraceConfigData()303 TraceConfigData* TraceDataCacheWriter::GetTraceConfigData()
304 {
305     return &traceConfigData_;
306 }
GetSmapsData()307 SmapsData* TraceDataCacheWriter::GetSmapsData()
308 {
309     return &smapsData_;
310 }
GetBioLatencySampleData()311 BioLatencySampleData* TraceDataCacheWriter::GetBioLatencySampleData()
312 {
313     return &bioLatencySampleData_;
314 }
315 
GetClockSnapshotData()316 ClockSnapshotData* TraceDataCacheWriter::GetClockSnapshotData()
317 {
318     return &clockSnapshotData_;
319 }
GetDataSourceClockIdData()320 DataSourceClockIdData* TraceDataCacheWriter::GetDataSourceClockIdData()
321 {
322     return &dataSourceClockIdData_;
323 }
GetFrameSliceData()324 FrameSlice* TraceDataCacheWriter::GetFrameSliceData()
325 {
326     return &frameSliceData_;
327 }
GetFrameMapsData()328 FrameMaps* TraceDataCacheWriter::GetFrameMapsData()
329 {
330     return &frameMapsData_;
331 }
332 
GetGPUSliceData()333 GPUSlice* TraceDataCacheWriter::GetGPUSliceData()
334 {
335     return &gpuSliceData_;
336 }
GetTaskPoolData()337 TaskPoolInfo* TraceDataCacheWriter::GetTaskPoolData()
338 {
339     return &taskPoolInfo_;
340 }
GetJsHeapFilesData()341 JsHeapFiles* TraceDataCacheWriter::GetJsHeapFilesData()
342 {
343     return &jsHeapFilesData_;
344 }
GetJsHeapEdgesData()345 JsHeapEdges* TraceDataCacheWriter::GetJsHeapEdgesData()
346 {
347     return &jsHeapEdgesData_;
348 }
GetJsHeapInfoData()349 JsHeapInfo* TraceDataCacheWriter::GetJsHeapInfoData()
350 {
351     return &jsHeapInfoData_;
352 }
GetJsHeapLocationData()353 JsHeapLocation* TraceDataCacheWriter::GetJsHeapLocationData()
354 {
355     return &jsHeapLocationData_;
356 }
GetJsHeapNodesData()357 JsHeapNodes* TraceDataCacheWriter::GetJsHeapNodesData()
358 {
359     return &jsHeapNodesData_;
360 }
GetJsHeapSampleData()361 JsHeapSample* TraceDataCacheWriter::GetJsHeapSampleData()
362 {
363     return &jsHeapSampleData_;
364 }
GetJsHeapStringData()365 JsHeapString* TraceDataCacheWriter::GetJsHeapStringData()
366 {
367     return &jsHeapStringData_;
368 }
GetJsHeapTraceFuncInfoData()369 JsHeapTraceFuncInfo* TraceDataCacheWriter::GetJsHeapTraceFuncInfoData()
370 {
371     return &jsHeapTraceFuncInfoData_;
372 }
GetJsHeapTraceNodeData()373 JsHeapTraceNode* TraceDataCacheWriter::GetJsHeapTraceNodeData()
374 {
375     return &jsHeapTraceNodeData_;
376 }
GetJsCpuProfilerNodeData()377 JsCpuProfilerNode* TraceDataCacheWriter::GetJsCpuProfilerNodeData()
378 {
379     return &jsCpuProfilerNodeData_;
380 }
GetJsCpuProfilerSampleData()381 JsCpuProfilerSample* TraceDataCacheWriter::GetJsCpuProfilerSampleData()
382 {
383     return &jsCpuProfilerSampleData_;
384 }
GetJsConfigData()385 JsConfig* TraceDataCacheWriter::GetJsConfigData()
386 {
387     return &jsConfigData_;
388 }
GetAppStartupData()389 AppStartup* TraceDataCacheWriter::GetAppStartupData()
390 {
391     return &appStartupData_;
392 }
GetStaticInitalizationData()393 SoStaticInitalization* TraceDataCacheWriter::GetStaticInitalizationData()
394 {
395     return &staticInitalizationData_;
396 }
GetAnimation()397 Animation* TraceDataCacheWriter::GetAnimation()
398 {
399     return &animation_;
400 }
GetDeviceInfo()401 DeviceInfo* TraceDataCacheWriter::GetDeviceInfo()
402 {
403     return &deviceInfo_;
404 }
GetDynamicFrame()405 DynamicFrame* TraceDataCacheWriter::GetDynamicFrame()
406 {
407     return &dynamicFrame_;
408 }
GetAshMemData()409 AshMemData* TraceDataCacheWriter::GetAshMemData()
410 {
411     return &ashMemData_;
412 }
GetDmaMemData()413 DmaMemData* TraceDataCacheWriter::GetDmaMemData()
414 {
415     return &dmaMemData_;
416 }
GetGpuProcessMemData()417 GpuProcessMemData* TraceDataCacheWriter::GetGpuProcessMemData()
418 {
419     return &gpuProcessMemData_;
420 }
GetGpuWindowMemData()421 GpuWindowMemData* TraceDataCacheWriter::GetGpuWindowMemData()
422 {
423     return &gpuWindowMemData_;
424 }
425 
Clear()426 void TraceDataCacheWriter::Clear()
427 {
428     rawData_.Clear();
429     threadStateData_.Clear();
430     instantsData_.Clear();
431 
432     filterData_.Clear();
433     processMeasureFilterData_.Clear();
434     clockEventFilterData_.Clear();
435     clkEventFilterData_.Clear();
436     processFilterData_.Clear();
437     threadMeasureFilterData_.Clear();
438     threadFilterData_.Clear();
439     dataDict_.Clear();
440 
441     schedSliceData_.Clear();
442     callstackData_.Clear();
443     irqData_.Clear();
444     hilogData_.Clear();
445     nativeHookData_.Clear();
446     nativeHookFrameData_.Clear();
447     hidumpData_.Clear();
448 
449     internalProcessesData_.clear();
450     internalThreadsData_.clear();
451 
452     measureData_.Clear();
453     cpuMeasureData_.Clear();
454 
455     metaData_.Clear();
456     symbolsData_.Clear();
457     sysCallData_.Clear();
458     argSet_.Clear();
459     dataType_.Clear();
460     sysEvent_.Clear();
461     networkData_.Clear();
462     networkDetailData_.Clear();
463     perfSample_.Clear();
464     perfCallChain_.Clear();
465     perfThread_.Clear();
466     perfFiles_.Clear();
467     perfReport_.Clear();
468     cpuUsageData_.Clear();
469     diskIOData_.Clear();
470     liveProcessDetailData_.Clear();
471     fileSamplingTableData_.Clear();
472     ebpfCallStackData_.Clear();
473     PagedMemorySampleData_.Clear();
474     jsHeapFilesData_.Clear();
475     jsHeapEdgesData_.Clear();
476     jsHeapInfoData_.Clear();
477     jsHeapLocationData_.Clear();
478     jsHeapNodesData_.Clear();
479     jsHeapSampleData_.Clear();
480     jsHeapStringData_.Clear();
481     jsHeapTraceFuncInfoData_.Clear();
482     jsHeapTraceNodeData_.Clear();
483     jsCpuProfilerNodeData_.Clear();
484     jsCpuProfilerSampleData_.Clear();
485     jsConfigData_.Clear();
486     appStartupData_.Clear();
487     staticInitalizationData_.Clear();
488     animation_.Clear();
489     deviceInfo_.Clear();
490     dynamicFrame_.Clear();
491 
492 #if WITH_EBPF_HELP
493     ebpfProcessMaps_.Clear();
494     ebpfElf_.Clear();
495     ebpfElfSymbol_.Clear();
496 #endif
497     appNames_.Clear();
498     sysEventMeasureData_.Clear();
499     deviceStateData_.Clear();
500     smapsData_.Clear();
501     bioLatencySampleData_.Clear();
502     taskPoolInfo_.Clear();
503     ashMemData_.Clear();
504     dmaMemData_.Clear();
505     gpuProcessMemData_.Clear();
506     gpuWindowMemData_.Clear();
507 }
508 } // namespace TraceStreamer
509 } // namespace SysTuning
510