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