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