From 9216f5574402c8eac8d50404818cfd0d5c38bac7 Mon Sep 17 00:00:00 2001 From: hhl Date: Mon, 8 Sep 2025 15:48:27 +0800 Subject: [PATCH] fix issues Signed-off-by: hhl --- .../native/appkit/dfr/appfreeze_inner.cpp | 21 ++++++++++++------- .../kits/native/appkit/dfr/appfreeze_inner.h | 1 + .../appfreeze_inner_test.cpp | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/frameworks/native/appkit/dfr/appfreeze_inner.cpp b/frameworks/native/appkit/dfr/appfreeze_inner.cpp index 824d5a0e096..aa789d672ad 100644 --- a/frameworks/native/appkit/dfr/appfreeze_inner.cpp +++ b/frameworks/native/appkit/dfr/appfreeze_inner.cpp @@ -166,13 +166,13 @@ void AppfreezeInner::AppfreezeHandleOverReportCount(bool isSixSecondEvent) " ret:%{public}d", pid, ret); } faultData.errorObject.name = AppFreezeType::THREAD_BLOCK_3S; - EnableFreezeSample(faultData); } if (!IsHandleAppfreeze()) { NotifyANR(faultData); return; } std::string msgContent; + EnableFreezeSample(faultData); GetMainHandlerDump(msgContent); ChangeFaultDateInfo(faultData, msgContent); return; @@ -183,8 +183,7 @@ void AppfreezeInner::EnableFreezeSample(FaultData& newFaultData) std::string eventName = newFaultData.errorObject.name; if (eventName == AppFreezeType::THREAD_BLOCK_3S || eventName == AppFreezeType::LIFECYCLE_HALF_TIMEOUT) { OHOS::HiviewDFX::Watchdog::GetInstance().StartSample(HALF_DURATION, HALF_INTERVAL); - TAG_LOGI(AAFwkTag::APPDFR, "start to sample freeze stack, eventName:%{public}s", - eventName.c_str()); + TAG_LOGI(AAFwkTag::APPDFR, "start to sample freeze stack, eventName:%{public}s", eventName.c_str()); return; } if (eventName == AppFreezeType::THREAD_BLOCK_6S || eventName == AppFreezeType::LIFECYCLE_TIMEOUT || @@ -199,12 +198,8 @@ void AppfreezeInner::EnableFreezeSample(FaultData& newFaultData) } } -int AppfreezeInner::AppfreezeHandle(const FaultData& faultData, bool onlyMainThread) +void AppfreezeInner::ReportAppfreezeTask(const FaultData& faultData, bool onlyMainThread) { - if (!IsHandleAppfreeze()) { - NotifyANR(faultData); - return -1; - } FaultData newFaultData = faultData; EnableFreezeSample(newFaultData); auto reportFreeze = [newFaultData, onlyMainThread]() { @@ -225,6 +220,16 @@ int AppfreezeInner::AppfreezeHandle(const FaultData& faultData, bool onlyMainThr appfreezeInnerTaskHandler_->SubmitTask(reportFreeze, "reportFreeze"); } } +} + +int AppfreezeInner::AppfreezeHandle(const FaultData& faultData, bool onlyMainThread) +{ + if (!IsHandleAppfreeze()) { + NotifyANR(faultData); + return -1; + } + auto watchdogTask = [faultData, onlyMainThread, this] { this->ReportAppfreezeTask(faultData, onlyMainThread); }; + OHOS::HiviewDFX::Watchdog::GetInstance().RunOneShotTask("ReportAppfreezeInnerTask", watchdogTask); return 0; } diff --git a/interfaces/kits/native/appkit/dfr/appfreeze_inner.h b/interfaces/kits/native/appkit/dfr/appfreeze_inner.h index cbe0ae53118..4c88b991267 100644 --- a/interfaces/kits/native/appkit/dfr/appfreeze_inner.h +++ b/interfaces/kits/native/appkit/dfr/appfreeze_inner.h @@ -62,6 +62,7 @@ private: bool GetAppInForeground(); bool GetMainThreadSample(); void EnableFreezeSample(FaultData& newFaultData); + void ReportAppfreezeTask(const FaultData& faultData, bool onlyMainThread); static std::mutex singletonMutex_; static std::shared_ptr instance_; diff --git a/test/unittest/dfr_test/appfreeze_inner_test/appfreeze_inner_test.cpp b/test/unittest/dfr_test/appfreeze_inner_test/appfreeze_inner_test.cpp index 4c778c5f6e3..e441a40af3b 100644 --- a/test/unittest/dfr_test/appfreeze_inner_test/appfreeze_inner_test.cpp +++ b/test/unittest/dfr_test/appfreeze_inner_test/appfreeze_inner_test.cpp @@ -156,10 +156,12 @@ HWTEST_F(AppfreezeInnerTest, AppfreezeInner__AppfreezeHandle_001, TestSize.Level appfreezeInner->SetApplicationInfo(applicationInfo); int ret = appfreezeInner->AppfreezeHandle(faultData, onlyMainThread); EXPECT_EQ(ret, 0); + appfreezeInner->ReportAppfreezeTask(faultData, onlyMainThread); ret = appfreezeInner->AcquireStack(faultData, onlyMainThread); EXPECT_EQ(ret, 0); appfreezeInner->SetAppDebug(true); ret = appfreezeInner->AppfreezeHandle(faultData, onlyMainThread); + appfreezeInner->ReportAppfreezeTask(faultData, onlyMainThread); EXPECT_EQ(ret, -1); GTEST_LOG_(INFO) << "AppfreezeInner__AppfreezeHandle_001 end"; } -- Gitee