!1416 set posttask priority by taskpool.execute(task, priority) 挑单 5.0release

Merge pull request !1416 from wangzhaoyong/cp0910
This commit is contained in:
openharmony_ci 2024-09-12 03:03:41 +00:00 committed by Gitee
commit 4c43fa951a
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 19 additions and 10 deletions

View File

@ -54,6 +54,15 @@ static constexpr uint32_t TRIGGER_INTERVAL = 30000; // 30000: 30s
static constexpr uint32_t SHRINK_STEP = 4; // 4: try to release 4 threads every time
[[maybe_unused]] static constexpr uint32_t IDLE_THRESHOLD = 2; // 2: 2 intervals later will release the thread
#if defined(ENABLE_TASKPOOL_EVENTHANDLER)
static const std::map<Priority, OHOS::AppExecFwk::EventQueue::Priority> TASK_EVENTHANDLER_PRIORITY_MAP = {
{Priority::IDLE, OHOS::AppExecFwk::EventQueue::Priority::IDLE},
{Priority::LOW, OHOS::AppExecFwk::EventQueue::Priority::LOW},
{Priority::MEDIUM, OHOS::AppExecFwk::EventQueue::Priority::HIGH},
{Priority::HIGH, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE},
};
#endif
// ----------------------------------- TaskManager ----------------------------------------
TaskManager& TaskManager::GetInstance()
{
@ -942,7 +951,7 @@ napi_value TaskManager::NotifyCallbackExecute(napi_env env, TaskResultInfo* resu
auto onCallbackTask = [callbackInfo]() {
TaskPool::ExecuteCallbackTask(callbackInfo.get());
};
TaskManager::GetInstance().PostTask(onCallbackTask, "TaskPoolOnCallbackTask");
TaskManager::GetInstance().PostTask(onCallbackTask, "TaskPoolOnCallbackTask", worker->priority_);
} else {
callbackInfo->onCallbackSignal->data = callbackInfo.get();
uv_async_send(callbackInfo->onCallbackSignal);
@ -1393,9 +1402,9 @@ void TaskManager::UpdateSystemAppFlag()
#endif
#if defined(ENABLE_TASKPOOL_EVENTHANDLER)
bool TaskManager::PostTask(std::function<void()> task, const char* taskName)
bool TaskManager::PostTask(std::function<void()> task, const char* taskName, Priority priority)
{
bool res = mainThreadHandler_->PostTask(task, taskName, 0, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE);
bool res = mainThreadHandler_->PostTask(task, taskName, 0, TASK_EVENTHANDLER_PRIORITY_MAP.at(priority));
if (!res) {
HILOG_ERROR("taskpool:: the mainThread EventHandler postTask failed");
}

View File

@ -124,7 +124,7 @@ public:
void RemoveDependentTaskInfo(uint64_t dependentTaskId, uint64_t taskId);
std::string GetTaskDependInfoToString(uint64_t taskId);
bool PostTask(std::function<void()> task, const char* taskName);
bool PostTask(std::function<void()> task, const char* taskName, Priority priority = Priority::DEFAULT);
// for duration
void StoreTaskDuration(uint64_t taskId, uint64_t totalDuration, uint64_t cpuDuration);

View File

@ -430,7 +430,7 @@ void Worker::PerformTask(const uv_async_t* req)
}
Task::StartExecutionTask(task->onStartExecutionCallBackInfo_);
};
TaskManager::GetInstance().PostTask(onStartExecutionTask, "TaskPoolOnStartExecutionTask");
TaskManager::GetInstance().PostTask(onStartExecutionTask, "TaskPoolOnStartExecutionTask", taskInfo.second);
} else if (task->onStartExecutionSignal_ != nullptr) {
uv_async_send(task->onStartExecutionSignal_);
}
@ -496,7 +496,7 @@ void Worker::NotifyHandleTaskResult(Task* task)
}
TaskPool::HandleTaskResultCallback(task);
};
TaskManager::GetInstance().PostTask(onResultTask, "TaskPoolOnResultTask");
TaskManager::GetInstance().PostTask(onResultTask, "TaskPoolOnResultTask", worker->priority_);
} else {
uv_async_send(task->onResultSignal_);
}

View File

@ -1842,7 +1842,7 @@ void Worker::PostWorkerOverTask()
OHOS::AppExecFwk::EventRunner::GetMainEventRunner());
}
g_mainThreadHandler->PostTask(hostOnOverSignalTask, "WorkerHostOnOverSignalTask",
0, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE);
0, OHOS::AppExecFwk::EventQueue::Priority::HIGH);
}
void Worker::PostWorkerErrorTask()
@ -1861,7 +1861,7 @@ void Worker::PostWorkerErrorTask()
OHOS::AppExecFwk::EventRunner::GetMainEventRunner());
}
g_mainThreadHandler->PostTask(hostOnErrorTask, "WorkerHostOnErrorTask",
0, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE);
0, OHOS::AppExecFwk::EventQueue::Priority::HIGH);
}
void Worker::PostWorkerMessageTask()
@ -1879,7 +1879,7 @@ void Worker::PostWorkerMessageTask()
OHOS::AppExecFwk::EventRunner::GetMainEventRunner());
}
g_mainThreadHandler->PostTask(hostOnMessageTask, "WorkerHostOnMessageTask",
0, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE);
0, OHOS::AppExecFwk::EventQueue::Priority::HIGH);
}
void Worker::PostWorkerGlobalCallTask()
@ -1897,7 +1897,7 @@ void Worker::PostWorkerGlobalCallTask()
OHOS::AppExecFwk::EventRunner::GetMainEventRunner());
}
g_mainThreadHandler->PostTask(hostOnGlobalCallTask, "WorkerHostOnGlobalCallTask",
0, OHOS::AppExecFwk::EventQueue::Priority::IMMEDIATE);
0, OHOS::AppExecFwk::EventQueue::Priority::HIGH);
}
bool Worker::IsValidWorker(Worker* worker)