• 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  }
GetArgSetData()226  ArgSet *TraceDataCacheWriter::GetArgSetData()
227  {
228      return &argSet_;
229  }
230  
GetDataTypeData()231  DataType *TraceDataCacheWriter::GetDataTypeData()
232  {
233      return &dataType_;
234  }
235  
GetSysMeasureFilterData()236  SysMeasureFilter *TraceDataCacheWriter::GetSysMeasureFilterData()
237  {
238      return &sysEvent_;
239  }
GetNetworkData()240  NetDetailData *TraceDataCacheWriter::GetNetworkData()
241  {
242      return &networkData_;
243  }
GetDiskIOData()244  DiskIOData *TraceDataCacheWriter::GetDiskIOData()
245  {
246      return &diskIOData_;
247  }
248  
GetCpuUsageInfoData()249  CpuUsageDetailData *TraceDataCacheWriter::GetCpuUsageInfoData()
250  {
251      return &cpuUsageData_;
252  }
GetLiveProcessData()253  LiveProcessDetailData *TraceDataCacheWriter::GetLiveProcessData()
254  {
255      return &liveProcessDetailData_;
256  }
GetFileSystemSample()257  FileSystemSample *TraceDataCacheWriter::GetFileSystemSample()
258  {
259      return &fileSamplingTableData_;
260  }
GetEbpfCallStack()261  EbpfCallStackData *TraceDataCacheWriter::GetEbpfCallStack()
262  {
263      return &ebpfCallStackData_;
264  }
GetPagedMemorySampleData()265  PagedMemorySampleData *TraceDataCacheWriter::GetPagedMemorySampleData()
266  {
267      return &pagedMemorySampleData_;
268  }
GetHiSysEventSubkeysData()269  HiSysEventSubkeys *TraceDataCacheWriter::GetHiSysEventSubkeysData()
270  {
271      return &sysEventNameIds_;
272  }
GetHiSysEventMeasureData()273  HiSysEventMeasureData *TraceDataCacheWriter::GetHiSysEventMeasureData()
274  {
275      return &sysEventMeasureData_;
276  }
GetHiSysEventDeviceStateData()277  HiSysEventDeviceStateData *TraceDataCacheWriter::GetHiSysEventDeviceStateData()
278  {
279      return &deviceStateData_;
280  }
GetTraceConfigData()281  TraceConfig *TraceDataCacheWriter::GetTraceConfigData()
282  {
283      return &traceConfigData_;
284  }
GetHiSysEventAllEventData()285  HiSysEventAllEventData *TraceDataCacheWriter::GetHiSysEventAllEventData()
286  {
287      return &hiSysEventAllEventData_;
288  }
GetSmapsData()289  SmapsData *TraceDataCacheWriter::GetSmapsData()
290  {
291      return &smapsData_;
292  }
GetBioLatencySampleData()293  BioLatencySampleData *TraceDataCacheWriter::GetBioLatencySampleData()
294  {
295      return &bioLatencySampleData_;
296  }
297  
GetClockSnapshotData()298  ClockSnapshotData *TraceDataCacheWriter::GetClockSnapshotData()
299  {
300      return &clockSnapshotData_;
301  }
GetDataSourceClockIdData()302  DataSourceClockIdData *TraceDataCacheWriter::GetDataSourceClockIdData()
303  {
304      return &dataSourceClockIdData_;
305  }
GetFrameSliceData()306  FrameSlice *TraceDataCacheWriter::GetFrameSliceData()
307  {
308      return &frameSliceData_;
309  }
GetFrameMapsData()310  FrameMaps *TraceDataCacheWriter::GetFrameMapsData()
311  {
312      return &frameMapsData_;
313  }
314  
GetGPUSliceData()315  GPUSlice *TraceDataCacheWriter::GetGPUSliceData()
316  {
317      return &gpuSliceData_;
318  }
GetTaskPoolData()319  TaskPoolInfo *TraceDataCacheWriter::GetTaskPoolData()
320  {
321      return &taskPoolInfo_;
322  }
GetJsHeapFilesData()323  JsHeapFiles *TraceDataCacheWriter::GetJsHeapFilesData()
324  {
325      return &jsHeapFilesData_;
326  }
GetJsHeapEdgesData()327  JsHeapEdges *TraceDataCacheWriter::GetJsHeapEdgesData()
328  {
329      return &jsHeapEdgesData_;
330  }
GetJsHeapInfoData()331  JsHeapInfo *TraceDataCacheWriter::GetJsHeapInfoData()
332  {
333      return &jsHeapInfoData_;
334  }
GetJsHeapLocationData()335  JsHeapLocation *TraceDataCacheWriter::GetJsHeapLocationData()
336  {
337      return &jsHeapLocationData_;
338  }
GetJsHeapNodesData()339  JsHeapNodes *TraceDataCacheWriter::GetJsHeapNodesData()
340  {
341      return &jsHeapNodesData_;
342  }
GetJsHeapSampleData()343  JsHeapSample *TraceDataCacheWriter::GetJsHeapSampleData()
344  {
345      return &jsHeapSampleData_;
346  }
GetJsHeapStringData()347  JsHeapString *TraceDataCacheWriter::GetJsHeapStringData()
348  {
349      return &jsHeapStringData_;
350  }
GetJsHeapTraceFuncInfoData()351  JsHeapTraceFuncInfo *TraceDataCacheWriter::GetJsHeapTraceFuncInfoData()
352  {
353      return &jsHeapTraceFuncInfoData_;
354  }
GetJsHeapTraceNodeData()355  JsHeapTraceNode *TraceDataCacheWriter::GetJsHeapTraceNodeData()
356  {
357      return &jsHeapTraceNodeData_;
358  }
GetJsCpuProfilerNodeData()359  JsCpuProfilerNode *TraceDataCacheWriter::GetJsCpuProfilerNodeData()
360  {
361      return &jsCpuProfilerNodeData_;
362  }
GetJsCpuProfilerSampleData()363  JsCpuProfilerSample *TraceDataCacheWriter::GetJsCpuProfilerSampleData()
364  {
365      return &jsCpuProfilerSampleData_;
366  }
GetJsConfigData()367  JsConfig *TraceDataCacheWriter::GetJsConfigData()
368  {
369      return &jsConfigData_;
370  }
GetAppStartupData()371  AppStartup *TraceDataCacheWriter::GetAppStartupData()
372  {
373      return &appStartupData_;
374  }
GetSoStaticInitalizationData()375  SoStaticInitalization *TraceDataCacheWriter::GetSoStaticInitalizationData()
376  {
377      return &soStaticInitalizationData_;
378  }
GetAnimation()379  Animation *TraceDataCacheWriter::GetAnimation()
380  {
381      return &animation_;
382  }
GetDeviceInfo()383  DeviceInfo *TraceDataCacheWriter::GetDeviceInfo()
384  {
385      return &deviceInfo_;
386  }
GetDynamicFrame()387  DynamicFrame *TraceDataCacheWriter::GetDynamicFrame()
388  {
389      return &dynamicFrame_;
390  }
GetAshMemData()391  AshMemData *TraceDataCacheWriter::GetAshMemData()
392  {
393      return &ashMemData_;
394  }
GetDmaMemData()395  DmaMemData *TraceDataCacheWriter::GetDmaMemData()
396  {
397      return &dmaMemData_;
398  }
GetGpuProcessMemData()399  GpuProcessMemData *TraceDataCacheWriter::GetGpuProcessMemData()
400  {
401      return &gpuProcessMemData_;
402  }
GetGpuWindowMemData()403  GpuWindowMemData *TraceDataCacheWriter::GetGpuWindowMemData()
404  {
405      return &gpuWindowMemData_;
406  }
GetCpuDumpInfo()407  CpuDumpInfo *TraceDataCacheWriter::GetCpuDumpInfo()
408  {
409      return &cpuDumpInfo_;
410  }
GetProfileMemInfo()411  ProfileMemInfo *TraceDataCacheWriter::GetProfileMemInfo()
412  {
413      return &profileMemInfo_;
414  }
GetRSImageDumpInfo()415  RSImageDumpInfo *TraceDataCacheWriter::GetRSImageDumpInfo()
416  {
417      return &rsImageDumpInfo_;
418  }
ClearMeasure()419  void TraceDataCacheWriter::ClearMeasure()
420  {
421      filterData_.Clear();
422      measureData_.Clear();
423      cpuMeasureData_.Clear();
424      clockEventFilterData_.Clear();
425      clkEventFilterData_.Clear();
426      processMeasureFilterData_.Clear();
427  }
ClearHiperf()428  void TraceDataCacheWriter::ClearHiperf()
429  {
430      perfSample_.Clear();
431      perfCallChain_.Clear();
432      perfThread_.Clear();
433      perfFiles_.Clear();
434      perfReport_.Clear();
435  }
ClearArkTs()436  void TraceDataCacheWriter::ClearArkTs()
437  {
438      jsHeapFilesData_.Clear();
439      jsHeapEdgesData_.Clear();
440      jsHeapInfoData_.Clear();
441      jsHeapLocationData_.Clear();
442      jsHeapNodesData_.Clear();
443      jsHeapSampleData_.Clear();
444      jsHeapStringData_.Clear();
445      jsHeapTraceFuncInfoData_.Clear();
446      jsHeapTraceNodeData_.Clear();
447      jsCpuProfilerNodeData_.Clear();
448      jsCpuProfilerSampleData_.Clear();
449      jsConfigData_.Clear();
450  }
ClearNativeMemory()451  void TraceDataCacheWriter::ClearNativeMemory()
452  {
453      nativeHookData_.Clear();
454      nativeHookFrameData_.Clear();
455  }
ClearBase()456  void TraceDataCacheWriter::ClearBase()
457  {
458      internalProcessesData_.clear();
459      internalThreadsData_.clear();
460      metaData_.Clear();
461      symbolsData_.Clear();
462      argSet_.Clear();
463      dataType_.Clear();
464      dataDict_.Clear();
465  }
ClearEbpf()466  void TraceDataCacheWriter::ClearEbpf()
467  {
468      fileSamplingTableData_.Clear();
469      ebpfCallStackData_.Clear();
470      pagedMemorySampleData_.Clear();
471      bioLatencySampleData_.Clear();
472  }
ClearTemplate()473  void TraceDataCacheWriter::ClearTemplate()
474  {
475      // task pool business
476      taskPoolInfo_.Clear();
477      // app start up business
478      appStartupData_.Clear();
479      soStaticInitalizationData_.Clear();
480      // animation business
481      animation_.Clear();
482      deviceInfo_.Clear();
483      dynamicFrame_.Clear();
484  }
Clear()485  void TraceDataCacheWriter::Clear()
486  {
487      ClearBase();
488      ClearMeasure();
489      ClearHiperf();
490      ClearArkTs();
491      ClearNativeMemory();
492      ClearEbpf();
493      ClearTemplate();
494      rawData_.Clear();
495      threadStateData_.Clear();
496      instantsData_.Clear();
497      schedSliceData_.Clear();
498      callstackData_.Clear();
499      irqData_.Clear();
500      hilogData_.Clear();
501      hidumpData_.Clear();
502      sysCallData_.Clear();
503      sysEvent_.Clear();
504      networkData_.Clear();
505      networkDetailData_.Clear();
506      cpuUsageData_.Clear();
507      diskIOData_.Clear();
508      liveProcessDetailData_.Clear();
509      sysEventNameIds_.Clear();
510      sysEventMeasureData_.Clear();
511      deviceStateData_.Clear();
512      smapsData_.Clear();
513      ashMemData_.Clear();
514      dmaMemData_.Clear();
515      gpuProcessMemData_.Clear();
516      gpuWindowMemData_.Clear();
517      gpuSliceData_.Clear();
518      frameMapsData_.Clear();
519      frameSliceData_.Clear();
520  }
521  } // namespace TraceStreamer
522  } // namespace SysTuning
523