From 438bad699dbbd5e0b0db011cf0d0f4ccbb1c307e Mon Sep 17 00:00:00 2001 From: cs1111 Date: Sat, 26 Jul 2025 18:21:10 +0800 Subject: [PATCH] fix:add PRINT_TIME in DUMP_CATCHER_STATS Signed-off-by: cs1111 Change-Id: I2549682ec4aed16e5b5c10f2bd0e29a98519f735 --- interfaces/common/dfx_socket_request.h | 2 ++ services/fault_logger_service.cpp | 2 ++ services/fault_logger_service.h | 1 + tools/process_dump/process_dumper.cpp | 5 +++-- tools/process_dump/process_dumper.h | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/interfaces/common/dfx_socket_request.h b/interfaces/common/dfx_socket_request.h index 6f3f3aba3..a32f4111f 100644 --- a/interfaces/common/dfx_socket_request.h +++ b/interfaces/common/dfx_socket_request.h @@ -246,6 +246,8 @@ typedef struct FaultLoggerdStatsRequest { int32_t result; /** count of thread in target process */ uint32_t targetProcessThreadCount; + /** write dump info cost time */ + uint32_t writeDumpInfoCost; /** caller elf offset */ uintptr_t offset; char summary[128]; // 128 : max summary size diff --git a/services/fault_logger_service.cpp b/services/fault_logger_service.cpp index 36dc4f979..5f853165b 100644 --- a/services/fault_logger_service.cpp +++ b/services/fault_logger_service.cpp @@ -146,6 +146,7 @@ void StatsService::ReportDumpStats(const DumpStats& stat) "OVERALL_TIME", stat.dumpCatcherFinishTime - stat.requestTime, "SIGNAL_TIME", stat.signalTime - stat.requestTime, "DUMPER_START_TIME", stat.processdumpStartTime - stat.signalTime, + "WRITE_DUMP_INFO_TIME", stat.writeDumpInfoCost, "UNWIND_TIME", stat.processdumpFinishTime - stat.processdumpStartTime, "TARGET_PROCESS_THREAD_COUNT", stat.targetProcessThreadCount); } @@ -173,6 +174,7 @@ int32_t StatsService::OnRequest(const std::string& socketName, int32_t connectio stats.processdumpStartTime = requestData.processdumpStartTime; stats.processdumpFinishTime = requestData.processdumpFinishTime; stats.targetProcessName = requestData.targetProcess; + stats.writeDumpInfoCost = requestData.writeDumpInfoCost; } else if (requestData.type == DUMP_CATCHER) { auto task = [requestData, this] { auto iter = std::find_if(stats_.begin(), stats_.end(), [&requestData](const DumpStats& dumpStats) { diff --git a/services/fault_logger_service.h b/services/fault_logger_service.h index dcd61b4a1..9e0222856 100644 --- a/services/fault_logger_service.h +++ b/services/fault_logger_service.h @@ -76,6 +76,7 @@ struct DumpStats { uint64_t dumpCatcherFinishTime = 0; int32_t result = 0; uint32_t targetProcessThreadCount = 0; + uint32_t writeDumpInfoCost = 0; std::string summary; std::string callerProcessName; std::string callerElfName; diff --git a/tools/process_dump/process_dumper.cpp b/tools/process_dump/process_dumper.cpp index aef859e52..f22eb02cb 100644 --- a/tools/process_dump/process_dumper.cpp +++ b/tools/process_dump/process_dumper.cpp @@ -193,11 +193,10 @@ void ProcessDumper::Dump() startTime_ = GetTimeMillisec(); int resDump = DumpProcess(); FormatJsonInfoIfNeed(); + WriteDumpResIfNeed(resDump); finishTime_ = GetTimeMillisec(); ReportSigDumpStats(); - - WriteDumpResIfNeed(resDump); DfxBufferWriter::GetInstance().PrintBriefDumpInfo(); DfxBufferWriter::GetInstance().Finish(); DFXLOGI("Finish dump stacktrace for %{public}s(%{public}d:%{public}d).", @@ -475,6 +474,7 @@ int ProcessDumper::ParseSymbols(std::shared_ptr threadDumpInfo) DFXLOGW("do not parse symbol, remain %{public}" PRId64 "ms", expectedDumpFinishTime_ - curTime); dumpRes = DumpErrorCode::DUMP_ESYMBOL_NO_PARSE; } + finishParseSymbolTime_ = GetTimeMillisec(); return dumpRes; } @@ -673,6 +673,7 @@ void ProcessDumper::ReportSigDumpStats() stat->signalTime = request_.timeStamp; stat->processdumpStartTime = startTime_; stat->processdumpFinishTime = finishTime_ == 0 ? GetTimeMillisec() : finishTime_; + stat->writeDumpInfoCost = finishParseSymbolTime_ > 0 ? stat->processdumpFinishTime - finishParseSymbolTime_ : 0; if (memcpy_s(stat->targetProcess, sizeof(stat->targetProcess), request_.processName, sizeof(request_.processName)) != 0) { DFXLOGE("Failed to copy target processName (%{public}d)", errno); diff --git a/tools/process_dump/process_dumper.h b/tools/process_dump/process_dumper.h index 6a9739d90..bd0eb407a 100644 --- a/tools/process_dump/process_dumper.h +++ b/tools/process_dump/process_dumper.h @@ -79,6 +79,7 @@ private: #if defined(__aarch64__) std::unique_ptr coreDumpService_ = nullptr; #endif + uint64_t finishParseSymbolTime_ = 0; }; } // namespace HiviewDFX } // namespace OHOS -- Gitee