From 2540f746f0f4cd457c7da2629abb7fd650b562f4 Mon Sep 17 00:00:00 2001 From: ganchuantao Date: Mon, 25 Aug 2025 11:13:13 +0800 Subject: [PATCH] =?UTF-8?q?=20=20=20=20=E4=BC=98=E5=8C=96ftrace=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=20=20=20=20=20Signed-off-b?= =?UTF-8?q?y:ganchuantao1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ganchuantao --- .../ftrace_plugin/src/flow_controller.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/device/plugins/ftrace_plugin/src/flow_controller.cpp b/device/plugins/ftrace_plugin/src/flow_controller.cpp index ee6465adc..4459e6b3a 100644 --- a/device/plugins/ftrace_plugin/src/flow_controller.cpp +++ b/device/plugins/ftrace_plugin/src/flow_controller.cpp @@ -388,7 +388,7 @@ void FlowController::HmCaptureWorkOnNomalModeInner() auto tracePeriod = std::chrono::milliseconds(tracePeriodMs_); ftraceParser_->ParseTidGid(); while (keepRunning_) { - std::this_thread::sleep_for(tracePeriod); + auto start = std::chrono::steady_clock::now(); if (flushCacheData_ && !keepRunning_) { PROFILER_LOG_INFO(LOG_CORE, "flushCacheData_ is true, return"); return; @@ -400,11 +400,25 @@ void FlowController::HmCaptureWorkOnNomalModeInner() } if (rawDataBytes == 0) { PROFILER_LOG_INFO(LOG_CORE, "Get hm raw data is 0 bytes."); + auto duration = + std::chrono::duration_cast(std::chrono::steady_clock::now() - start); + if (tracePeriod > duration) { + std::this_thread::sleep_for(tracePeriod - duration); + } continue; } if (!HmParseEventDataOnNomalMode(rawDataBytes)) { PROFILER_LOG_ERROR(LOG_CORE, "HmParseEventData failed!"); } + auto duration = std::chrono::duration_cast(std::chrono::steady_clock::now() - start); + if (tracePeriod > duration) { + std::this_thread::sleep_for(tracePeriod - duration); + } + } + // read last data + long rawLastDataBytes = HmReadEventData(); + if (rawLastDataBytes > 0 && !HmParseEventDataOnNomalMode(rawLastDataBytes)) { + PROFILER_LOG_ERROR(LOG_CORE, "HmParseEventData failed!"); } tansporter_->Flush(); PROFILER_LOG_INFO(LOG_CORE, "FlowController::HmCaptureWorkOnNomalMode done!"); -- Gitee