Signed-off-by: unknown <sijunjie@huawei.com>
This commit is contained in:
unknown
2022-08-06 14:11:35 +08:00
parent 27ccb2ecb5
commit 13ed10db3b
4 changed files with 23 additions and 9 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ declare_args() {
ability_runtime_resource = true
ability_runtime_appspawn = true
efficiency_manager = true
ability_command_for_test = false
ability_command_for_test = true
if (!defined(global_parts_info) ||
defined(global_parts_info.account_os_account)) {
+10 -6
View File
@@ -50,9 +50,10 @@ void WatchDog::ProcessEvent(const OHOS::AppExecFwk::InnerEvent::Pointer &event)
if (eventId == MAIN_THREAD_IS_ALIVE) {
WatchDog::appMainThreadIsAlive_ = true;
if (currentHandler_ != nullptr) {
currentHandler_->RemoveTask(MAIN_THREAD_IS_ALIVE_MSG);
currentHandler_->RemoveTask(MAIN_THREAD_TIMEOUT_TASK);
}
timeOut_.store(false);
isSixSecondEvent_.store(false);
}
}
@@ -137,18 +138,21 @@ bool WatchDog::Timer()
return true;
}
while (!stopWatchDog_) {
if (WaitForDuration(INI_TIMER_SECOND)) {
if (WaitForDuration(CHECK_INTERVAL_TIME)) {
HILOG_DEBUG("cvWatchDog2 is stopped");
return true;
}
auto timeoutTask = [&]() {
timeOut_.store(true);
if (isSixSecondEvent_) {
timeOut_.store(true);
}
appMainThreadIsAlive_ = false;
std::string eventType = "THREAD_BLOCK_3S";
std::string eventType = isSixSecondEvent_ ? "THREAD_BLOCK_6S" : "THREAD_BLOCK_3S";
std::string msgContent = "App main thread is not response!";
MainHandlerDumper handlerDumper;
appMainHandler_->Dump(handlerDumper);
msgContent += handlerDumper.GetDumpInfo();
isSixSecondEvent_.store(true);
if (applicationInfo_ != nullptr) {
OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::AAFWK, eventType,
OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
@@ -171,11 +175,11 @@ bool WatchDog::Timer()
const char *hook_mode = "startup:";
int ret = GetParameter("libc.hook_mode", "", paramOutBuf, bufferLen);
if (ret <= 0 || strncmp(paramOutBuf, hook_mode, strlen(hook_mode)) != 0) {
currentHandler_->PostTask(timeoutTask, MAIN_THREAD_IS_ALIVE_MSG, MAIN_THREAD_TIMEOUT_TIME);
currentHandler_->PostTask(timeoutTask, MAIN_THREAD_TIMEOUT_TASK, CHECK_INTERVAL_TIME);
}
}
if (appMainHandler_ != nullptr) {
appMainHandler_->SendEvent(MAIN_THREAD_IS_ALIVE);
appMainHandler_->SendEvent(CHECK_MAIN_THREAD_IS_ALIVE_MSG);
}
}
return true;
+8
View File
@@ -47,6 +47,14 @@ THREAD_BLOCK_3S:
PROCESS_NAME: {type: STRING, desc: process name}
MSG: {type: STRING, desc: application event message}
THREAD_BLOCK_6S:
__BASE: {type: FAULT, level: CRITICAL, tag: STABILITY, desc: application freeze}
PID: {type: INT32, desc: pid}
UID: {type: INT32, desc: uid}
PACKAGE_NAME: {type: STRING, desc: package name}
PROCESS_NAME: {type: STRING, desc: process name}
MSG: {type: STRING, desc: application event message}
# fault event
START_ABILITY_ERROR:
+4 -2
View File
@@ -26,10 +26,11 @@
namespace OHOS {
namespace AppExecFwk {
constexpr uint32_t MAIN_THREAD_IS_ALIVE = 0;
constexpr uint32_t MAIN_THREAD_TIMEOUT_TIME = 6000;
constexpr uint32_t CHECK_INTERVAL_TIME = 3000;
constexpr uint32_t INI_TIMER_FIRST_SECOND = 10000;
constexpr uint32_t INI_TIMER_SECOND = 3000;
constexpr const char* CHECK_MAIN_THREAD_IS_ALIVE_MSG = "CHECK_MAIN_THREAD_IS_ALIVE";
constexpr const char* MAIN_THREAD_IS_ALIVE_MSG = "MAIN_THREAD_IS_ALIVE";
constexpr const char* MAIN_THREAD_TIMEOUT_TASK = "MAIN_THREAD_TIMEOUT_TASK";
class WatchDog : public EventHandler {
public:
WatchDog(const std::shared_ptr<EventRunner> &runner);
@@ -97,6 +98,7 @@ private:
std::atomic_bool stopWatchDog_ = false;
std::atomic<bool> timeOut_ = false;
std::atomic_bool isSixSecondEvent_ = false;
std::shared_ptr<ApplicationInfo> applicationInfo_ = nullptr;
std::shared_ptr<std::thread> watchDogThread_ = nullptr;
std::shared_ptr<EventRunner> watchDogRunner_ = nullptr;