From 7071f670582a4946f520fc15acbf33a649e6e564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Fri, 8 Aug 2025 09:43:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- .../task_mgr/include/argument_parser.h | 1 + .../services/task_mgr/include/task_manager.h | 6 +- .../services/task_mgr/src/task_manager.cpp | 82 ++++++++----------- 3 files changed, 41 insertions(+), 48 deletions(-) diff --git a/smartperf_device/device_command/services/task_mgr/include/argument_parser.h b/smartperf_device/device_command/services/task_mgr/include/argument_parser.h index d838538a..38df95ff 100644 --- a/smartperf_device/device_command/services/task_mgr/include/argument_parser.h +++ b/smartperf_device/device_command/services/task_mgr/include/argument_parser.h @@ -130,6 +130,7 @@ private: {"-DDR", {ArgumentParser::ArgType::BOOL}}, {"-NET", {ArgumentParser::ArgType::BOOL}}, {"-HCI", {ArgumentParser::ArgType::BOOL}}, + {"-trace", {ArgumentParser::ArgType::BOOL}}, }; std::unordered_map values_; std::vector errors_; diff --git a/smartperf_device/device_command/services/task_mgr/include/task_manager.h b/smartperf_device/device_command/services/task_mgr/include/task_manager.h index 53c4c8ef..b6d6a743 100644 --- a/smartperf_device/device_command/services/task_mgr/include/task_manager.h +++ b/smartperf_device/device_command/services/task_mgr/include/task_manager.h @@ -57,15 +57,16 @@ public: void DeleteTask(SpProfiler* task); void SetFileTitle(); void InitDataCsv(); + ArgumentParser& GetArgumentParser(); private: std::map TaskFun(SpProfiler* pro, uint32_t batch, bool record); void GetProcessInfo(CommandType type, const ArgumentParser::ArgValue& value); std::string MapToString(std::map& myMap); void StartSaveFileThread(); + void CollectThreadsData(); void SaveRegularly(std::chrono::steady_clock::time_point& loopEnd); void ProcessCurrentBatch(std::map& data); - void ScheduleSaveData(bool switchFlag = false); void ProcessOnceTask(bool start); void GpuCounterProcess(const ArgumentParser::ArgValue& value); void SpecialKeyProcess(const std::string& specKey); @@ -101,8 +102,9 @@ private: int32_t dataIndex_ {0}; std::atomic_bool recordData_ {false}; std::atomic_bool savingFile_ {false}; - bool isPause_ {false}; + std::atomic_bool isPause_ {false}; bool firstSetTitle_ {true}; + ArgumentParser parameter_; }; } #endif // TASK_MANAGER_H \ No newline at end of file diff --git a/smartperf_device/device_command/services/task_mgr/src/task_manager.cpp b/smartperf_device/device_command/services/task_mgr/src/task_manager.cpp index da39030e..39432b43 100644 --- a/smartperf_device/device_command/services/task_mgr/src/task_manager.cpp +++ b/smartperf_device/device_command/services/task_mgr/src/task_manager.cpp @@ -65,11 +65,8 @@ ThreadLocal::~ThreadLocal() if (g_mgr == nullptr || (datasA_.empty() && datasB_.empty())) { return; } - if (switch_) { - g_mgr->CollectData(datasA_); - } else { - g_mgr->CollectData(datasB_); - } + g_mgr->CollectData(datasA_); + g_mgr->CollectData(datasB_); } TaskManager::TaskManager(bool isIPC) @@ -168,9 +165,8 @@ void TaskManager::AddTask(const std::unordered_map TaskManager::TaskFun(SpProfiler* pro, uint32_ return mapRes; } +void TaskManager::CollectThreadsData() +{ + for (auto& item : threadLocals_) { + if (item == nullptr) { + continue; + } + + std::map>& datas = + (running_ ^ item->switch_) ? item->datasA_ : item->datasB_; + + CollectData(datas); + std::map>().swap(datas); + } +} + void TaskManager::StartSaveFileThread() { if (scheduleSaveDataTh_.joinable()) { @@ -228,10 +239,10 @@ void TaskManager::StartSaveFileThread() while (running_ && recordData_) { std::unique_lock lock(scheduleSaveDataMtx_); scheduleSaveDataCond_.wait(lock); - if (!running_) { - break; - } - ScheduleSaveData(); + CollectThreadsData(); + WriteToCSV(); + std::map>().swap(datas_); + savingFile_ = false; } LOGD("The data saving thread exits"); }); @@ -242,7 +253,6 @@ void TaskManager::SaveRegularly(std::chrono::steady_clock::time_point& loopEnd) if (!recordData_) { return; } - if ((loopEnd - currentTimePoint_) >= std::chrono::minutes(SAVE_DATA_INTERVAL_MINUTE) && !(SpProfilerFactory::editorFlag)) { std::unique_lock lock(mtx_); @@ -315,9 +325,7 @@ void TaskManager::Start(bool record) } LOGD("main loop exit"); ProcessOnceTask(false); - running_ = false; finishCond_.notify_all(); - scheduleSaveDataCond_.notify_all(); }); } @@ -389,25 +397,26 @@ void TaskManager::Stop(bool pause) } mainLoop_.join(); } + if (scheduleSaveDataTh_.joinable()) { { std::lock_guard lock(mtx_); running_ = false; } + scheduleSaveDataCond_.notify_all(); scheduleSaveDataTh_.join(); } + if (!pause) { LOGD("Start/Stop Collection End"); threadPool_.Stop(); - } else { - ScheduleSaveData(true); } } void TaskManager::Wait() { std::unique_lock lock(finishMtx_); - finishCond_.wait(lock, [this] { return !running_.load(); }); + finishCond_.wait(lock); } void TaskManager::CollectData(std::map>& datas) @@ -511,30 +520,6 @@ void TaskManager::ProcessCurrentBatch(std::map& data) } } -void TaskManager::ScheduleSaveData(bool switchFlag) -{ - for (auto& item : threadLocals_) { - if (item == nullptr) { - continue; - } - if (switchFlag) { - item->switch_ = !item->switch_; - } - std::map>& datas = item->switch_ ? item->datasB_ : item->datasA_; - for (auto& [k, v] : datas) { - if (v.empty()) { - continue; - } - datas_[k].merge(v); - } - std::map>().swap(datas); - } - - WriteToCSV(); - std::map>().swap(datas_); - savingFile_ = false; -} - void TaskManager::EnableIPCCallback() { ipcDataRecv_ = true; @@ -566,14 +551,14 @@ void TaskManager::ProcessOnceTask(bool start) if (item == nullptr) { continue; } - start ? item->StartExecutionOnce(isPause_) : item->FinishtExecutionOnce(isPause_); + start ? item->StartExecutionOnce(isPause_.load()) : item->FinishtExecutionOnce(isPause_.load()); } for (auto& item : normalTask_) { if (item == nullptr) { continue; } - start ? item->StartExecutionOnce(isPause_) : item->FinishtExecutionOnce(isPause_); + start ? item->StartExecutionOnce(isPause_.load()) : item->FinishtExecutionOnce(isPause_.load()); } } @@ -582,13 +567,13 @@ void TaskManager::SetRecordState(bool record) if (record) { LOGD("Start saving data regularly"); currentTimePoint_ = std::chrono::steady_clock::now(); - recordData_ = record; + recordData_ = true; StartSaveFileThread(); } else { LOGD("Turn off timing to save data"); auto time = currentTimePoint_ + std::chrono::minutes(SAVE_DATA_INTERVAL_MINUTE + 1); SaveRegularly(time); - recordData_ = record; + recordData_ = false; if (scheduleSaveDataTh_.joinable()) { scheduleSaveDataTh_.join(); @@ -639,4 +624,9 @@ void TaskManager::InitDataCsv() LOGD("CreatPath already exists: %s", fileName_.c_str()); } } + +ArgumentParser& TaskManager::GetArgumentParser() +{ + return parameter_; +} } \ No newline at end of file -- Gitee