From 8b2df44b9737c758d729c7c8195dc8d54df5a783 Mon Sep 17 00:00:00 2001 From: Zhangzhuozhou Date: Tue, 2 Jul 2024 11:06:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20dma=5Ffence=20timeline=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E4=B8=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zhangzhuozhou --- .../htrace_parser/htrace_event_parser.cpp | 40 +++++++++++++------ .../bytrace_parser/bytrace_event_parser.cpp | 4 ++ .../rawtrace_parser/cpu_detail_parser.cpp | 40 +++++++++++++------ 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/trace_streamer/src/parser/pbreader_parser/htrace_parser/htrace_event_parser.cpp b/trace_streamer/src/parser/pbreader_parser/htrace_parser/htrace_event_parser.cpp index ad373e46b..f62cda3bc 100644 --- a/trace_streamer/src/parser/pbreader_parser/htrace_parser/htrace_event_parser.cpp +++ b/trace_streamer/src/parser/pbreader_parser/htrace_parser/htrace_event_parser.cpp @@ -911,13 +911,17 @@ bool HtraceEventParser::DmaFenceInitEvent(const EventInfo &event) const { traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_INIT, STAT_EVENT_RECEIVED); ProtoReader::DmaFenceInitFormat_Reader msg(event.detail); + std::string timelineStr = msg.timeline().ToStdString(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.timeStamp, 0, dmaFenceInitName_, traceDataCache_->GetDataIndex(msg.driver().ToStdString()), - traceDataCache_->GetDataIndex(msg.timeline().ToStdString()), - static_cast(msg.context()), - static_cast(msg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + msg.context(), + msg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -925,13 +929,17 @@ bool HtraceEventParser::DmaFenceDestroyEvent(const EventInfo &event) const { traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_DESTROY, STAT_EVENT_RECEIVED); ProtoReader::DmaFenceDestroyFormat_Reader msg(event.detail); + std::string timelineStr = msg.timeline().ToStdString(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.timeStamp, 0, dmaFenceDestroyName_, traceDataCache_->GetDataIndex(msg.driver().ToStdString()), - traceDataCache_->GetDataIndex(msg.timeline().ToStdString()), - static_cast(msg.context()), - static_cast(msg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + msg.context(), + msg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -939,13 +947,17 @@ bool HtraceEventParser::DmaFenceEnableEvent(const EventInfo &event) const { traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_ENABLE, STAT_EVENT_RECEIVED); ProtoReader::DmaFenceEnableSignalFormat_Reader msg(event.detail); + std::string timelineStr = msg.timeline().ToStdString(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.timeStamp, 0, dmaFenceEnableName_, traceDataCache_->GetDataIndex(msg.driver().ToStdString()), - traceDataCache_->GetDataIndex(msg.timeline().ToStdString()), - static_cast(msg.context()), - static_cast(msg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + msg.context(), + msg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -953,13 +965,17 @@ bool HtraceEventParser::DmaFenceSignaledEvent(const EventInfo &event) const { traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_SIGNALED, STAT_EVENT_RECEIVED); ProtoReader::DmaFenceSignaledFormat_Reader msg(event.detail); + std::string timelineStr = msg.timeline().ToStdString(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.timeStamp, 0, dmaFenceSignaledName_, traceDataCache_->GetDataIndex(msg.driver().ToStdString()), - traceDataCache_->GetDataIndex(msg.timeline().ToStdString()), - static_cast(msg.context()), - static_cast(msg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + msg.context(), + msg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } diff --git a/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.cpp b/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.cpp index 1557e9fde..a59cd66e6 100644 --- a/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.cpp +++ b/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.cpp @@ -666,6 +666,10 @@ bool BytraceEventParser::DmaFenceEvent(const ArgsMap &args, const BytraceLine &l auto timelineStr = std::string_view(args.at("timeline")); auto context = base::StrToInt(args.at("context")); auto seqno = base::StrToInt(args.at("seqno")); + if (timelineStr.empty() || !(context.has_value()) || !(seqno.has_value())) { + TS_LOGD("Failed to dma fence event,timelineStr or context or seqno is empty"); + return false; + } DmaFenceRow dmaFenceRow = {line.ts, 0, traceDataCache_->GetDataIndex(line.eventName), diff --git a/trace_streamer/src/parser/rawtrace_parser/cpu_detail_parser.cpp b/trace_streamer/src/parser/rawtrace_parser/cpu_detail_parser.cpp index 9c0f3546a..527e7a428 100644 --- a/trace_streamer/src/parser/rawtrace_parser/cpu_detail_parser.cpp +++ b/trace_streamer/src/parser/rawtrace_parser/cpu_detail_parser.cpp @@ -606,13 +606,17 @@ bool CpuDetailParser::DmaFenceInitEvent(const RawTraceEventInfo &event) const { auto dmaFenceInitMsg = event.msgPtr->dma_fence_init_format(); traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_INIT, STAT_EVENT_RECEIVED); + std::string timelineStr = dmaFenceInitMsg.timeline(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.msgPtr->timestamp(), 0, dmaFenceInitIndex_, traceDataCache_->GetDataIndex(dmaFenceInitMsg.driver()), - traceDataCache_->GetDataIndex(dmaFenceInitMsg.timeline()), - static_cast(dmaFenceInitMsg.context()), - static_cast(dmaFenceInitMsg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + dmaFenceInitMsg.context(), + dmaFenceInitMsg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -620,13 +624,17 @@ bool CpuDetailParser::DmaFenceDestroyEvent(const RawTraceEventInfo &event) const { auto dmaFenceDestroyMsg = event.msgPtr->dma_fence_destroy_format(); traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_DESTROY, STAT_EVENT_RECEIVED); + std::string timelineStr = dmaFenceDestroyMsg.timeline(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.msgPtr->timestamp(), 0, dmaFenceDestroyIndex_, traceDataCache_->GetDataIndex(dmaFenceDestroyMsg.driver()), - traceDataCache_->GetDataIndex(dmaFenceDestroyMsg.timeline()), - static_cast(dmaFenceDestroyMsg.context()), - static_cast(dmaFenceDestroyMsg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + dmaFenceDestroyMsg.context(), + dmaFenceDestroyMsg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -634,13 +642,17 @@ bool CpuDetailParser::DmaFenceEnableEvent(const RawTraceEventInfo &event) const { auto dmaFenceEnableMsg = event.msgPtr->dma_fence_enable_signal_format(); traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_ENABLE, STAT_EVENT_RECEIVED); + std::string timelineStr = dmaFenceEnableMsg.timeline(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.msgPtr->timestamp(), 0, dmaFenceEnableIndex_, traceDataCache_->GetDataIndex(dmaFenceEnableMsg.driver()), - traceDataCache_->GetDataIndex(dmaFenceEnableMsg.timeline()), - static_cast(dmaFenceEnableMsg.context()), - static_cast(dmaFenceEnableMsg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + dmaFenceEnableMsg.context(), + dmaFenceEnableMsg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } @@ -648,13 +660,17 @@ bool CpuDetailParser::DmaFenceSignaledEvent(const RawTraceEventInfo &event) cons { auto dmaFenceSignaledMsg = event.msgPtr->dma_fence_signaled_format(); traceDataCache_->GetStatAndInfo()->IncreaseStat(TRACE_EVENT_DMA_FENCE_SIGNALED, STAT_EVENT_RECEIVED); + std::string timelineStr = dmaFenceSignaledMsg.timeline(); + if (timelineStr.empty()) { + return false; + } DmaFenceRow dmaFenceRow = {event.msgPtr->timestamp(), 0, dmaFenceSignaledIndex_, traceDataCache_->GetDataIndex(dmaFenceSignaledMsg.driver()), - traceDataCache_->GetDataIndex(dmaFenceSignaledMsg.timeline()), - static_cast(dmaFenceSignaledMsg.context()), - static_cast(dmaFenceSignaledMsg.seqno())}; + traceDataCache_->GetDataIndex(timelineStr), + dmaFenceSignaledMsg.context(), + dmaFenceSignaledMsg.seqno()}; streamFilters_->sliceFilter_->DmaFence(dmaFenceRow); return true; } -- Gitee From 6675fea3c81dc2a0288c33f31ea8523c10450b44 Mon Sep 17 00:00:00 2001 From: Zhangzhuozhou Date: Tue, 2 Jul 2024 16:33:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20hilog=E8=A7=A3=E6=9E=90=E4=B8=8D?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=BF=9D=E5=AD=98=E8=BF=9B=E7=A8=8B=E3=80=81?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zhangzhuozhou --- .../pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp b/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp index 2ad88bebb..5116c38e0 100644 --- a/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp +++ b/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp @@ -48,7 +48,6 @@ void PbreaderHiLogParser::Parse(ProtoReader::BytesView tracePacket, bool &haveSp lastLineSeq_ = curLineSeq; auto logData = traceDataCache_->GetDataIndex(hilogLine.context().ToStdString()); ProtoReader::HilogDetails_Reader logDetails(hilogLine.detail()); - streamFilters_->processFilter_->GetOrCreateThreadWithPid(logDetails.tid(), logDetails.pid()); auto iter = logLevelString_.find(logDetails.level()); if (iter == logLevelString_.end()) { streamFilters_->statFilter_->IncreaseStat(TRACE_HILOG, STAT_EVENT_DATA_INVALID); -- Gitee From d62c7e4685efa19c2afeae13b88964443403ff3e Mon Sep 17 00:00:00 2001 From: Zhangzhuozhou Date: Tue, 2 Jul 2024 16:33:50 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E5=91=8A=E8=AD=A6=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zhangzhuozhou --- trace_streamer/build/protoc_w.py | 2 +- trace_streamer/src/main.cpp | 6 +-- .../bytrace_parser/bytrace_event_parser.h | 38 +++++++++---------- .../src/table/ftrace/sched_slice_table.cpp | 3 +- .../trace_streamer_selector.cpp | 5 +-- 5 files changed, 24 insertions(+), 30 deletions(-) diff --git a/trace_streamer/build/protoc_w.py b/trace_streamer/build/protoc_w.py index 3dd7b13a4..de4cfdcdb 100755 --- a/trace_streamer/build/protoc_w.py +++ b/trace_streamer/build/protoc_w.py @@ -49,7 +49,7 @@ PARAMS_ALL = f"{PARAMS_SRC}" if not sys.argv[4].startswith("--plugin"): if os.path.isfile(OPT_PLUGIN_PROTOREADER_PATH): - cmd=[PROTOC, OPT_PLUGIN_PROTOREADER, f"{PLUGINOUT}:{sys.argv[5]}", *PARAMS_ALL.split()] + cmd = [PROTOC, OPT_PLUGIN_PROTOREADER, f"{PLUGINOUT}:{sys.argv[5]}", *PARAMS_ALL.split()] print("执行参数:--------------- ", cmd, " --------------------------") subprocess.run(cmd) subprocess.run([PROTOC, *PARAMS_ALL.split()]) diff --git a/trace_streamer/src/main.cpp b/trace_streamer/src/main.cpp index e3708b970..c4a8cf391 100644 --- a/trace_streamer/src/main.cpp +++ b/trace_streamer/src/main.cpp @@ -41,6 +41,7 @@ constexpr size_t G_FILE_PERMISSION = 664; constexpr uint8_t RAW_TRACE_PARSE_MAX = 2; constexpr uint8_t PARSER_THREAD_MAX = 16; constexpr uint8_t PARSER_THREAD_MIN = 1; +std::regex traceInvalidStr("\\\\"); // set version info in meta.cpp please void ExportStatusToLog(const std::string &dbPath, TraceParserStatus status) { @@ -731,7 +732,6 @@ int main(int argc, char **argv) return 0; } #endif - std::regex traceInvalidStr("\\\\"); auto strEscape = std::regex_replace(traceExportOption.traceFilePath, traceInvalidStr, "\\\\\\\\"); if (OpenAndParserFile(ts, strEscape)) { if (!traceExportOption.sqliteFilePath.empty()) { @@ -756,9 +756,7 @@ int main(int argc, char **argv) ExportStatusToLog(traceExportOption.sqliteFilePath, GetAnalysisResult()); return 1; } - if (!traceExportOption.sqliteFilePath.empty()) { - ExportStatusToLog(traceExportOption.sqliteFilePath, GetAnalysisResult()); - } + ExportStatusToLog(traceExportOption.sqliteFilePath, GetAnalysisResult()); } if (!traceExportOption.metricsIndex.empty()) { MetaData *metaData = ts.GetMetaData(); diff --git a/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.h b/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.h index 9021d221f..8020006f2 100644 --- a/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.h +++ b/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.h @@ -87,25 +87,25 @@ private: void StackEventsInitialization(); std::map eventToFunctionMap_ = {}; - const uint32_t MIN_SCHED_SWITCH_ARGS_COUNT = 6; - const uint32_t MIN_BLOCKED_REASON_ARGS_COUNT = 3; - const uint32_t MIN_SCHED_WAKEUP_ARGS_COUNT = 2; - const uint32_t MIN_TASK_RENAME_ARGS_COUNT = 2; - const uint32_t MIN_SCHED_WAKING_ARGS_COUNT = 4; - const uint32_t MIN_CPU_IDLE_ARGS_COUNT = 2; - const uint32_t MIN_CPU_FREQUENCY_ARGS_COUNT = 2; - const uint32_t MIN_PROCESS_EXIT_ARGS_COUNT = 2; - const uint32_t MIN_CLOCK_SET_RATE_ARGS_COUNT = 2; - const uint32_t MIN_CLOCK_ENABLE_ARGS_COUNT = 3; - const uint32_t MIN_CLOCK_DISABLE_ARGS_COUNT = 3; - const uint32_t MIN_IRQ_HANDLER_ENTRY_ARGS_COUNT = 2; - const uint32_t MIN_IRQ_HANDLER_EXIT_ARGS_COUNT = 2; - const uint32_t MIN_SOFTIRQ_ENTRY_ARGS_COUNT = 2; - const uint32_t MIN_SOFTIRQ_EXIT_ARGS_COUNT = 2; - const uint32_t MIN_DMA_FENCE_ARGS_COUNT = 4; - const uint32_t MIN_BINDER_TRANSACTION_ARGS_COUNT = 7; - const uint32_t MIN_BINDER_TRANSACTION_RECEIVED_ARGS_COUNT = 1; - const uint32_t MIN_BINDER_TRANSACTION_ALLOC_BUF_ARGS_COUNT = 3; + static const uint32_t MIN_SCHED_SWITCH_ARGS_COUNT = 6; + static const uint32_t MIN_BLOCKED_REASON_ARGS_COUNT = 3; + static const uint32_t MIN_SCHED_WAKEUP_ARGS_COUNT = 2; + static const uint32_t MIN_TASK_RENAME_ARGS_COUNT = 2; + static const uint32_t MIN_SCHED_WAKING_ARGS_COUNT = 4; + static const uint32_t MIN_CPU_IDLE_ARGS_COUNT = 2; + static const uint32_t MIN_CPU_FREQUENCY_ARGS_COUNT = 2; + static const uint32_t MIN_PROCESS_EXIT_ARGS_COUNT = 2; + static const uint32_t MIN_CLOCK_SET_RATE_ARGS_COUNT = 2; + static const uint32_t MIN_CLOCK_ENABLE_ARGS_COUNT = 3; + static const uint32_t MIN_CLOCK_DISABLE_ARGS_COUNT = 3; + static const uint32_t MIN_IRQ_HANDLER_ENTRY_ARGS_COUNT = 2; + static const uint32_t MIN_IRQ_HANDLER_EXIT_ARGS_COUNT = 2; + static const uint32_t MIN_SOFTIRQ_ENTRY_ARGS_COUNT = 2; + static const uint32_t MIN_SOFTIRQ_EXIT_ARGS_COUNT = 2; + static const uint32_t MIN_DMA_FENCE_ARGS_COUNT = 4; + static const uint32_t MIN_BINDER_TRANSACTION_ARGS_COUNT = 7; + static const uint32_t MIN_BINDER_TRANSACTION_RECEIVED_ARGS_COUNT = 1; + static const uint32_t MIN_BINDER_TRANSACTION_ALLOC_BUF_ARGS_COUNT = 3; std::vector> eventList_ = {}; PrintEventParser printEventParser_; const DataIndex schedWakeupName_ = traceDataCache_->GetDataIndex("sched_wakeup"); diff --git a/trace_streamer/src/table/ftrace/sched_slice_table.cpp b/trace_streamer/src/table/ftrace/sched_slice_table.cpp index 1fa0b94e9..c0c76930a 100644 --- a/trace_streamer/src/table/ftrace/sched_slice_table.cpp +++ b/trace_streamer/src/table/ftrace/sched_slice_table.cpp @@ -127,8 +127,7 @@ int32_t SchedSliceTable::Cursor::Filter(const FilterConstraints &fc, sqlite3_val } auto schedSliceOrderbys = fc.GetOrderBys(); - for (auto i = schedSliceOrderbys.size(); i > 0;) { - i--; + for (auto i = static_cast(schedSliceOrderbys.size()) - 1; i >= 0; i--) { switch (static_cast(schedSliceOrderbys[i].iColumn)) { case Index::ID: case Index::TS: diff --git a/trace_streamer/src/trace_streamer/trace_streamer_selector.cpp b/trace_streamer/src/trace_streamer/trace_streamer_selector.cpp index fc5a10875..6d8aab3fe 100644 --- a/trace_streamer/src/trace_streamer/trace_streamer_selector.cpp +++ b/trace_streamer/src/trace_streamer/trace_streamer_selector.cpp @@ -79,10 +79,7 @@ TraceFileType GuessFileType(const uint8_t *data, size_t size) return TRACE_FILETYPE_UN_KNOW; } std::string start(reinterpret_cast(data), std::min(size, 20)); - if (start.find("# tracer") != std::string::npos) { - return TRACE_FILETYPE_BY_TRACE; - } - if (start.find("# TRACE") != std::string::npos) { + if (start.find("# tracer") != std::string::npos || start.find("# TRACE") != std::string::npos) { return TRACE_FILETYPE_BY_TRACE; } #ifdef ENABLE_RAWTRACE -- Gitee