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