diff --git a/trace_streamer/build/protoc_w.py b/trace_streamer/build/protoc_w.py index 3dd7b13a4a1de30832f345213cb58bad9f5ace55..de4cfdcdb1ca9b81ef1858d06ecf4e8bfdc6fcea 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 e3708b9704e2c4b1648c2e572287b2fadf8f7b9d..c4a8cf3915c73687e843d5ff010650499e497e84 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/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp b/trace_streamer/src/parser/pbreader_parser/hilog_parser/pbreader_hilog_parser.cpp index 2ad88bebbe34cb484a40e0dd776572b419ce0d0e..5116c38e0f4e08f9fa7fed1ca5203b6ef1270741 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); 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 ad373e46b85350b50a007884a0b5828f96a91a85..f62cda3bcf3430b64783cb65f9a5ce26a207dd36 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 1557e9fdeba99ab63baac1012ddb55d0c58cc0f9..a59cd66e625ee6635cbe9bae615d5482946884d8 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/ptreader_parser/bytrace_parser/bytrace_event_parser.h b/trace_streamer/src/parser/ptreader_parser/bytrace_parser/bytrace_event_parser.h index 9021d221f7c519283dfb7eef5c935bf5fd02ed2d..8020006f27dd7090ff741ccc6999f0687fe5b85a 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/parser/rawtrace_parser/cpu_detail_parser.cpp b/trace_streamer/src/parser/rawtrace_parser/cpu_detail_parser.cpp index 9c0f3546a6b6521ca64f005bf94f26044c77b3ba..527e7a4284c1cdb6a9be900b6c831c768f09005c 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; } diff --git a/trace_streamer/src/table/ftrace/sched_slice_table.cpp b/trace_streamer/src/table/ftrace/sched_slice_table.cpp index 1fa0b94e9e15da806be5680ff2d194a21cbb14be..c0c76930a292a2bc06b72e661cfbf50e912f52ea 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 fc5a1087516c97dd5d20f081f4427afc95d9aa85..6d8aab3fe947f524aa432449f0529f80da75af00 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