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